Обсуждение вопросов по использованию бизнес-процессов в bpm'online

В этой теме будем обсуждать вопросы, касающиеся моделирования бизнес-процессов в bpm'online.
Для начала не будем ограничивать тематики, пишите любые вопросы, которые как-то связаны с процессами. Если будет необходимо, создадим отдельную тематическую ветку!
Обещаю отвечать на все вопросы. Прошу отнестись с пониманием если ответы будут не online, бывают срочные задачи :)

Нравится

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

Здравствуйте, Андрей!

Вы можете создать процесс, который будет записывать свое выполнение в quartz.
Похожие темы обсуждались в других ветках, например:
http://www.community.terrasoft.ru/forum/topic/15055

"Демьяник Алексей" написал:

Здравствуйте, Андрей!

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

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

http://www.community.terrasoft.ru/forum/topic/15055


Алексей, доброго времени!

С технической точки зрения, о том как работать с quartz, у меня вопросов нет, прежде чем задавать вопрос я основательно поизучал темы в community. Вопрос в другом. Вот вы ссылаетесь на ветку http://www.community.terrasoft.ru/forum/topic/13945 где в ответе #17 дается совет "Необходимо запустить Ваш процесс (может быть запущен вручную или по событию). БП доходит до элемента “Задание сценарий”. Добавляется job в планировщик. В результате процесс будет запущен в следующий раз согласно указанного времени в параметре startOffset."

И такие советы встречаются часто. Вопрос звучал по другому - есть ли в системе "событие" (напр. создание некоторого глобального объекта) о запуске первого сеанса пользователя, на добавление которого можно подписать свой БП, который в свою очередь будет работать с quartz? Иначе говоря, мне нужно событие, говорящее о факте "холодного старта" сайта, или аналогичное по смыслу, чтобы не изобретать своих велосипедов.

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

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

"Демьяник Алексей" написал:

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

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

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

Коллеги, добрый день!
Потребовалось в ходе бизнес-процесса с помощью элемента "Добавление данных" создать запись в одном объекте ("Контактная информация") на основании другого ("Обращение"). При этом у объекта "Контактные информация" есть параметр "ФИО", тип которого - строка, формируемый на основании "Контактное лицо" из "Обращение", у которого тип – справочник [Контакты] (см. скрин 1).
При прямом сопоставлении параметров при компиляции выдается ошибка "преобразование типа "System.Guid" в "string" невозможно" (см. скрин 2).
Что можете посоветовать, как проще всего будет передать данные из одного объекта в другой в таком случае? В качестве временного решения я использовала элемент "чтение данных" для чтения записи "Контактное лицо", однако если таких случаев сопоставления разных типов данных несколько, то простой процесс создания объекта превращается во что-то очень загроможденное и не очевидное. Такого бы не хотелось.
Заранее спасибо за ответ.

Екатерина, здравствуйте!

Для решения задачи следует использовать дополнительный элемент [Чтение данных].
Есть [Обращение. Контактное лицо] – справочное поле.
Есть [Контактная информация. ФИО] – текстовое поле.

Необходимо:
1) Читать данные в контакте, где Id = Читать обращение. Контактное лицо.
2) При создании записи в Контактная информация указать: ФИО = Пункт 1. ФИО

Олег, спасибо за ответ!
Я так и поступила, только выявилось, что если поле "Контактное лицо" не заполнено, то элемент [Чтение данных] завершается с ошибкой. Поэтому пришлось добавить дополнительное условие [Обращение. Контактное лицо]!=Guid.Empty
Итого, чтобы заполнить одно поле требуется 4 элемента бизнес-процесса.
Если же таких полей 2, то количество элементов увеличивается в арифметической прогрессии.
Я хотела узнать, нет ли каких-то альтернативных способов решения задачи.
Например, существует ли какой-нибудь метод, позволяющий в одной строке вернуть значение колонки элемента. Что-то вроде Метода [Обращение. Контактное лицо].Name, который бы вернул текстовое значение колонки Name.

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

Такого метода нет.
В решении вашей задачи участвуют 3 разных объекта/таблицы - [Обращение/Контактная информация/Контакт].
Справочное поле “Контактное лицо” в обращении не хранит значения всех полей указанного контакта. В этом поле содержится уникальный идентификатор, который ссылается на другой объект Контакт.

"Демьяник Алексей" написал:

Александр, здравствуйте!

1) Событие наступления дня рождения - это не событие для системы. По этой причине никакие сигналы не генерируются.

2) Такая возможность есть. Но реализовать ее можно только скриптом. Пример скрипта:

var userConnection = UserConnection.AppConnection.SystemUserConnection;

string schedulerJobGroupName = "Process10";

string jobProcessName = "Process10";

string schedulerJobName = "Process10";

int startOffset = 1;

AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);

var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, userConnection.Workspace.Name, userConnection.CurrentUser.Name, isSystemUser : true);

//Запускать процесс в 20:01 каждый день

//http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/tuto…

var trigger = TriggerBuilder.Create()

               .WithIdentity(schedulerJobName + "Trigger", schedulerJobGroupName)

               .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(20, 1))

               .Build();

AppScheduler.Instance.ScheduleJob(job, trigger);

return true;

В using нужно добавить Quartz, Quartz.Impl.Triggers, Terrasoft.Core.Scheduler. В результате процесс Process10 будет запускаться ежедневно в 20:01.

А можно для совсем "глупых"(начинающих)...
Как и куда вставлять скрипт..? Прям пошагово...

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

1. Открыть дизайнер процессов.
2. Добавить на диаграмму элемент [Задание-сценарий]. В элементе добавить код.
3. В свойствах процесса есть вкладка “Методы”. Тут в Usings добавить классы: Quartz, Quartz.Impl.Triggers, Terrasoft.Core.Scheduler

Здравствуйте.
Пытаюсь запустить БП из web-сервиса.

var manager = UserConnection.ProcessSchemaManager;
var processSchema = manager.GetInstanceByName("UsrStartCallProcess");
var process = processSchema.CreateProcess(UserConnection);		

На вызове метода CreateProcess получаю exception

System.NotImplementedException was unhandled
  HResult=-2147467263
  Message=The method or operation is not implemented.
  Source=Terrasoft.Core
  StackTrace:
       at Terrasoft.Core.Process.ProcessSchema.CreateProcess(UserConnection userConnection)
  InnerException: 

Процесс интерпретируемый.

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

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

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

Здравствуйте! Оставлю здесь, вдруг кому-то пригодится.

1. Пример запуска компилируемого БП с передачей параметра:

var processSchema = userConnection.ProcessSchemaManager.GetInstanceByName("UsrSomeProcessName");
var moduleProcess = processSchema.CreateProcess(userConnection);
moduleProcess.SetPropertyValue("ContactId", contactId);
moduleProcess.Execute(userConnection);

2. Пример запуска интерпретируемого БП с передачей параметра:

IProcessExecutor processExecutor =  userConnection.ProcessEngine.ProcessExecutor;
processExecutor.Execute("UsrSomeProcessName ", new Dictionary<string, string> {
                    { "ContactId", contactId.ToString() }
});

Передача параметров:
1. Использование словаря обязательно.
2. Параметры с другим типом необходимо сериализовать в строку. Например:

DateTime someDate = Get<DateTime>("dateTimeParam");
IDictionary<string, string> parameters = new Dictionary<string, string>();
parameters["ContactNum"] = Get<string>("ContactNum");
parameters["starttime"] = someDate.ToString();
IProcessExecutor processExecutor =  userConnection.ProcessEngine.ProcessExecutor;
processExecutor.Execute("UsrSomeProcessName ", parameters);

Коллеги, доброго вечера!

Для установки параметров запуска бизнес-процессов по расписанию через пользовательский интерфейс, мы выпустили соответствующее дополнение к bpm'online. Надеюсь, будет полезным:)

Подробнее здесь https://marketplace.terrasoft.ru/app/extended-business-process-scheduler

Доброго дня!

При запуске экземпляра процесса (класс Terrasoft.Core.Process.Process), обнаружил, что его метод для установки значения параметра процесса теперь protected и internal, до версии 7.10 так не было?

Вот ссылка на пост с примером вызова этого метода http://www.community.terrasoft.ru/forum/topic/24716

Есть ли альтернатива?

Уточнение, в теме http://www.community.terrasoft.ru/forum/topic/24716 обсуждался метод SetPropertyValue, я теперь его вообще не могу найти - ни в классе Process, ни в родительских.

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