Вызов пользовательского действия в сценарии процесса

Добрый день!
В процессе есть такой элемент "выполнить действие процесса", его можно выбрать и указать в нем пользовательское действие и указав необходимые параметры для действия
Скажите, пожалуйста, каким образом можно вызвать данное действия в элементе сценарий процесса?

Нравится

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

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

Один вопрос: зачем?

Добрый день!
Есть пользовательское действие "обработать шаблон сообщения с макросами"
У нас есть процесс, который в случае если критичное обращение не успевает выполняться в срок, то ряду людей(специальной группе, состоящей из 5-6 чел) отправляется письма-оповещения, что по такому-то обращению приближается срок реакции. Таким образом, каждому человеку из группы руководителей отправляется соответствующее письмо на e-mail, а также приходит уведомление в систему дополнительно. Для этого используется элемент-сценарий в процессе , т.е. составляется запрос-список людей(результат=5-6 человек), и каждому отправляется письмо по заранее обработанному шаблону в данном процессе и уведомление в систему. Хочется в начале письма писать не просто "Добрый день", а, например, "Добрый день, Василий Васильевич" (в зависимости от адресата).
Для этого, как вариант, возникла идея вызвать данное действие в элементе-сценарии.
Т.е. составляется запрос-список людей(5-6 человек), вызывается действие обработки шаблона для этого человека, отправляется письмо по этому шаблону и уведомление в систему.
Возможно, это слишком сложный способ и есть проще?
Продукт сервис-деск

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

Корректно будет сделать по другому. В элементе "Задание-сценарий" можно вызвать несколько экземпляров процесса, передавая в него параметры.

Подобная тема обсуждалась по ссылке:
http://www.community.terrasoft.ru/forum/topic/25071

Добрый день!
Вызываем вспомогательный процесс в элементе "Задание сценарий" главного процесса следующим образом:
(галка "интерп.процессы" отщелкнута, 7.9)

UserConnection userConnection = context.UserConnection;
var select =
new Select(userConnection)
.Column("UsrTest","UsrContactId")
.Column("UsrTest","UsrEmail")
.Column("UsrTest","Id")
.From("UsrTest")
.Where("UsrTest","UsrTestId").IsEqual(new QueryParameter(RecordId))
as Select;

var manager = userConnection.ProcessSchemaManager;
var processSchema = (ProcessSchema)manager.FindInstanceByName("UsrProcessMyMailSendSub");
if (processSchema == null)
{ return true;
}

using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) {
using (IDataReader dataReader = select.ExecuteReader(dbExecutor)) {
while (dataReader.Read()) {

var moduleProcess = processSchema.CreateProcess(userConnection);
moduleProcess.SetPropertyValue(@"contactId", (Guid)dataReader.GetColumnValue("UsrContactId"));
moduleProcess.SetPropertyValue(@"needEmail", (String)dataReader.GetColumnValue("UsrEmail"));
moduleProcess.SetPropertyValue(@"needId", (Guid)dataReader.GetColumnValue("Id"));
moduleProcess.Execute(userConnection);
}
}
}
return true;

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

Подскажите, пожалуйста, что может быть не так

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

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

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