что-то я никак не пойму логику.....

Коллеги, приветствую.

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

И вроде бы все хорошо, если реквизит заполнен, бизнес процесс исполняется до конца.
Если реквизит не заполнен - открываю принудительно форму инцидента,
но если пользователь не знает каким значением нужно заполнить реквизит - он закрывает форму с надеждой вернуться к нему завтра...
"завтра" он открывает инцидент, устанавливает значение и жмет "ок"..

Почему то у меня бизнес-процесс не стартует дальше.

Посмотрел в таблице - WorkflowID is null, значит он не запустился именно по этому ?
если да - в какой момент заполняется этот реквизит.

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

з.ы.ы. пример весьма условный - просто хочу понять логику

Нравится

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

з.ы.ы. вот продположим есть "wa_SendEmail" где у него в коде прописывается переход на следующий шаг по процессу, и как это вообще реализованно ?

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

Здравствуйте Сергей,
На тему WorkflowItemID прошу ознакомится

"Alimova Anna" написал:Олег, данное поле использовалось в предыдущих версия Terrasoft и оставлено для совместимости. В новых версиях WorkflowItemID связан только с задачами.

Можно добавить в функцию ExecuteOpenWindow скрипта wa_OpenWindowScript такой блок:

// Заполнение значения по умолчанию для поля WorkflowItemID
var DefaultValues = GetNewDictionary();
DefaultValues('WorkflowItemID') = WorkflowItemID;
Window.Attributes('DefaultValues') = DefaultValues;
// Заполнение завершено

Если в датасете есть поле 'WorkflowItemID', оно будет заполнено; иначе - всё останется без изменений.

Подробнее данный вопрос рассматривался здесь: http://www.community.terrasoft.ua/forum/topic/5368

С уважением, Анна Алимова
Специалист II линии технической поддержки Terrasoft

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

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

ок...
а можно кусочек кода или пример где это реализованно, не использую СТАРЫЙ механизм (workflowitemid)

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

Не совсем понятен Ваш комментарий:

"Sergey Panin" написал:

. не использую СТАРЫЙ механизм (workflowitemid)

Дело в том, что, если Вы не используете рекомендаций, данных выше (Яворским Алексеем и Алимовой Анной) и не заполните WorkflowItemId, то далее Вы не сможете отследить, что инцидент был создан по процессу, а, на сколько я вижу, для дальнейшей реализации Вашей задачи это необходимо.

Если же у инцидента заполнен этот параметр, то на OnClick кнопки Ok нужно:
1) проверить, что WorkflowItemId данного инцидента не пустое и соответствует тому процессу, который нужно продолжать;
2) проверять выполнение того условия, по которому процесс должен идти дальше (заполнение какого-либо поля и т.д.);
3) выполнять шаг процесса. Для этой цели попробуйте использовать функцию ProcessItem из скрипта scr_WorkflowGridArea. Это та функция, которая вызывается по нажатию кнопки "Выполнить шаг" реестра процессов.

Инна Безверхняя,
II линия службы поддержки Terrasoft.

Инна, добрый день.
Вы писали: Данное поле использовалось в предыдущих версия Terrasoft и оставлено для совместимости.
Соответственно, я предположил что поле WorkflowItemID устарело, и сейчас, при разработке новых операций лучше на него не завязываться ?
Если это так прошу подтвердить.

по остальному все понятно, именно така идея и была.
вот только может имеет смысл добавить реквизит "процесс" на инцидент, заполнять его и работать с ним, чем делать селект Workflow по Incident.WorkflowItemID, а затем искать WorkflowItem в состоянии "ожидает" по данному Workflow.
иначе не понятно какой ID передавать в WorkflowGridArea.WorkflowEngine.ProcessWorkflowItem(ItemID);

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

Что касается дублирования WorkflowID в таблице инцидентов, не думаю, что это стоит делать, поскольку, зная WorkflowItemID Вы можете однозначно определить WorkflowID отфильтровав датасет ds_WorkflowItem по этому значению.

Инна Безверхняя,
II линия службы поддержки Terrasoft.

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