Коллеги, приветствую.
Предположим есть простейший бизнес-процесс,
который проверяет заполнен ли реквизит на инциденте,
если да то в конец, если нет то останавливаемся, пока реквизит не будет заполнен.
И вроде бы все хорошо, если реквизит заполнен, бизнес процесс исполняется до конца.
Если реквизит не заполнен - открываю принудительно форму инцидента,
но если пользователь не знает каким значением нужно заполнить реквизит - он закрывает форму с надеждой вернуться к нему завтра...
"завтра" он открывает инцидент, устанавливает значение и жмет "ок"..
Почему то у меня бизнес-процесс не стартует дальше.
Посмотрел в таблице - WorkflowID is null, значит он не запустился именно по этому ?
если да - в какой момент заполняется этот реквизит.
з.ы. блок на котором останавливаюсь - мой собственный, быть может где то там в обработчике нужно что то написать.
з.ы.ы. пример весьма условный - просто хочу понять логику
Нравится
з.ы.ы. вот продположим есть "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.