Добрый день!

Подскажите, пожалуйста, можно ли каким-то образом включать и отключать бизнес-правила на странице через механизм Feature Toggle?

Попробовал вот так, не работает:

businessRules: /**SCHEMA_BUSINESS_RULES*/{
"vsDirectCalc": {
              	//Прямой расчет: Показывать элемент на странице
				"b9d8b16c-d477-45cc-acc6-5b0954b609cd": {
					"uId": "b9d8b16c-d477-45cc-acc6-5b0954b609cd",
					"enabled": {"bindTo": "Terrasoft.Features.getIsEnabled('vsTMA1418')"},	
					"removed": false,
					"ruleType": 0,
					"property": 0,
					"logical": 0,
					"conditions": [
						{
							"comparisonType": 3,
							"leftExpression": {
								"type": 1,
								"attribute": "ScTmaMechanic"
... и т. д.

 

Нравится

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

Добрый день.

 

Подобный подход не сработает, свойство enabled принимает только true или false, байндинги для него не работают (только если вопрос касается бизнес-правил).

 

К сожалению, на текущий момент, подобный подход через механизм Feature Toggle отсутствует.

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

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

Нравится

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

Логи по обновлению хранятся в той директории, в которую вы распаковали архивы обновления. Файл с логами называется  UpdateExtendedLog, если я Вас правильно понял.

Логи обновления пишутся в папку Log для каждой версии из \InstallPackages. Например, \InstallPackages\7_17_3\Log.

 

Что касается ошибки со скриншота - такая ошибка может возникнуть в случае, если в конфигурации нет пакета CustomerCenterSofkey. Проверьте компиляцию после обновления, если она завершается без ошибок, то ошибку обновления можно игнорировать.

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

Всем привет. Столкнулся с такой проблемой:

Очень долго выполнялась бизнес-логика, когда пользователь CRM в странице редактирования Обращения пытается подгрузить шаблон письма. 
Запустил в SQL Profiler трасировку, выполнил действие, нашел.
Заметил, что Duration гораздо больше CPU + Reads, и нет никакого плана выполнения для такого запроса.
Сталкивался ли кто с подобной ситуацией? Какие меры предпринимали?
Я так понимаю, что рано или поздно данная ситуация возникает у всех, если развивать СРМ с куча интеграций и т.п., получения обращений в систему с 5 почт, подключением сотрудников в количестве от 30-48.
Ресурсов у сервера БД достаточно, 2 виртуалки, по 2 ТБ памяти, по 98 ГБ ОЗУ, процессор 2.4Ггц X 12 ядер.

Нравится

9 комментариев

Саид, как видно со скриншота, это запрос на вставку в таблицу активностей записи с названием "Диагностировать и решить инцидент #...".

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

Или дело в какой-то глобальной блокировке на таблицу, наложенную одновременнно работающей другой логикой.

Не пробовали аналогичный запрос (естественно, с другим Id) запускать из Management Studio вручную, так тоже тормозит?

Зверев Александр,

Да, это на добавление активности "Диагностировать  и решить инцидент ..." запись в трасировке, я забыл в описании указать. В следующий раз попробую через Management Studio выполнить запрос. Вот не знаю почему, но после добавления 2 индексов в SysCaseRight действия такие, как Отправка письма в обращении и т.д., переход между состояниями в кейсе страницы редактирования, стали работать быстрее заметно.

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

Зверев Александр,

Да, он ускорился.

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

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

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

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

Нравится

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

Попробуйте пока скачать по временной альтернативной ссылке, сообщим ответственной команде что существует проблема со скачиванием сервиса. https://creatiocom-my.sharepoint.com/:u:/g/personal/t_ponomarov_creatio_com/EVQFFMoVSZRJjfmRAY6guVgBCSrQb1hhWSkPj2KLH4n5uA?e=Uyep6o

Попробуйте пока скачать по временной альтернативной ссылке, сообщим ответственной команде что существует проблема со скачиванием сервиса. https://creatiocom-my.sharepoint.com/:u:/g/personal/t_ponomarov_creatio_com/EVQFFMoVSZRJjfmRAY6guVgBCSrQb1hhWSkPj2KLH4n5uA?e=Uyep6o

t.ponomarov, Спасибо!

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

Добрый день!

 

Хотим настроить в Маркетинговой Кампании автоматическую отправку письма-напоминания при отсутствии регистрации на мероприятие. Задача достаточно стандартная, но реализовать ее через элемент БП "Лендинг" не выходит.

Если указываем результат "Не заполнена веб-форма" с задержкой перед выполнением, то по истечении указанного срока переход к следующему элементу не происходит. По другой ветке (при успешной регистрации) отрабатывает все штатно.

 

Возможно кто-то сталкивался. Что делаем не правильно?

 

Нравится

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

Максим, сравните настройки своей кампании со стандартной настроенной «Конференция "Дни CRM"». Там тоже лендинг и три ветви для возможных его результатов. Из отличий от Вашего скриншота, там указывается точное время и условие фильтрации, выбран объект «Контакт». Если у Вас настроить аналогично, то тоже не срабатывает?

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

Как реализовать синхронизацию товаров с маркетплейса Prom.ua в Creatio?

Ручной импорт из Excel - не решение, поскольку цены могут меняться несколько раз на день.

Какой либо загрузчик фида или импорт с Гугл таблиц не нашел.

Интеграция с Промом предлагает лишь импорт клиентов и заказов.

Кто сталкивался с такой задачей?

Спасибо.

Нравится

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

Дмитрий, для интеграции в том числе и с  Prom.ua есть дополнение ApiX-Drive connector, которое взаимодействует с сервисом ApiX Drive. Но там товаров действительно нет.

На сайте Prom.ua тоже не нашёл информации о документации разработчика, возможно, её предоставляют по запросу.

В зависимости от характера API, подход может быть противоположным: либо из БП в Creatio вызывать веб-сервис Prom, передавая и получая параметры. Либо на стороне Prom (или промежуточном сервере, взаимодействующем с обоими системами) подключаться к сайту Creatio по OData и добавлять или менять значения в нужном объекте. Наконец, извне можно запускать БП в Creatio, передавая в него нужные значения, а уже процесс будет изменять данные.

 

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

Добрый день!

 

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

Если вставить просто макрос со ссылкой на многострочное поле, то шаблон не находит <br> и \n в тексте и считает, что переноса строк нет, хотя они и есть.

Возможно есть вариант заменять переносы строк на \n в рамках бизнес-процесса?

Нравится

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

   Отправка письма

 var emailSendService = new EmailSendService(context.UserConnection);
    
    var activityId = Guid.NewGuid();
    var insertActivity = new Terrasoft.Configuration.Activity(context.UserConnection);
    insertActivity.Id = activityId;
    insertActivity.SetDefColumnValues();
    insertActivity.Title = "Тема письма";
    insertActivity.Recepient = email;
    insertActivity.Sender = senderEmail;
    insertActivity.PriorityId = new Guid("D625A9FC-7EE6-DF11-971B-001D60E938C6");
    insertActivity.IsHtmlBody = true;
    insertActivity.Body = "<div>Тело письма</div>";
    insertActivity.TypeId = new Guid("E2831DEC-CFC0-DF11-B00F-001D60E938C6");
    insertActivity.MessageTypeId = new Guid("7F6D3F94-F36B-1410-068C-20CF30B39373");
    insertActivity.Save();
    
    emailSendService.Send(activityId.ToString());

Нормально манипулировать текстом письма можно только используя C#. Делает ScriptTask в нем отправку письма на C# и собираете любое тело письма которое вам нужно.

Полозюков Евгений Петрович,

Спасибо! Подскажите, где можно подробнее прочитать про отправку письма по скрипту?

   Отправка письма

 var emailSendService = new EmailSendService(context.UserConnection);
    
    var activityId = Guid.NewGuid();
    var insertActivity = new Terrasoft.Configuration.Activity(context.UserConnection);
    insertActivity.Id = activityId;
    insertActivity.SetDefColumnValues();
    insertActivity.Title = "Тема письма";
    insertActivity.Recepient = email;
    insertActivity.Sender = senderEmail;
    insertActivity.PriorityId = new Guid("D625A9FC-7EE6-DF11-971B-001D60E938C6");
    insertActivity.IsHtmlBody = true;
    insertActivity.Body = "<div>Тело письма</div>";
    insertActivity.TypeId = new Guid("E2831DEC-CFC0-DF11-B00F-001D60E938C6");
    insertActivity.MessageTypeId = new Guid("7F6D3F94-F36B-1410-068C-20CF30B39373");
    insertActivity.Save();
    
    emailSendService.Send(activityId.ToString());

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

Каким образом можно реализовать условные операторы в модуле Планирование? Например, если Факт отрицательное значение, то % выполнения считать как 0.

Нравится

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

Евгений, сейчас такой возможности нет.

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

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

Доброго времен суток!

 

Подскажите, 

Есть на marketplace (https://marketplace.terrasoft.ru/template/vydelenie-cvetom-zapisey-v-ra…)

приложение для выделения цветом записей в заказах и 

обращениях. Как, используя это приложение как template, добиться того же и в счетах?

Нравится

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

Привет. 

При запуске процесса из элемента "Задание сценарий" следующим образом: 

var manager    = UserConnection.ProcessSchemaManager;
var flowEngine = new FlowEngine(UserConnection);
var processSchema = manager.GetInstanceByName("test process");

Dictionary<string, object> parameter = new Dictionary<string, object>();

TestCompositeObjectList list = new TestCompositeObjectList();
list.Add(new A { ColName= "test1" });
list.Add(new A { ColName= "test2" });

parameter.Add("TestCollection", list);
parameter.Add("Name", "Test");

flowEngine.RunProcess(processSchema, parameter);

return true;

 

Сам класс TestCompositeObjectList был создан по этому примеру.

 

При запуске процесса ловим: 

System.InvalidCastException: Unable to cast object of type 'Terrasoft.Common.CompositeObjectList`1[Terrasoft.Common.CompositeObject]' to type 'System.Collections.Generic.List`1[System.String]'.

В документации не нашел примера заполнение и этот способ, что выше, тоже как ясно - не работает. 
TestCollection - и есть коллекция записей с полем стринг.
Name - просто ещё один параметр.

Дайте пожалуйста пример как сделать это.

 

 

Нравится

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

Разобрался. 
Ничего не нужно придумывать, а просто брать готовое и правильно использовать, прошу добавить инфу в документацию, что бы не приходилось как и мне тыкаться в стену. 

Код вызова: 
 

var manager	= UserConnection.ProcessSchemaManager;
var flowEngine = new FlowEngine(UserConnection);
var processSchema = manager.GetInstanceByName("ProcessName");
 
Dictionary<string, object> parameter = new Dictionary<string, object>();
 
CompositeObjectList<CompositeObject> objList = new CompositeObjectList<CompositeObject>();
 
objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName",  "SubParamValue1"}}));
objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName",  "SubParamValue2"}}));
// ....
// Первый коллекция записей - второе примитивный 
parameter.Add("CollectionName", objList);
parameter.Add("PrimaryParam", "Test");
 
flowEngine.RunProcess(processSchema, parameter);

 

Получение в скрипте: 
 

CompositeObjectList<CompositeObject> collection = Get<CompositeObjectList<CompositeObject>>("CollectionName");

 

if (ProcessSchemaManager.GetCanUseFlowEngine(userConnection, processSchema)) {
                    var flowEngine = new FlowEngine(userConnection);
                    Dictionary<string, string> parameter = new Dictionary<string, string>();
                    parameter.Add("CaseRecordId", CaseRecordId.ToString());
                    flowEngine.RunProcess(processSchema, parameter);
                } else {
                    var moduleProcess = processSchema.CreateProcess(userConnection);
                    if (processSchema.Parameters.ExistsByName("CaseRecordId")) {
                        moduleProcess.SetPropertyValue("CaseRecordId", CaseRecordId);
                    }
                    moduleProcess.Execute(userConnection);
                }

Полозюков Евгений Петрович,

У вас в примере обычный параметр, а не лист. С обычными то все понятно. Меня интересует передача именно параметра типа коллекция записей.

Возможно ли это вообщ? Потому что тут последний коммент говорит что "неа".

Разобрался. 
Ничего не нужно придумывать, а просто брать готовое и правильно использовать, прошу добавить инфу в документацию, что бы не приходилось как и мне тыкаться в стену. 

Код вызова: 
 

var manager	= UserConnection.ProcessSchemaManager;
var flowEngine = new FlowEngine(UserConnection);
var processSchema = manager.GetInstanceByName("ProcessName");
 
Dictionary<string, object> parameter = new Dictionary<string, object>();
 
CompositeObjectList<CompositeObject> objList = new CompositeObjectList<CompositeObject>();
 
objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName",  "SubParamValue1"}}));
objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName",  "SubParamValue2"}}));
// ....
// Первый коллекция записей - второе примитивный 
parameter.Add("CollectionName", objList);
parameter.Add("PrimaryParam", "Test");
 
flowEngine.RunProcess(processSchema, parameter);

 

Получение в скрипте: 
 

CompositeObjectList<CompositeObject> collection = Get<CompositeObjectList<CompositeObject>>("CollectionName");

 

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