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

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

Нравится

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

Здравствуйте, Павел.

Скажите, пожалуйста, можно ли где-нибудь как-нибудь получить/посмотреть запись Вашего вебинара по моделированию бизнес-процессов bpm`online, который проходил в начале Апреля 2015 года?

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

Ссылка на вебинар: https://www.youtube.com/watch?v=5AFzvluHyqE&feature=youtu.be

Здравствуйте, Павел.

Можно ли в 7.4 штатными средствами настроить бизнес процесс, который контролирует, что у при закрытии задачи по клиенту есть хотя бы открытая задача, и если нет, то открывает окно создания следующей задачи?

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

Евгений, здравствуйте!
Конечно это можно сделать.
Общая схема процесса будет такой:

Piccy.info - Free Image Hosting

Для этого нужно:
1. После завершения вашей задачи нужно поставить элемент "Чтение данных", в котором посчитать количество задач в состоянии "Новая" и "В работе" по клиенту из завершаемой задачи (замапиться).
Piccy.info - Free Image Hosting

2. После чтения использовать Исключающее ИЛИ, которое в зависимости от количества посчитанных незавершенных задач отправит процесс по той или иной ветке.
Ниже скрин условного потока который проверяет количество таких задач.
Piccy.info - Free Image Hosting

Если будут вопросы по деталям реализации - обращайтесь!

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

Владимир, добрый день.
Вашу задачу можно решить следующим образом.

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

Piccy.info - Free Image Hosting

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

Piccy.info - Free Image Hosting

Элемент "Считать общее количество продуктов в счете"
Piccy.info - Free Image Hosting

Элемент "Считать количество продуктов, по которым получена оплата" (Считаем по количество выполненных задач. Если дополнить Продукт в счете специальным атрибутом, то можно будет устанавливать его значение в процессе, и по нему считать отработанные продукты)
Piccy.info - Free Image Hosting

Элемент "Расчет количества неоплаченных продуктов" (для удобства используем параметр процесса, в который записываем результат)
Piccy.info - Free Image Hosting

Условный поток "Остались не зарезервированные продукты"
Piccy.info - Free Image Hosting

Это ориентировочное решение без привязки к контексту процессов, которые Вы настраиваете. Оно может подойти не в чистом виде, а как пример. Решение абсолютно рабочее, все скриншоты сделаны с опубликованных и работающих процессов.

Если будут дополнительные вопросы, обращайтесь.

В стандартной версии конфигурации есть процесс, который запускается по сигналу (при создании письма), как мне предотвратить его запуск?
версия 7.5.0.745 ITIL service

"Лариса" написал:

В стандартной версии конфигурации есть процесс, который запускается по сигналу (при создании письма), как мне предотвратить его запуск?

версия 7.5.0.745 ITIL service

_________________________________________________________________

У каждого уважающего себя программиста должен быть инстинкт сохранения

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

Павел, спасибо за предыдущий совет.
Возник еще один вопрос.

В БП одним из шагов является подпроцесс согласования счёта. Затем идут шаги по коммуниикации с клиентом и ожиданием оплаты. После оплаты уже стоят задачи заказа у поставщика.

До момента заказа клиент может попросить изменить какие-то позиции в счете на любом из шагов процесса. И в таком случае надо процесс переправить снова на согласование и снова по стандартному пути.

Не хочется в каждую задачу вставлять проверку необходимости согласования (это изменение одного поля в счёте).
Скорее всего, это ожидание промежуточного сигнала изменения записи.

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

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

Добавьте в подпроцесс параллельную ветку содержащую промежуточный обрабатывающий сигнал, который будет ожидать удаление записи в объект "Продукт в счете" с фильтром Id = Счет (параметр счета, наверное, есть).
Добавьте в подпроцесс параллельную ветку содержащую промежуточный обрабатывающий сигнал, который будет ожидать изменение состояния счета на "Исправлен" (после изменяем состояние счета на "Согласование")

Создайте параметр с типом "Логическое".

По окончанию основной ветки подпроцесса задайте ему значение true, если сработал один из сигналов сигнал - false.

В основном процессе проверяйте значение этого параметра. Если параметр false, то возвращаемся на согласование. Если параметр true - идем дальше.

Основной процесс готов. Теперь доведем его до ума:
1) Необходимо создать новое состояние счета "Исправлен" (оно техническое)
2) Необходимо создать бизнес процесс (технический):

  • Стартовый сигнал по добавлению записи в объект "Продукты в счете"
  • Чтение данных продукта в счете
  • Чтение данных счета
  • Условные потоки: если состояние счета != "Согласование", тогда конец процесса, иначе идем дальше

  • Изменение данных счета. Меняем значение полю "Состояние" на "Исправлен"
  • Конец процесса

Доброго дня!
Что то совсем я запутался с этими БП. Может просто новичок.
Вот к примеру мне надо сделать такой БП:

1. Чтением данных Вы будете получать значение числового поля.
2. В процессе в элементе "Задание-сценарий" Вам необходимо реализовать логику перевода числового поля в параметр с типом "Строка"
3 .Элементом "Изменить данные" Вы будете записывать полученный параметр в запись, которая инициировала процесс.
4. Конец процесс

Как мне запустить процесс на создание или обновление записи? Как мне передать в БП запись которая инициировала процесс?

Здравствуйте, Виктор!

Для решения Вашей задачи в системе предусмотрен начальный элемент "Сигнал". В настройках этого сигнала Вы можете определить событие, по которому будет запускаться процесс. Данный элемент до версии 7.7.0 содержит единственный параметр - Id записи, по которой был запущен экземпляр процесса. Начиная с версии 7.7.0 данный элемент дополнительно содержит UId схемы, по которой сработал сигнал.

Здравствуйте!
А не подкажите ли как мне можна настроить старт БП после того как закончился звонок. Тоисть как только менеджер заканчивает разговор с клиентом, запускается БП, который знает параметры только-что завершенного звонка?
Спасибо.

Вот как я начал реализовывать эту задачу.
Вот начало процесса

где старт после изменения записи

Но почему-то создаются сразу две задачи.

Как сделать чтобы была только одна?

Здравствуйте!
Использую продукт BpmOnline Sales team Версия 7.5.0.1007.
Наблюдается следующая проблема. В БП сигнал от объекта не срабатывает, если установлен флаг "Должна быть изменена колонка" и выбрана колонка типа справочник.
Если убрать флаг, то сигнал работает. Значение в колонке точно меняется.
Подскажите, в чем может быть проблема?

"Пащенко Александр Сергеевич" написал:

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

Использую продукт BpmOnline Sales team Версия 7.5.0.1007.

Наблюдается следующая проблема. В БП сигнал от объекта не срабатывает, если установлен флаг "Должна быть изменена колонка" и выбрана колонка типа справочник.

Если убрать флаг, то сигнал работает. Значение в колонке точно меняется.

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


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

Видно что меняется EndDate. (дата завершения). Но когда добавляю ее в условия Должна быть изменена любая колонка из списка то тогда процесс вообще не запускается. Bpmonline sales 7.7 commerce

"Пащенко Александр Сергеевич" написал:Здравствуйте!
Использую продукт BpmOnline Sales team Версия 7.5.0.1007.
Наблюдается следующая проблема. В БП сигнал от объекта не срабатывает, если установлен флаг "Должна быть изменена колонка" и выбрана колонка типа справочник.
Если убрать флаг, то сигнал работает. Значение в колонке точно меняется.
Подскажите, в чем может быть проблема?

Добрый день,
Не удалось воспроизвести описанное поведение в 7.5.0.1007. Следует убедится, что все условия стартового сигнала выполняются.
Стоит учитывать, когда выполняется проверка условий объекта – запись должна полностью соответствовать этим условиям. Например,
Сигнал стартует по изменению контакта + [Пол] = Женский.
Для того, чтобы БП запустился – контакт должен быть создан ранее, колонка [Пол] должна быть заполнена. После того как пользователь изменит значение поля на “Женский” и сохранит запись – сработает стартовый сигнал.

Здравствуйте Олег. А на мои вопросы вы не можете помочь ответить? Номера 13,14,16.
Кратко:
1) При старте (описаном выше и на фото) создаются два процесса.
2) Если поставить в условии запуска "После добавления записи" - процесс не запускается.
3) Если поставить условие "После изменения записи" и прописать например изменение Duration - не запускается.

Вопрос таков: как мне можна запустить БП после того как закончился звонок?

1) Я так понимаю, что процесс запускается дважды из-за логики работы телефонии Asterisk. Там при звонке система Asterisk создает два звонка. Один менеджеру, а второй клиенту. Поэтому и дважды процес стартонул.
Вопрос запуска БП после того как закончился звонок через Asterisk еще в силе.

Добрый день!
Звонок можно считать завершенным, когда у него есть время завершения. Т.е. для того, чтобы привязать начало процесса к завершению звонка в стартовом сигнале следует указать:
- объект – Звонок
- при изменении записи
- должна быть изменена колонка “Дата завершения”

Если по прежнему будут возникать трудности, обратитесь в техническую поддержку Terrasoft.

В тому то и проблема что не работает. Уже обратился. Спасибо.

"Зарицкий Олег Васильевич" написал:Звонок можно считать завершенным, когда у него есть время завершения

Вопрос еще в том, как ставится это время завершения. Если простым Update, то стартового сигнала не будет, так как обновление записи происходит на уровне базы данных, а не приложения.

Подскажите, как подступиться к такой задаче: есть БП, который стартует при получении нового email сообщения от определенного отправителя. Из созданной активности извлекается тело письма. А вот дальше необходимо распарсить текст тела письма, извлечь интересующую информацию (предполагаю, скорее всего - с помощью регулярных выражений), сохранить в переменные, и передать дальше по БП (конкретно в моем случае - создать лид на основе извлеченных данных).

И, еще вопрос - в 7.7 кроме отказа от Silverlight, что еще поменялось в дизайнере БП? Где-то можно прочитать об изменениях?

Добрый день!

1. Можно создать параметр процесса с типом строка. Передавать тело письма в параметр. После чего в элементе Задание-сценарий создать массив строк в который парсить тело письма с нужным разделителем.

2. Информацию по работе с БП в 7.7 можно найти в документации на академии. Из важных моментов - в 7.7 изменилась работа с параметрами БП в Задание-сценарий.
Пример для 7.7:
var parameter1 = Get("Parameter1");
Set("Parameter2", parameter1.ToString());
var parameter2 = Get("Parameter2");
Экземпляр типа UserConnection можно получить аналогично параметрам:
var userConnection = Get(“UserConnection”);

Добрый день.
Возникла проблема после обновления с 7.6 до 7.7. Не открываются БП, созданный в 7.6 (крутиться постоянно загрузка).
Подскажите, может кто сталкивался с подобной проблемой?

Здравствуйте, опишите более подробно, не открывается процесс в конфигурации?
Дебажились?
Что пишет в консоли браузера?

"Мотков Илья" написал:Здравствуйте, опишите более подробно, не открывается процесс в конфигурации?

"Мотков Илья" написал:Здравствуйте, опишите более подробно, не открывается процесс в конфигурации?

Да. При открытии Дизайнера БП бесконечно крутиться "Загрузка". Эта проблема наблюдается в Chrome и Yandex Browser. В Mozilla БП загрузился

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

Поправка, в Mozilla открылись БП, которые открывались и в других браузерах.
В консоли Chrome следующая ошибка:

Очистка кэша, компиляция к желаемому результату не привели

Игорь,
Напишите в техническую поддержку. По скриншоту трудно решить задачу.

"Зарицкий Олег Васильевич" написал:Напишите в техническую поддержку. По скриншоту трудно решить задачу.

Создали обращение 0312524.
Но вопрос остаётся открытым. Два БП в одном пакете. Один открывается в дизайнере процессов без проблем, второй - зависает на бесконечной загрузке и в консоли выдаёт ошибку

oshibka_pri_otkrytii_bp
Указанная ошибка появляется при загрузке нескольких БП из разных пакетов.
Может необходима дополнительная настройка Web.config сайта

"Коновалов Игорь" написал:

Поправка, в Mozilla открылись БП, которые открывались и в других браузерах.

В консоли Chrome следующая ошибка:

Очистка кэша, компиляция к желаемому результату не привели


Нашёл причину возникновения данной ошибки. Она возникает после добавления в элемент Задача или Звонок кода в поле "После сохранения записи". Данная ошибка характерна для версии 7.7.
Как решить эту проблему?
UPD: Перенёс тему сюда http://www.community.terrasoft.ru/forum/topic/16407

Павел, подскажите, пожалуйста, если мы создаём запись в разделе через C# entity - бизнес процесс будет запускаться по сигналу "Создание записи" ?

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

"Иван Тюряков" написал:Павел, подскажите, пожалуйста, если мы создаём запись в разделе через C# entity - бизнес процесс будет запускаться по сигналу "Создание записи" ?

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

Если вы используете EntitySchemaQuery, тогда событийные БП выполняются.

Добрый день.
Запускаю на клиенте Бизнес-процесс

 ProcessModuleUtilities.runProcess(sysProcessName, processArgs, callback, this);

В callback приходят аргументы options, success, response, но в ответе сервера не передаются параметры Бизнес-процесса.

Как вернуть в callback параметры Бизнес-процесса?

Версия BPMonline 7.8.1

Добрый день коллеги!
Обшарил академию, форум, эту тему и не нашел точного ответа на свои вопросы.
А именно:
1)Имеется возможность стандартными средствами БП запускать процесс автоматически при срабатывании события ? Например - дня рождения. Искал, ничего подобного не нашел.
2)Как привязать запуск процесса к определенному времени? Пятница, 16:00 например. Знаю, что можно запускать процесс через определенный интервал времени в секундах, имеется ли другой способ?

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

Подобного в стандартном функционале не встречал.
Jobы реализуются скриптом.
Может в будущем что-то подобное появится.

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

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/tutorial-lesson-06.html
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.

Добрый вечер коллеги!

По поводу вопроса, который меня интересовал выше (#37). Я нашел решение и хотел бы узнать у разработчиков - правильно ли реализовано решение и какие последствия оно может нести. Решение протестировано, работает. Процесс запускается 1 раз, при каждом повторе по формуле значение параметра увеличивается на 1, и когда оно дойдет до 100 (через 100 дней) процесс завершится.

Версия 7.8. если появятся вопросы - постараюсь оперативно ответить.

Александр, а чем плохо мое решение (#39)?

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

Александр, а чем плохо мое решение (#39)?


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

Добрый день, уважаемые коллеги!

Стоит задача смоделировать такой процесс, который:
1. посылает уведомление на e-mail ответственному при добавлении в активность (задачу) напоминания
2. отменяет предыдущее напоминание либо при изменении даты напоминания, либо при удалении напоминания

Построил процесс (см. вложенный файл)...
При изменении даты напоминания, процесс отрабатывает как нужно, при удалении напоминания, система выдает ошибку: "Элемент удалить невозможно, так как он используется в процессе"

Помогите пжл. решить данную проблему.

Версия BPMonline 7.8

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

"Пащенко Александр Сергеевич" написал:Здравствуйте, подскажите, пожалуйста, каким образом в элементе "Задание-сценарий" можно получить значение элементов БП без использования параметров процесса?
Т.е. необходимо получать значения полей из элементов чтение данных, автогенерируемые страницы без промежуточного использования параметров процесса.

Присоединяюсь к вопросу

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

Пример работы описан по ссылке:
http://www.community.terrasoft.ru/forum/topic/16359#comment-62314

Работать напрямую с элементом "Чтение данных" не получится.

Добрый день.

Подскажите, пожалуйста, как правильно реализовать.
У меня есть БП с автогенерируемой страницей, в которой три checkbox и две кнопки. У меня настроен запуск задачи при условии что "чек" стоит, в конце у меня стоит "Логическое И" ждет выполнения задач. Нужна проверка, что если задачи нет, ее не ждать. Сейчас же у меня процесс подвисает на этом этапе, задачи нет а он ждет её выполнения.

версия 7.9.1 Service enterprise

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

Вместо элемента "И" используйте элемент "Чтение данных" в режиме подсчета количества записей по объекту "Активность" с фильтром, в котором, будет через "Или" перечислено сравнение Id с Id активностей, создаваемых по процессу, а также состояние активности - конечное.

После элемента "Чтение данных" используйте условный поток. Если количество записей, подсчитанных элементом "Чтение данных" == 0, тогда процесс идет дальше.

Других потоков из элемента "Чтение данных" не будет.

Добрый день.

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

Коллеги, доброго дня! Прошу подсказать с наиболее корректной реализации следующей задачи.

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

Вопрос такой, в каком месте (на каком "событии") наиболее правильно реализовать вызов кода, в котором я буду работать с AppScheduler-ом, в котором будет настраиваться регулярный запуск БП? Есть ли в системе такое событие, которое можно штатным образом "послушать" и запустить свой "Исходный код" где я буду работать с AppScheduler-ом, либо запустить БП (в котором я реализую свой сценарий для работы с AppScheduler-ом)?

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