В этой теме будем обсуждать вопросы, касающиеся моделирования бизнес-процессов в 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-ом)?

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

Добрый день!

Как добавить "зеленую" кнопку c именем "Начать работу с лидом" в разделе "Лиды" к уже существующим:
1

И самое главное, как сделать так, чтобы при клике на нее запустился определенный бизнес процесс, скажем "LeadProcess" ?

С системой работаю еще мало, поэтому если можно больше подробностей. Буду очень благодарен.

Спасибо!

Нравится

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

Запуск БП по кнопке:
http://www.community.terrasoft.ru/forum/topic/10554#comment-47944

Добавление кнопки в активную строку (на примере кнопки позвонить водителю в кастомном разделе):

define("SfEvacuatorSection", ["SfEvacuatorSectionResources", "GridUtilitiesV2"],
function(resources) {
	return {
		entitySchemaName: "SfEvacuator",
		contextHelpId: "1001",
		diff: /**SCHEMA_DIFF*/[
			{ // добавление самой кнопки
				"operation": "insert",
				"name": "DataGridActiveRowCallDriverAction",
				"parentName": "DataGrid",
				"propertyName": "activeRowActions",
				"values": {
					"className": "Terrasoft.Button",
					"style": Terrasoft.controls.ButtonEnums.style.BLUE,
					"caption": resources.localizableStrings.CallDriverRowButtonCaption,
					"tag": "call"
				}
			}
		]/**SCHEMA_DIFF*/,
		messages: {},
		methods: {
			onActiveRowAction: function(buttonTag, primaryColumnValue) {
				switch (buttonTag) {
					// замещение базового метода для правильной обработки нажатия по тэгу
					case "call":
						this.callDriver(primaryColumnValue);
						break;
					default:
						this.callParent(arguments);
						break;
				}
			},
			callDriver: function(recordId) {
				//функция-обработчик
			}
		}
	};
});

Попробую подробнее описать задачу.

В разделе "Лиды" в реестре есть зеленые кнопки "Квалифицировть" и т.д. наряду с "Открыть" "Копировать" и т.д.

Мне нужно чтобы при нажатии этих кнопок запускались мои собственные процессы. Например при клике на кнопку "Квалифицировать" мне нужно запустить свой процесс "SellsLeadProcessContact".

Вот код, который у меня получился:

Кнопка:

				{
					"operation": "insert",
					"name": "DataGridActiveRowQualificationProcessAction",
					"parentName": "DataGrid",
					"propertyName": "activeRowActions",
					"values": {
						"className": "Terrasoft.Button",
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"caption": {"bindTo": "getQualificationProcessButtonCaption"},
						"tag": "continueQualify",
						"iconAlign": Terrasoft.controls.ButtonEnums.iconAlign.RIGHT,
						"imageConfig": resources.localizableImages.QualificationProcessActionImage,
						"classes": {"textClass": "ts-grid-image-action"},
						"visible": {"bindTo": "getIsQualificationStageActive"}
					}
				}

Обработка нажатия:

				onActiveRowAction: function(buttonTag) {
					if (buttonTag === "continueQualify") {
						this.continueQualify();
					} else {
						this.callParent(arguments);
					}
				},

Функция запуска процессов в зависимости от статуса лида

				continueQualify: function(id) {
					var qualifyStatusId = this.getQualifyStatus(id);
					var qualifyStatus = LeadConfigurationConst.LeadConst.QualifyStatus;
					var LeadId = this.get(id);
					var processLeadContact = {
						sysProcessName: "SellsLeadProcessContact",
						parameters: {
							LeadId: LeadId
						}
					};
					var processLeadInformation = {
						sysProcessName: "SellsLeadProcessInformation",
						parameters: {
							LeadId: LeadId
						}
					};
					var processLeadMeet = {
						sysProcessName: "SellsLeadProcessMeet",
						parameters: {
							LeadId: LeadId
						}
					};
					if (qualifyStatusId === qualifyStatus.Qualification) {
						this.runProcess(processLeadContact.sysProcessName, processLeadContact.parameters, this);
					}
					if (qualifyStatusId === qualifyStatus.Distribution) {
						this.runProcess(processLeadInformation.sysProcessName, processLeadInformation.parameters, this);
					}
					if (qualifyStatusId === qualifyStatus.TransferForSale) {
						this.runProcess(processLeadMeet.sysProcessName, processLeadMeet.parameters, this);
					}
					return "";
				},

В бизнес процессе создал параметр:

222

В итоге процессы не запускаются.

В консоли при клике на кнопку выдает 3 строки ошибки:

Ошибка 1
POST https://sells.bpmonline.com/0/DataService/json/SyncReply/SelectQuery 500 (FormatException)

Ошибка 2
Uncaught Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

Ошибка 3
user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
file: https://sells.bpmonline.com/0/core/e8b5149b83cf4b4da75b8dc1338afb83/com…
line: 600
message: Uncaught Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

Весь код схемы в приложении

Помогите пожалуйста с проблемой. Уже 3 дня прошло с момента ее возникновения.

Спасибо!

Добрый день!

Насколько я понял, речь идет о странице раздела.

В этом случае получение идентификатора записи с помощью функции this.get(id) не сработает:

var LeadId = this.get(id); //неправильно

Ошибка ниже как раз и говорит о том, что this.get(id), вероятнее всего, возвращает undefined:

message: Uncaught Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

Получайте Id следующим образом:

var LeadId = this.get("ActiveRow");

Все, получилось. Но ошибка была не только в этом.

Строка запуска процесса была написана так:

this.runProcess(processArgs.sysProcessName, processArgs.parameters, this);

А когда заменил спереди "this" на "ProcessModuleUtilities", то процесс запустился.

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

Спасибо большое за помощь!

Вопрос снят

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

Здравствуйте!
Есть модуль, написанный на C#. Как из него можно запустить страницу и дождаться завершения БП, чтоб использовать его параметры в дальнейших расчетах.

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

Нравится

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

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

Добрый день!
Александр, а почему бы весь процесс рассчетов не включить в БП? Как работать с параметрами страницы, открытой по БП можно посмотреть в процессе квалификации лида (LeadManagementQualification).

Андрей, я уже так и сделал, спасибо)

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

Как с бизнес-процесса отправить предварительно созданный e-mail шаблон. При попытке через действие отправить e-mail ничего не происходило.
Нашла пост в котором было описание изменение скрипта действия https://community.terrasoft.ua/blogs/9899, но это не решило проблему.
Файлы БП прилагаются.

Нравится

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

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

Используйте элемент скрипт, а в нем функцию:

var AccountSendResult = SendEmailByTemplate(Template, {
						RecordID: AccountDataset.Values('ID'), 
						Address: AccountEmailAddress, AutoSend: true, Silent: true});

где

var Template = GetTemplateData(TemplateID, true);

Ниже по ссылке еще один пример:

http://www.community.terrasoft.ua/forum/topic/8702#comment-47804

Давайте сначала.
У меня есть шаблон сообщения, который мне нужно отправить, например Прайс-лист.
Я добавляю действие отравить e-mail и заполняю карточку действия: тему, выбираю шаблон.
У меня есть макрос обращения в письме (с карточки контактов),e-mail адрес берется со средств связи контрагента. Какой набор данных для макросов нужно выбрать : контрагент или контакт. Это первый вопрос.
На второй вкладке я добавила параметр AccountID, так как по нему и происходит фильтрация.
Вопрос номер два, заполнив карточку отправки по e-mail и не внося каких либо изменений в скрипт не бп не будет работать?
На счёт скрипта от Дмитрия.
Объясните,пожалуйста, какие данные я должна вставить\заменить в этом скрипте.

Здравствуйте, Наталья!

Имеется ввиду, что вместо элемента "Отправка Email" Вы можете использовать элемент скрипт и отправлять письма через код.

Вам необходимо:

1) Указать TemplateID - это идентификатор шаблона сообщения.
Его Вы можете узнать, сделав запрос к таблице tbl_MailTemplate или выполнив запрос sq_MailTemplate из конфигурации Terrasoft.
2) AccountEmailAddress - почтовый адрес.
3) RecordID - идентификатор контрагента.
Его Вы можете узнать, сделав запрос к таблице tbl_Account или выполнив запрос sq_Account из конфигурации Terrasoft. Либо же получив любым другим образом из кода.

По поводу элемента "Отправка Email" сообщу Вам ответ в ближайшее время.

Мне нужно чтобы ID контрагента и его e-mail передавался с параметров диаграммы.

Здравствуйте, Наталья.

Дело в том, что в элементе БП "Отправить Email" в качестве получателя можно указать лишь Контакта, но не контрагента (на вкладке элемента "Контакты" можно выбрать Контакта из справочника либо передать параметр с идентификатором Контакта).
Реализация обусловлена бизнес-логикой (контактными лицами являются сотрудники контрагента, но не сам контрагент).

Потому, действительно, Вам необходимо использовать, как говорит Дмитрий, элемент Скрипт для отправки Email непосредственно контрагенту.

Пример обработки события OnExecute элемента Скрипт:

function Item3OnExecute(ScriptItem, IsComplete) {
	TemplateID = '{47DF8DC2-71E8-4EF6-A7CA-AFF599F8B172}';
	//задаем идентификатор шаблона (можно посмотреть в sq_MailTemplate)
	var Template = GetTemplateData(TemplateID, true);
	var AccountSendResult = SendEmailByTemplate(Template, {
    RecordID: '{E308B781-3C5B-4ECB-89EF-5C1ED4DA488E}', 
    Address: 'support@terrasoft.ru', AutoSend: true, Silent: true}); 
} 

Только в качестве RecordID и Address подставляйте свои параметры.

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

Колегги,

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

подскажите как реализовать подобную логику но уже в версии 7.4.x

в версии 7.2 можно было сделать следующим образом:
https://community.terrasoft.ru/forum/topic/10904#comment-49670

Нравится

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

Владимир, здравствуйте!
В базовом функционале 7.3 и выше не заложена возможность расширять автогенерируемую страницу.
Как вариант решения задачи можно доработать AutoGeneratedPageV2Utilities так, чтобы модуль поддерживал бизнес-правила, но подробных рекомендаций дать не могу.
Вообще для отрисовки автогенерируемой страницы используются модули ProcessCardModuleV2, AutoGeneratedPageV2 и упомянутый выше AutoGeneratedPageV2Utilities.

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

Спасибо, за объяснение.
Очень надеюсь что в последующих версиях разработчики bpm'online дадут нам возможность расширять автогенерируемую страницу.

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

Добрые день,
Еще один вопрос по БП, как должны срабатывать напоминания для активностей, используя элемент "Задача" создаю Активность, отмечаю "Напомнить за",
1

Активность создается но без напоминая, приходится создавать дополнительный элемент и вручную изменять значения полей "Напоминание ответственному" и "Дата напоминания ответственному"
2

Версия Team 7.4.0.2628

Нравится

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

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

Добрый день, Олег.

При создании активности у Вас указано "Стартовать через 0 минут", а напоминание должно отработать за 1 минуту до начала. Я думаю из-за этого у Вас и не появляется напоминание. Попробуйте поставить значение "Стартовать через 2 минуты" должно все отработать корректно.

Добрый день, Тарас,
Спасибо за совет, сейчас попробую

Здравствуйте, Олег!

Похожий вопрос обсуждался на Community:

- http://www.community.terrasoft.ru/forum/topic/10496
- http://www.community.terrasoft.ru/forum/topic/10839
- http://www.community.terrasoft.ru/forum/topic/11325

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

Результат тот же, активность создается, но деталь "Напоминания" пуста, также активность не попадает в меню справа "Уведомления".
Дмитрий, темы что вы привели, скажем немного не то что мне нужно, там рассматриваются всякие надстройки вроде "Напоминание на активность через веб сервис" или "Запуск БП на срабатывание напоминания".
Мне же нужно просто стандартный функционал чтобы заработал, а он видимо сбоит, напоминания не ставятся, уведомления справа не появляются, причем если создавать "Звонок" с такими же параметрами, стартовать через 0, напоминать через 1, все отрабатывает верно, проставляется напоминание и появляется уведомление в правом меню "Уведомления"

Версия Team 7.4.0.2628

Здравствуйте, Олег!

Проверил на последней релизной сборке 7.4.1.589 (Team, ENU).

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

http://i64.fastpic.ru/big/2015/0201/d9/fc2f92129cd84579be765fda968b55d9.png

http://i67.fastpic.ru/big/2015/0201/cf/e0076aca5f2c061cb50b7aee1a50f3cf.png

Напишите, пожалуйста, заявку на support@terrasoft.ru для предоставления Вам сборки.

Добрый день, Андрей,
С помощью саппорта обнаружили проблему:
"Проблема кроется в отсутствии подключения к веб-сокетам (не телефонийным).
В консоли должна быть строка вида:
ws-connection opened for url:ws://web-site:2011/0/Nui/ViewModule.aspx.ashx"
После включения проблема исчезла. Спасибо

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

Существует задача создать автоматический бизнес-процесс для создания прайс-листа контрагента, который запускается после создания контрагента.
В моем представлении это БП на одно действие (создание –прайса), а условие можно задать в настройках автоматического запуска.
Я использую действие чтение /запись данных. Здесь возникает первый вопрос – какая разница между «чтение /запись» и «открытие окна»? И в том и в другом случае ми можем сохранить информацию.
Основная проблема – перенос ID контрагента и создание ID новой записи (прайса). Как я догадываюсь, здесь нужно использовать параметры действия и здесь я уже ничего не понимаю.
Описание в руководстве администратора очень скудное, а на форуме не нашла понятного мне пошагового объяснения.

Нравится

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

Наталия,

действие [Открытие окна] предназначено для открытия любого окна системы,
например, карточки редактирования определенной записи. Через данный элемент можно создать новую запись, изменить существующую либо открыть окно справочника для выбора записи.

действие [Чтение/запись данных] используется в случае, если необходимо записать
какую-либо информацию в базу данных (без отображения карточки редактирования) или считать информацию из базы данных.

Что касается

"Фащук Наталия Тарасовна" написал:Основная проблема – перенос ID контрагента и создание ID новой записи (прайса).

пример есть здесь

Спасибо. Есть ли решение с помощью MS SQL?

Не понимаю я логики этих действий.
Объясните пожалуйста наглядно на моем примере.
Цель: создать БП с автоматическим запуском. После создания контрагента создание прайс-листа к нему (с деталей).
Буду очень признательна.

Наталия, пример реализации Вашей задачи:

1. Создать БП, состоящий из 3-х элементов:
Начало - элемент [Открытие окна] - Завершение

/system/files/21-01-2015_16-17-25.png

2. Создать в БП строковый параметр, который будет содержать идентификатор создаваемого контрагента:

/system/files/21-01-2015_16-22-46.png

Заполнение параметра реализовать в теле функции обработки события OnStart начального элемента.
Код:

function Item1OnStart(StartItem) {
    var ParentDiagram = GetDiagramByItem(StartItem);
    var RecordID = WFGetParamValue(ParentDiagram, 'AutoID');
}

3. В моем примере создание прайс-листа для контрагента выполняется посредством элемента [Открытие окна]. Свойства окна:

/system/files/21-01-2015_16-28-04.png

Код окна, которое будет открываться на добавление прайс-листа - wnd_AccountPriceEdit

4. Настроить автоматический запуск БП (через Файл - Настройки - Автоматический запуск процессов).

Во вложении прилагаю БП, который я построила для примера.

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

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

P.S. Или подскажите как в БП передать список выбранных записей, как объявить параметр в БП чтобы туда передавать массив, запускать просто передавая туда выбранные записи не получается

var selectedRows = this.get("SelectedRows");

var processName = "NewServiceBuffer";
var parametersQueryString = '?SelectedRow='+selectedRows+'&ForContact=1';

Terrasoft.AjaxProvider.request({
    url: Terrasoft.workspaceBaseUrl + "/ServiceModel/ProcessEngineService.svc/" +
    processName + "/Execute" + parametersQueryString,
    method: "POST",
    jsonData: {}
});

Эту тему прочитал, понимаю как передавать в параметры каждый элемент, но как динамично создавать параметры, записей может быть разное количество

Нравится

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

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

С уважением,
Группа компаний Terrasoft

Здравствуйте, Олег!
Думаю, самым простым вариантом в данном случае будет разделить идентификаторы записей символом ";" и передать все как одну строку. А в БП прочитать с помощью String.Split().
Другой вариант - запускать отдельно БП для каждой записи, а заголовок активности также передавать как параметр. Во все экземпляры БП одинаковый. То есть тут нужно будет ввод заголовка из БП вынести в клиентскую часть.

Добрый день,
Андрей спасибо большое, действительно же можно просто строку передавать, подскажите еще если возможно как запустить БП кодом из C#, код из клиентской части явно не подойдет

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

var process = UserConnection.ProcessEngine.GetProcessByUId(processUId, true); //первый параметр - UId процесса
if (process != null) {
		process.SetPropertyValue("PropertyName", propertyVlue); //установка параметров процесса
		process.Execute(UserConnection);
}

Андрей, спасибо, только где глянуть Uid процесса?
В дизайнере процессов ProcessSchemaDesigner.aspx?id=61ad2e78-0dc8-4aaf-8fff-14e4f4cc66f0 это он?
Пробовал запустить используя код (также пробовал запускать используя Uid из таблицы SysSchema - тоже значение но в верхнем регистре)

var process = UserConnection.ProcessEngine.GetProcessByUId("61ad2e78-0dc8-4aaf-8fff-14e4f4cc66f0", true);
if (process != null) {
	process.Execute(UserConnection);
}

в дебаггере вылетает ошибка

var process = UserConnection.ProcessEngine.GetProcessByUId("61ad2e78-0dc8-4aaf-8fff-14e4f4cc66f0", true);
An exception of type 'Terrasoft.Common.ItemNotFoundException' occurred in Terrasoft.Core.dll but was not handled in user code
Additional information: Процесс с идентификатором "61ad2e78-0dc8-4aaf-8fff-14e4f4cc66f0" не найден

хотя в исходных файлах Uid именно такой

protected override void InitializeProperties() {
	base.InitializeProperties();
	Name = "TestProcess";
	UId = new Guid("61ad2e78-0dc8-4aaf-8fff-14e4f4cc66f0");
	CreatedInPackageId = new Guid("030d41ee-44a4-48d3-80a0-137c28cbd317");
	CreatedInSchemaUId = Guid.Empty;
	EntitySchemaUId = Guid.Empty;
	ModifiedInSchemaUId = Guid.Empty;
	ParametersEditPageSchemaUId = Guid.Empty;
	ParentSchemaUId = new Guid("bb4d6607-026b-4b27-b640-8f5c77c1e89d");
	QuickModelData = @"";
	SequenceFlowStrokeDefColor = Color.FromArgb(-4473925);
	SerializeToDB = true;
	SerializeToMemory = true;
	Tag = @"Bussines Process";
	TaskFillDefColor = Color.FromArgb(-1);
	UsageType = ProcessSchemaUsageType.Advanced;
	RealUId = new Guid("61ad2e78-0dc8-4aaf-8fff-14e4f4cc66f0");
}

Олег, прошу прощения. Похоже, я Вам немного не то посоветовал. Попробуйте так:

var manager = UserConnection.ProcessSchemaManager;
var schema =  (ProcessSchema)manager.GetInstanceByUId(ProcessUId);
 
//или можно так:
//var schema = manager.FindInstanceByName(processName);
 
var process = schema.CreateProcess(UserConnection);
if (process != null) {
		process.SetPropertyValue("PropertyName", propertyVlue); //установка параметров процесса
		process.Execute(UserConnection);
}

Андрей, спасибо большое, все получилось

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

Добрый день,
Подскажите как работать с результирующей коллекцией элемента "Чтение данных" в БП.
Необходимо создать задачу на всех контактов с должностью "Менеджер" - добавляю чтение данных ставлю условие "Должность" равно "Менеджер", дальше добавляю элемент "Задача" и пытаюсь выбрать туда "Результирующая коллекция", но она недоступна. Возможно ли как то организовать цикл в БП чтобы создать задачи для всех элементов выборки?
Или еще случай, необходимо в БП предать при запуске сразу несколько идентификаторов записей и для них создавать задачи, опять же как сделать цикл чтобы пройтись по всем идентификаторам или единственный вариант - запускать отдельный БП для каждого идентификатора?
Заранее спасибо.

Нравится

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

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

Здравствуйте, Олег!

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

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

Спасибо Андрей, уже разобрался, не знал как обращаться к результирующей коллекции

Добрый день,
Чтоб не создавать новую тему спрошу тут:
Неверно срабатывает стандартный элемент БП "Страница редактирования", а точнее нужная страница открывается, но поля установленные по умолчанию подтягиваются не все:
1
Дополнительно созданное поле (Контакт физ.лицо) не заполняется из стандартного поля Лида (Квалифицирован как контакт), хотя оно заполнено:
2
В чем может быть проблема, как исправить? Пробовал перекомпилировать и задавать это поле просто через элемент "Изменение данных" результат тот же - поле не заполняется

Добрый день, Олег!

Проверьте правильно ли создано данное поле. "Квалифицирован как контакт" отображает информацию о том, с каким контактом при квалификации был связан лид. Поле не отображается на странице лида, но может быть отображено в реестре.
А значение "Квалифицирован как контрагент" передаются?

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

Team версия 7.4.0.2628

Разобрался, проблема по моей вине, Читал данные Лида раньше чем у него появлялось это поле :exclaim:

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

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

Сигналом для бизнес процесса являться добавление записи в раздел Продажи.
Каким образом нужно создать запись из web сервиса, что бы сработал этот бизнес - процесс.

Есть класс Insert, но насколько я понял он работает напрямую с БД и не вызовет срабатывание процесса. Значит остается вызов этого процесса из веб сервиса с параметром Id созданной продажи, не подскажите где найти пример вызова БП, у которого начальный сигнал - добавление записи.

Или есть еще какие то способы?

Нравится

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

Во внешнем интерфейсе ProcessEngine.svc есть публичный метод throwSignal(string signal), который позволяет сгенерировать сигнал, который ожидают те или иные процессы. Это для информации.
А вообще проблемы не будет, если вместо Select использовать EntitySchemaQuery, который триггернет событие добавления/изменения записи. К сожалению, не помню есть ли возможность пользоваться им, но почти уверен что да.

Дмитрий,
может вы перепутали? или не поняли меня.
http://www.terrasoft.ru/bpmonlinesdk/
Насколько я понял EntitySchemaQuery это Select + права доступа. С помощью него нельзя вставить запись.
Т.е. остается только генерация сигнала для бизнес процесса или есть еще вариант?
Приведите пожалуйста пример для С# (Web-сервиса).

Да, вы правы, извиняюсь.
Узнал, что если создавать запись так

 var schema = userConnection.EntitySchemaManager.GetInstanceByName("Activity");
    var entity = schema.CreateEntity(userConnection);
 
    entity.SetDefColumnValues();
    entity.SetColumnValue("Title", "Создать выборку целевой аудитории");
    entity.SetColumnValue("OwnerId", ownerId);
    entity.SetColumnValue("TypeId", "FBE0ACDC-CFC0-DF11-B00F-001D60E938C6");
    entity.Save();

то триггера на стартовый событиях бп (добавление/изменение записи) сработают.

дубль

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