Здраствуйте, есть бп который создает уведомление и показывает попап окно (из приложения Popup Window) для каждого участника активности. Раньше параметр To whom should the window be shown? - для которого нужно показать попап выбирала [#Системная переменная.Контакт текущего пользователя#]. Но сейчас попап не показывается пользователю, в случае если бп был создан не им. Пробовала варианты просто выбрать юзера(Объект администрирования-Контакт-Ид) и из справочника контактов. Может кто-то сталкивался с такой же проблемой?

Нравится

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

Анастасия, добрый день!
"Но сейчас попап не показывается пользователю, в случае если бп был создан не им." - если бизнес-процесс был запущен другим пользователем, то уведомление должен получить тот пользователь, кто инициировал этот экземпляр процесса.

Также очень частая проблема — это Adblock и прочие расширения браузера. 
Рекомендую проверить еще поведение в режиме инкогнито, если там все работает, значит нужно проверять настройки браузера (возможно там что-то блокирует окно) или установленные расширения в браузере.

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

Всем добрый день.
Возник вопрос. Уже который раз наблюдаю такую картину в БП, он запускается, состояние "выполняется", но в журнале процессов, у данного процесса в "Элементы процесса" ничего нет. Данный процесс запускается по триггеру получения данных при интеграции. И он так может висеть до бесконечности. В чём может быть проблема или ошибка?

БП состоит из двух основных шагов - чтение данных, отправка Email.

Нравится

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

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

Николай Ходаковский,

Денис Колесник,

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

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

Всем доброго дня! 

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

Нравится

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

Попробуйте может через CompositeObject получить коллекцию
Get<ICompositeObjectList<ICompositeObject>>("Ваш_параметр.ResultCompositeObjectList")

Литвинко Павел пишет:

Попробуйте может через CompositeObject получить коллекцию
Get<ICompositeObjectList<ICompositeObject>>("Ваш_параметр.ResultCompositeObjectList")

Здравствуйте,  получилось немного не так:

 

var list = Get<ICompositeObjectList<ICompositeObject>>("Units");
foreach (ICompositeObject item in list) {
    
    if (item.TryGetValue<string>("Name", out string value)) {
        Set<string>("ProcessSchemaParameter1", value);
   }

}

Спасибо за помощь!)

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

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

Нравится

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

Добрый день, Андрей!

Не совсем понял ваш вопрос, но начиная с версии 7.17.4 можно вызвать веб-сервис с помощью следующего кода:
 

using Terrasoft.Configuration.ServiceSchema;
 
//...
 
try {
    // Создаем экземпляр ServiceSchemaClient
    var client = ClassFactory.Get&lt;IServiceSchemaClient&gt;();
    // Настраиваем параметры вызова
    var parameters = new Dictionary&lt;string, object&gt;() {
        {"id", 1}, {"name", userName}
    };
    // Получаем результат выполнения
    var serviceResponse = client.Execute(UserConnection, serviceName, methodName, parameters);
} catch (Exception e) {
    // Обрабатываем ошибки
}

Также вам может помочь обсуждение тут.

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

Здравствуйте,
мы питаемся в Бизнес процесс добавить подпроцесс, и когда передает только значение Лида, все ок,
но в подпроцессе у нас есть параметр, текстовый, и на него вылетает ошибка:

"Значение не может быть неопределенным. Имя параметра: format"
Пробовали и заполнять этот параметр значением по умолчанию в подпроцессе, и передавать значение с процесса, 
если он присутствует всегда одна и та же ошибка.

Версия: 7.15.4.3055

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

Нравится

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

Уточните, у Вас параметр назвается format или Name? Или это два разных параметра?

Здравствуйте, параметр называется - Name, с названием format у меня ничего нет.

Уверены, что дело именно в этом подпроцессе? Если запускать его из другого процесса, тоже такая ошибка?

Если переименовать Name как-то иначе, то тоже?

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

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

А в логи системы (стандартно в текстовом файле Error.log на веб-сервере) при этом что-то падает? В консоли браузера нет дополнительной информации в момент ошибки?

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

Добрый день, коллеги. Хочу с вами поделиться моими идеями по поводу улучшений функциональности БП.

Привожу список того, что бы мне хотелось иметь в БП.

 

1. Отсутствие возможности комментирования. Необходимость возникает в средних и сложных БП с N > 20, где N - количество элементов в нем. Возникают недостатки: читабельности (неоднозначность в действиях); группировки (чтобы визульно можно было разделить элементы БП по группам).

 

2. Свойство "Последовательное чтение" и "Выборочное чтение" (по умолчанию) в служебной команде "Чтение записи". Позволяет не зависеть от команды изменения записи в рекурсии. Последовательность автоматически формировать по выбранной пользователем сортировке и Id (на данный момент, при дубликатах). Идея в том, что при последовательном чтении скрытно добавляется дополнительный фильтр пользовательской сортировки (больше или равно) и в последнюю очередь Id (больше).

 

3. Отсутствие простого завершающего события. Так как в БП может быть 2 и более потока, то необходимо для каждого из них возвращать свое завершающее событие. На данный момент реализована схема: либо все либо ничего. Т. е. результатом БП является единственный останов. Это мешает рассматривать БП как полноценную систему, умеющую хорошо работать с потоками - отсутствует возможность уничтожить отдельный поток. Например: есть N подпроцессов, которые нужно выполнить либо последовательно либо параллельно и отчитаться по каждому из них. На данный момент в Creatio требуется задействовать внешний объект, файл и т. п., для выполнения этого задания придется отдельно вводить понятия "экземпляр главного процесса" и "результат выполнения". В https://community.terrasoft.ru/questions/id-suschnosti-bp рекомендуют привязывать БП к экземпляру объекта, что не соответствует нашей задаче.

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

Илья, спасибо за пожелания.

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

По второму и третьему завёл.

Хотя, не уверен, всё ли правильно поняли, лучше было бы показать на скриншоте, что вы имели в виду. Особенно для второго предложения проясните, пожалуйста.

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

Илья, можете ещё раз более подробно описать по второму пункту, что Вам требуется?

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

Создал веб-сервис опроса погоды. В выходных данных есть поля дат. Эти даты надо сконвертировать из int в DateTime.

Не могу понять, как обратиться к параметрам веб-сервиса из задания-сценария?

Set("dt", GetDt(Get&lt;int&gt;("WebService1.dt")));
Set("sys_sunrise", GetDt(Get&lt;int&gt;("WebService1.sys_sunrise")));
Set("sys_sunset", GetDt(Get&lt;int&gt;("WebService1.sys_sunset")));
return true;

 

Нравится

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

Можно точнее? Что значит из int в DateTime?

public DateTime GetDt(int unixDate)
{
    var dt = new DateTime(1970,1,1,0,0,0,0, DateTimeKind.Utc);
    dt = dt.AddSeconds(unixDate).ToLocalTime();
    return dt;
}

Стандартный метод преобразования unix long в DateTime.

Дамиан, Вы можете создать в БП параметры нужного типа и связать их со входящими параметрами веб-сервиса. Затем из скрипта работать уже с ними, используя Get.

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

Можете привести код или ссылки?

Дамиан, как работать с параметрами при помощи Get, есть тут.

Я имею в виду, что в дизайнере БП привязать параметр процесса к исходящему параметру веб-сервиса, а затем работать уже с ним.

 

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

Добрый день столкнулся с проблемой , что при выполнении бп выдало ошибку 
Terrasoft.Common.NullOrEmptyException: Невозможно получить экземпляр схемы типа "Terrasoft.Core.Process.PldLeadManagementIdentification2PaladinPackage3Schema"
   в Terrasoft.Core.SchemaManager`1.InitializeSchema(ISchemaManagerItem schemaManagerItem, Assembly assembly)
   в Terrasoft.Core.SchemaManagerItem`1.get_Instance()
   в Terrasoft.Core.Process.BaseProcessElementFactory.CreateSubProcessInstance(ProcessSchemaSubProcess schemaSubProcess)
   в Terrasoft.Core.Process.ProcessElementFactory.CreateFlowElementInstance(ProcessSchemaBaseElement schemaElement)
   в Terrasoft.Core.Process.ProcessComponentSet.CreateFlowElementInstance(String schemaElementName, Boolean isReExecution)
   в Terrasoft.Core.Process.ProcessComponentSet.ForceGetFlowElementInstance(String schemaFlowElementName)
   в Terrasoft.Core.Process.ProcessComponentSet.Execute(String elementName, FlowContext flowContext)
   в Terrasoft.Core.Process.TaskService.Terrasoft.Core.Process.IHandler<Terrasoft.Core.Process.FlowMessages.ExecuteProcessElementRequest>.Receive(ExecuteProcessElementRequest message)
   в Terrasoft.Core.Process.MediatorBuilder.Mediator.Send[TMessage](TMessage message)
   в Terrasoft.Core.Process.FlowVisitor.ProcessQueueItem(FlowVisitorQueueItem queueItem)
   в Terrasoft.Core.Process.FlowVisitor.Dequeue()
   в Terrasoft.Core.Process.FlowService.<>c__DisplayClass32_0.<Terrasoft.Core.Process.IHandler<Terrasoft.Core.Process.FlowMessages.ExecuteProcessElementResponse>.Receive>b__0()
   в Terrasoft.Core.Process.FlowService.InvokeWithHandleCancelRequestedEvent(FlowVisitor visitor, Action action)
   в Terrasoft.Core.Process.FlowService.Terrasoft.Core.Process.IHandler<Terrasoft.Core.Process.FlowMessages.ExecuteProcessElementResponse>.Receive(ExecuteProcessElementResponse message)
   в Terrasoft.Core.Process.MediatorBuilder.Mediator.Send[TMessage](TMessage message)
   в Terrasoft.Core.Process.TaskService.ProcessFlowElementExecuted(Object sender, ProcessActivityAfterEventArgs args)
   в Terrasoft.Core.Process.ProcessFlowElement.OnExecuted(ProcessActivityAfterEventArgs e)
   в Terrasoft.Core.Process.ProcessUserTask.OnExecuted(ProcessActivityAfterEventArgs e)
   в Terrasoft.Core.Process.ProcessActivity.CompleteExecuting(Object[] parameters)
   в Terrasoft.Core.Process.Configuration.ActivityUserTask.CompleteExecuting(Object[] parameters)
   в Terrasoft.Core.Process.ProcessActivity.Complete(Object[] parameters)
   в Terrasoft.Core.Process.ProcessEngineImpl.CompleteExecutingInternal(Guid elementUId, IReadOnlyDictionary`2 parameterValues, ContinueProcessCommand command, Boolean removeMessageFromStore, Object[] parameters)

После обращение тп выяснилось, что в бп устарел метод GetParentApplicationUrl(HttpRequest) 
И посоветовали просто переименовать его в GetParentApplicationUrl(Terrasoft.Web.Http.Abstractions.HttpRequest)
Но проблема осталась, может кто сталкивался с такой проблемой ? 

Нравится

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

Максим, этот процесс Вы сами создавали? Из каких элементов он состоит, на каком вылетает ошибка? Процесс и его подпроцессы в отдельных схемах перед этим сохранили и публиковали?

 

Функция GetParentApplicationUrl, скорее всего, у Вас использована для получения адреса сайта.

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

 

А по поводу устарения, это относится к совместимости доработок с сайтами на Net Core, там нужно всё делать через классы из Terrasoft.Web.Http.Abstractions. Возможно, в новых версиях будет только так и работать.

В ходе доступа к сайту поддержки выяснилось, что причина, по которой происходит ошибка при публикации процесса, заключается в вызове метода GetParentApplicationUrl, а именно в параметре, который нужно передавать в метод.
Передавать нужно экземпляр класса HttpRequest из namespace Terrasoft.Web.Http.Abstractions, который можно определить так: HttpContext.Current.Request, например:

HttpRequest request = HttpContext.Current.Request;
applicationUrl = Terrasoft.Web.Common.WebUtilities.GetParentApplicationUrl(request);

При этом нужно добавить namespace "Terrasoft.Web.Http.Abstractions" и убрать "System.Web".

Вторая ошибка связана с LeadId  и появляется по причине использования неизвестного параметра. Получить параметр в методе можно так:

Get&lt;Guid&gt;("Код параметра")

 

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

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

На всякий случай ещё раз сохраните и опубликуйте.

Откройте исходный код схемы и найдите строки с этими номерами.

Может, не везде в коде исправили.

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

Добрый день!

Помогите пожалуйста разобраться - как правильно составить БП - чтобы автоматически отправлялись письма при поступлении денег с истекающим сроком действия банковской карты?

Пытаюсь создать условный поток с вычиткой данных о сроке действия банк.карты Контакта (Год) и (Месяц):

 

[#Читать Банк.карты.Первый элемент результирующей коллекции.Срок окончания(год)#]<="20"&&[#Читать Банк.карты.Первый элемент результирующей коллекции.Срок окончания(месяц)#]<=Месяц([#Читать Банк.карты.Первый элемент результирующей коллекции.Срок окончания(месяц)#])

 

*Желательно указать в условном потоке:

- что срок окончания(год)=Текущий год,

- что срок окончания(месяц)=Текущий месяц

Нравится

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

Екатерина, у Вас два числовых поля с номером месяца и года? Или они текстовые? В каком виде хранятся?

 

В дизайнере формул на вкладке «Системные переменные» есть «Текущее значение даты», а на вкладке «Функции» — «Месяц()». То есть можете написать «Месяц([#Системная переменная.Текущее значение даты#])». Для года функции не нашёл, можно написать числом в системную настройку, считывать оттуда и раз в год менять.

 

Или же сделать блок-скрипт, где проверять C#-кодом и результат писать в параметр логического типа. Код не привожу, он зависит от формата входных данных.

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

Коллеги, что происходит с РФС на 7.15.2?
В конфигурации допустил ошибку в элементе скрипт.
При публикации появляется лог компиляции и страница дизайнера БП слетает в конфигурацию и появляется ошибка "Сборка конфигурации не инициализирована".

После нельзя зайти в схему БП, компиляция и генерация исходного кода не происходит.
 

Нравится

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

Обходное решение:

Экспортируйте из конфигурации ваш БП, удалите его откомпилируйте конфигурацию.

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

Обходное решение:

Экспортируйте из конфигурации ваш БП, удалите его откомпилируйте конфигурацию.

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

Григорий Чех,

Спасибо, так и сделал.

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