Переходы по кнопкам формы в бизнес процессах
Добрый день, возникла следующая проблема при создании БП.
Есть форма с 4 строковыми полями и кнопками Поиск,Отложить,Закрыть.
При нажатии кнопки Поиск запускается поиск в системе и переходит на шаг 2 где отображаются результаты поиска,Отложить - сохраняет БП,Закрыть - завершает БП.
Как можно реализировать переходы на соответствующие шаги по нажатию кнопки?
Нравится
Думаю, в Вашем случае можно использовать элемент "Выбор" (отображается серым ромбом в меню объектов БП). Общий алгоритм примерно такой:
1) Во время закрытия Вашей формы запоминается её результат и записывается в созданный заранее параметр БП.
2) Следующий после формы элемент БП - элемент "Выбор", в обработчике события OnDecision которого проверяется этот параметр БП, и в зависимости от его значения происходит переход по соответствующему линку.
Замечу, что в данном случае не нужно выбирать для линков значения, предлагаемые по умолчанию ("Да"/"Нет"), а собственноручно заполнить свойства Code и Caption линков-результатов.
Например, из элемента "Выбор" выходят 3 линка с кодами clSearch, clDelay, clClose. Тогда обработчик события OnDecision этого элемента будет примерно таким:
function wda_DecisionOnDecision(DecisionItem, IsComplete, ResultLinkCodes) { var Diagram = GetDiagramByItem(DecisionItem); var FormResult = WFGetParamValue(Diagram, 'FormResult'); IsComplete.Value = true; switch (FormResult) { case 'Search': ResultLinkCodes = 'clSearch'; break; case 'Delay': ResultLinkCodes = 'clDelay'; break; case 'Close': ResultLinkCodes = 'clClose'; break; } }
1) Во время закрытия Вашей формы запоминается её результат и записывается в созданный заранее параметр БП.
Олег, а каким именно образом это можно сделать?
Я создал WA, где на OnExecute открываю окно.
Можна каким то образом передать после нажатия кнопок на окне атрибут
и OnNotify WA присвоит его параметру FormResult?
Можно перед открытием окна указать WA в атрибуте NotifyObject, а при обработке кнопок вызывать функцию SendNotify, передавая в неё сообщение, соответствующее нажатой кнопке. Эта функция будет вызывать обработчик OnNotify элемента процесса, в котором можно анализировать полученное сообщение и в зависимости от него устанавливать значение параметру диаграммы.
Олег, сделал как вы сказали, вискакивает ошибка:
"TSWorkflowLibrary.WorkflowAction: Object doesn't support interface IScriptableServiceEvents
({DC3AA68E-8E74-4345-B7FC-3F6F6800F5D1})"
Вот код на btnOK:
function btnOKOnClick(Control) { var NotifyObject = GetAttribute(Self, 'NotifyObject'); SetAttribute(Self, 'IsOnlyClose', false) SendNotify(Self, 'Search', null); // либо NotifyObject.Notify(Self, 'Search', null) Self.Close(); }
А так я описал в самой WA:
function wa_AccountSearchOnExecute(WorkflowAction, ActionItem, ItemDataset, IsComplete, ResultLinkCodes) { var Attributes = GetNewDictionary(); Attributes.Add('NotifyObject', Self); Attributes.Add('IsComplete', IsComplete); var DefaultValues = GetNewDictionary(); ShowEditWindowEx('wnd_AccountSearch', Attributes, DefaultValues); IsComplete.Value = false; } function wa_AccountSearchOnNotify(ScriptableService, Sender, Message, Data) { if (Sender.Name == 'wnd_AccountSearch' ) { WFSetParamValue(Self, 'FormResult', Message); IsComplete = GetAttribute(Sender, 'IsComplete'); IsComplete.Value = true; } }
Мне кажется, нет необходимости передавать в обработчик OnNotify значение IsComplete. В качестве примера возьмите реализацию элемента БП wa_CustomEditWindow. Там немного сложнее, в Вашей реализации уберите лишние атрибуты. Обратите внимание на атрибут Completed, с помощью которого происходит завершение элемента БП, а также на передачу параметров в функции ProcessNotify (сначала создаётся новый объект Parameters, устанавливаются значения и вызывается повторно ProcessWorkflowItem; для этого необходимо передавать через атрибуты WorkflowItemID).
На случай, если у Вас версия ниже 3.3.2, и в ней ещё не реализован этот элемент, присоединяю текст скрипта к данному сообщению.