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