добрый день!

пакет не работает на новой версии приложения 8,0,6. у меня пакет-сборка.

он падает с ошибкой 

 Could not load type 'Terrasoft.Configuration.BaseProductEntry_Base_Terrasoft' from assembly 'Terrasoft.Configuration, Version=8.0.6.3429, Culture=neutral, PublicKeyToken=null'.

Я сделал отдельную дллку, которая ссылается на проект Terrasoft.Configuration.Dev (Terrasoft.Configuration.dll). в этой библиотеке хранится логика приложения. в определенный момент времени мне необходимо для контакта добавить номер. я делаю то след образом:

var newPhone = new ContactCommunication(connection);
newPhone.SetDefColumnValues();
 
newPhone.CommunicationTypeId = Guid.Parse("d4a2dc80-30ca-df11-9b2a-001d60e938c6");
string phoneWithoutPlus = GetPhoneWithoutPlus(phone);
newPhone.Number = phoneWithoutPlus;
newPhone.ContactId = contact.Id;
newPhone.Save(validateRequired: false, setColumnDefValue: false);

Terrasoft.Configuration.ContactCommunication тип используется из проекта Terrasoft.Configuration.Dev и он наследует ContactCommunication_Base_Terrasoft который отсутствует в 8,0,6 судя по ошибке, но при этом он есть в версиях 7,18 и 8,0,4.

 

подскажите - данное поведение ожидаемое?

если да, то как тогда можно использовать обьекты из проекта Terrasoft.Configuration.Dev для того чтобы не делать свои классы для работы со стандартными обьектами. или теперь вообще нельзя использовать обьекты из Terrasoft.Configuration.Dev и надо писать свои классы?

если нет, то что делать дальше? будет фикс скоро?

Нравится

3 комментария
Лучший ответ

В новой версии много объектов было перенесено из пакета Base в CrtBase. Соответственно автоматически сгенеририованное имя объекта поменялось и называется не BaseProductEntry_Base_Terrasoft а BaseProductEntry_CrtBase_Terrasoft.



Но это изначально неправильный подход работать с объектами через такие названия, лучше сводить их до универсальных названий, например BaseProductEntry. В таком случае такие проблемы не будут возникать.

 

Так же хорошей практикой является не работать с классами напрямую по названию, а работать через универсальный класс Entity. В таком случае даже зависимость от Terrasoft.Configuration не нужна, достаточно Terrasoft.Core.

пинг. можете подсказать почему так происходит?

В новой версии много объектов было перенесено из пакета Base в CrtBase. Соответственно автоматически сгенеририованное имя объекта поменялось и называется не BaseProductEntry_Base_Terrasoft а BaseProductEntry_CrtBase_Terrasoft.



Но это изначально неправильный подход работать с объектами через такие названия, лучше сводить их до универсальных названий, например BaseProductEntry. В таком случае такие проблемы не будут возникать.

 

Так же хорошей практикой является не работать с классами напрямую по названию, а работать через универсальный класс Entity. В таком случае даже зависимость от Terrasoft.Configuration не нужна, достаточно Terrasoft.Core.

спасибо за ответ, Владислав!

Показать все комментарии

Добрый день.

Подскажите пожалйста, как можно изменить тип справочных записей (или запретить переход по ним) которые отображаются на секции раздела:

Изображение удалено.

Может как-то можно применить параметр "showValueAsLink": false на секции?

Нравится

4 комментария

Здравствуйте! На сколько я понял данные ссылки ведут на записи в других разделах. Запрет можно реализовать через роли. Запретить для данного пользователя чтение/редактирование. В общем нужно "поиграться" с правами доступа на записи

Тут больше речь о том, что пользователь не должен видеть "внутрянку" этой записи, куда ведет ссылка. Т.е. выбрать из справочника может, а проваливаться нет

Если ваши пользователи не умеют пользоваться настройкой колонок, то вы можете вывести поле Название из связанного объекта (например Клиент.ФИО), тогда будет отображаться его текстовое значение, но без ссылки. Но это будет работать до тех пор, пока пользователь не изменит настройки колонок у себя.

Такабаев Тимур,

Точно! спасибо)

Показать все комментарии

Добрый день. есть вот такой пример запроса.

Изображение удалено.

идея в том чтоб взять записи которые созданы после определенного времени.

в результате он генерирует следующий SQL запрос который не совсем подходит, так как он возвращает запись которая была возвращена в прошлой выборке (я вытаскиваю данные по 10 записей).

Изображение удалено.

пример запроса, который создается

SELECT
       "Contact"."Name" "Name",
       "Contact"."QSoftGSTime" "QSoftGSTime",
       "Contact"."ContactPhoto" "ContactPhoto",
       "Contact"."Phone" "Phone",
       "Contact"."CreatedOn" "CreatedOn",
       COALESCE("SysCityLcz"."Name", "City"."Name") "City.Name"
FROM
       "public"."Contact" "Contact"
       LEFT OUTER JOIN "public"."City" "City" ON ("City"."Id" = "Contact"."CityId")
       LEFT OUTER JOIN "public"."SysCityLcz" "SysCityLcz" ON ("SysCityLcz"."RecordId" = "City"."Id"
       AND "SysCityLcz"."SysCultureId" = '{F0EA9715-8757-474C-AEE9-743D672E48C9}')
WHERE
       "Contact"."CreatedOn" > TO_TIMESTAMP('2023-02-06 21:21:02.149', 'YYYY-MM-DD HH24:MI:SS.FF3')
ORDER BY
       "CreatedOn" ASC NULLS FIRST
LIMIT 10

получается что при выборке данных проверяется только первые три цифры из милисекунд ('2023-02-06 21:21:02.149', 'YYYY-MM-DD HH24:MI:SS.FF3'). в итоге я получаю два раза одну и ту же запись. решение это указывать все 6 цифр милисекунд следующий запрос выполняется корректно и не приводит к дублированию данных

SELECT
       "Contact"."Name" "Name",
       "Contact"."QSoftGSTime" "QSoftGSTime",
       "Contact"."ContactPhoto" "ContactPhoto",
       "Contact"."Phone" "Phone",
       "Contact"."CreatedOn" "CreatedOn",
       COALESCE("SysCityLcz"."Name", "City"."Name") "City.Name"
FROM
       "public"."Contact" "Contact"
       LEFT OUTER JOIN "public"."City" "City" ON ("City"."Id" = "Contact"."CityId")
       LEFT OUTER JOIN "public"."SysCityLcz" "SysCityLcz" ON ("SysCityLcz"."RecordId" = "City"."Id"
       AND "SysCityLcz"."SysCultureId" = '{F0EA9715-8757-474C-AEE9-743D672E48C9}')
WHERE
       "Contact"."CreatedOn" > TO_TIMESTAMP('2023-02-06 21:21:02.149528', 'YYYY-MM-DD HH24:MI:SS.FF6')
ORDER BY
       "CreatedOn" ASC NULLS FIRST
LIMIT 10

я не нашел способа управлять количеством цифр милисекунд в запросе.

можете подсказать как это правильно сделать?

пока что как хак я решил генерировать запрос с помощью EntitySchemaQuery, делать esqResult.GetSelectQuery(_connection), с него получать текст запроса и в нем уже подменять значения с помощью регулярки. но это выглядит костылем, который не хотелось бы оставлять.

 

спасибо!

 

 

 

 

Нравится

4 комментария

добавлю, что когда пробовал делать через new Select(connection), то такой проблемы не было, но тогда надо вручную управлять локализацией и делать джоины, чего не хотелось бы делать.

так же регулярное выражение может не работать для других типов БД. в данный момент используется PostgreSql

Добрый день,

 

К сожалению пока возможности управления этим количеством символов нет. Поэтому нужно подумать над альтернативными решениями обхода проблемы - возможно увеличить лимит с 10 записей на большее количество, чтобминимизировать риск ошибки, можно попробовать еще модифицировать фильтр. Возможно поможет добавление сортировки по Id - это сделает порядок записей всегда одинаковым, или просто использовать встроенную постраничность.

а можете подсказать как работать с встроенным механизмом постраничной обработки? пример или ссылка на статью. спасибо!

Показать все комментарии

Здравствуйте. 

Хотел бы уточнить, как реализовать автозаполнение параметров моего созданного UserTask, например парамерами самого БП

Нравится

1 комментарий

Здравствуйте,

 

Да данный момент такой возможнсти в базовой конфигурации приложения нет, но я зарегистрирую ваше пожелание для ответственной R&D команды. 

Показать все комментарии

Добрый день!

Подскажите как можно подвязать текстовое поле из лид формы фейсбука к колонке в срм. Чтоб при написании текста этот  текст попадал в определенную строку в срм?

Нравится

2 комментария

Добрый день!

 

Спасибо за ваш вопрос. Краткое описание лидогенерации Facebook есть в следующей статье:

https://academy.terrasoft.ua/docs/user/instrumenty_crm/lendingi_i_web_f…

 

Собственно маппинг колонок происходит на стороне Facebook. Автозаполнятся будут только строго определенные коробочные колонки:

 

Email

MobilePhone

Address

CityStr

RegionStr

CountryStr

Zip

LeadName + Contact

FullJobTitle

BusinesPhone

Email

Account

 

Вся остальная информация будет помещена в Notes *.

 

Я надеюсь мой ответ был полезен для вас.

 

С Уважением,

Денис

Спасибо за ответ

Показать все комментарии

Я столкнулся с проблемой, что подпроцесс, который я вызываю из основного бизнес процесса не запускает вообще никаких элементов.

Дело было так: У меня есть основной процесс, который вызывает веб сервис и обрабатывает ответ. Я настроил метод для веб сервиса. Настроил обработку ответа с помощью инструмента "Быстрая настройка" и передаю параметры, которые получил от веб сервиса подпроцессу.



Изначально всё работало как часы. Подпроцесс запускался и обрабатывал параметры.

Далее мне потребовалось добавить ещё один  параметр в "Обработку ответа" для метода веб сервиса. Изначально я руками создал параметр и настроил его. Пусть к элементу (JSONpath) я указал верный!

Далее я перешёл в основной процесс и увидел, что только что добавленный параметр я не могу выбрать, потому что блок веб сервиса его попросту не имеет. Я пошёл обратно к веб сервису, удалил параметр и создал его уже с помощью инструмента "Быстрая настройка". Перешёл в бп и наконец-то увидел нужный мне параметр.

Далее я поставил этот параметр в подпроцесс и тут всё сломалось.

После сохранения и запуска подпроцесс запускается, ему ставиться состояние "Выполняется", но даже первый элемент процесса не запускается. В журнале процессов у него нет данных об элементов процесса, чего не может быть впринцыпе.

Я подумал что всё дело в "Задании-сценари" в моём подпроцессе. Я удалил его и сохранил. По непонятной мне причине подпроцесс начал работать.

Но возникла другая проблема с вызовом веб сервиса.

Мой веб сервис обращается к телеграм api с помощью метода "getUpdates", параметры ответа которого я обрабатываю в моём веб сервисе.

Если раньше ответ от нажатия на inline нопки в телеграмме я получал и всё работало прекрасно, то теперь, возникала ошибка:

Terrasoft.Common.UnsupportedTypeException: Тип "System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" не поддерживается

Изображение удалено.

С этого момента я попробовал поменять работу с передаваемыми параметрами, но ничего не помогло. После я заново переопределил параметры ответа для параметра в веб сервисе, но после этого подпроцесс вновь перестал запускаться. Я пробовал с 0 создавать мои 2 процесса, но это не помогло. Что делать в такой ситуаци?

Нравится

1 комментарий

Добрый день.



Данная ошибка может быть связана с некорректной обработкой массива параметров в ответе (Result) веб сервиса.

Попробуйте убрать масив параметров из ответа  веб сервиса.

Показать все комментарии

Добрый день.

 

раньше создавал обычные пакеты для проектов, в которых после создания обьекта генерировались соответствующие обьекты в проекте Terrasoft.Configuration (Autogenerated\Src папка). Таким образом можно было удобно их использовать в своих целях при написании c# кода.

Изображение удалено.

все что начинается на QSoft... это были наши обьекты.

Но в новом проекте я использовал опцию  Компилировать в отдельную библиотеку и теперь нету этих исходников. как я понял вы рекомендуете использовать эту опцию и создавать все проекты как библиотеки.

Поддерживается ли генерация исходников в таком случае? Где их найти? может необходимо теперь делать ссылку на библиотеку?

 

Спасибо

Прикрепленные файлы

Нравится

3 комментария

Добрый день!

Если не ошибаюсь, вы говорите о механизме пакета-сборки.

В таком случае файлы пакета будут находиться по пути \Terrasoft.WebApp\Terrasoft.Configuration\Pkg\[Имя пакета].

В любом случае используйте поиск по папкам находясь внутри Terrasoft.Configuration на необходимые вам исходники дабы точно определить их местоположение.

добрый вечер!

да, я о механизме пакета-сборки.

спасибо за ответ и извините за столь долгий ответ с моей стороны. я веду разработку в .NET Core версии приложения на Linux (докер). 

после компиляции приложения в получаю примерно пакет, который прикрепил к запросу (содержимое частично удалено, но основная структура сохранена). в нем нету .cs файлов с исходным кодом для обьектов. и это сильно мешает. иногда файлы создаются, но они пустые (0 байт размер).

в чем может быть причина? доступ к папке вероятно есть, так как остальные файлы создают отлично и без проблем. может это быть связано с конфигурацией проекта/пропущенной настройкой? 

можете прислать пример пакета (из среды разработки, не запакованного) чтоб посмотреть как оно должно выглядеть в идеальном случае?

Показать все комментарии

Добрый день, интересует следующий вопрос - надо ли добавлять файлы из Files/obj/ папки в пакет? И стоит ли их коммитить в Git?

Как я понимаю это всего лишь временные файлы для компиляции проекта, и в пакет их включать не обязательно. Главное, чтоб там были библиотеки. 

 

Изображение удалено.

Спасибо!

Нравится

1 комментарий
Лучший ответ

Добрый день.



Все верно, файлы из Files/obj/ временные и их можно удалить.

Добрый день.



Все верно, файлы из Files/obj/ временные и их можно удалить.

Показать все комментарии

Добрый день коллеги!

 

Ищу информацию о системной настройке "Order of first/last names".

Несколько вопросов:

1. Данная настройка отражает:

  • как будет заполнено значение в колонке полного имени (Name) контакта,
  • как будут заполнены колонки Surname, GivenName и MiddleName,
  • действительны оба пункта?

2. При изменении настройки на паттерн, не включающий Middle Name, каким будет значение Name для записей, у которых не пустое значение в колонке Middle name?

 

Заранее благодарю за ответ!

Нравится

1 комментарий

Добрый день!

 

Да. Оба пункта действительны. При изменении Last name или Middle name или First name, изменяется поле Full name и наоборот. 

 

Логика разделения ФИО контакта на Surname GivenName MiddleName настривается системной настройкой ContactFieldConverter, выбором необходимого с# конвертера, которые находятся в таблице ShowNamesBy.

 

В базовой функциональности существуют два конвертера First name [Middle name] Last name и Last name, First name [Middle name]. 

Оба шаблона включают Middle Name.

 

Указанные поля заполняются автоматически на основании данных, которые внесены в поле ФИО, с учетом разделителей. В качестве разделителя система распознает пробел и . , ;



Для заполнения по умолчанию используется конструкция "Фамилия, Имя и Отчество" и разделяется на "Имя" и "Фамилия" согласно формата ФИО (Фамилия Имя Отчество).

 

Правило, которое установлено в системной настройке ContactFieldConverter будет распространятся на новые или редактируемые контакты.

 

 

Показать все комментарии

Доброго дня. 

Турбує відсутність дистрибутивів версії 8.0.5 та 8.0.6. 



По перше там наявне новий функціонал якій потрібен при розробці.



По друге як буде проходити оновлення наших клієнтів, які запускаються зараз на 8.0.4? Одразу на реліз який буде доступний для завантаження  с пропуском 8.0.5 та 8.0.6 (якщо буде доступний тільки 8.0.7, наприклад)?



 

Нравится

1 комментарий

Доброго дня,



Дистрибутиви для версії 8.0.5 доступні, отримати ви їх можете звернувшись до підтримки.



Оновлення повинно бути покрокове (не відрізняється від оновлень до 8.0.4.)

Показать все комментарии