Добрый день, возникла следующая проблема при создании БП.
Есть форма с 4 строковыми полями и кнопками Поиск,Отложить,Закрыть.
При нажатии кнопки Поиск запускается поиск в системе и переходит на шаг 2 где отображаются результаты поиска,Отложить - сохраняет БП,Закрыть - завершает БП.
Как можно реализировать переходы на соответствующие шаги по нажатию кнопки?
Нравится
Думаю, в Вашем случае можно использовать элемент "Выбор" (отображается серым ромбом в меню объектов БП). Общий алгоритм примерно такой:
1) Во время закрытия Вашей формы запоминается её результат и записывается в созданный заранее параметр БП.
2) Следующий после формы элемент БП - элемент "Выбор", в обработчике события OnDecision которого проверяется этот параметр БП, и в зависимости от его значения происходит переход по соответствующему линку.
Замечу, что в данном случае не нужно выбирать для линков значения, предлагаемые по умолчанию ("Да"/"Нет"), а собственноручно заполнить свойства Code и Caption линков-результатов.
Например, из элемента "Выбор" выходят 3 линка с кодами clSearch, clDelay, clClose. Тогда обработчик события OnDecision этого элемента будет примерно таким:
[javascript]
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;
}
}
[/javascript]
1) Во время закрытия Вашей формы запоминается её результат и записывается в созданный заранее параметр БП.
Олег, а каким именно образом это можно сделать?
Я создал WA, где на OnExecute открываю окно.
Можна каким то образом передать после нажатия кнопок на окне атрибут
и OnNotify WA присвоит его параметру FormResult?
Можно перед открытием окна указать WA в атрибуте NotifyObject, а при обработке кнопок вызывать функцию SendNotify, передавая в неё сообщение, соответствующее нажатой кнопке. Эта функция будет вызывать обработчик OnNotify элемента процесса, в котором можно анализировать полученное сообщение и в зависимости от него устанавливать значение параметру диаграммы.
Олег, сделал как вы сказали, вискакивает ошибка:
"TSWorkflowLibrary.WorkflowAction: Object doesn't support interface IScriptableServiceEvents
({DC3AA68E-8E74-4345-B7FC-3F6F6800F5D1})"
Вот код на btnOK:
[javascript]
function btnOKOnClick(Control) {
var NotifyObject = GetAttribute(Self, 'NotifyObject');
SetAttribute(Self, 'IsOnlyClose', false)
SendNotify(Self, 'Search', null);
// либо NotifyObject.Notify(Self, 'Search', null)
Self.Close();
}
[/javascript]
А так я описал в самой WA:
[javascript]
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;
}
}
[/javascript]
Мне кажется, нет необходимости передавать в обработчик OnNotify значение IsComplete. В качестве примера возьмите реализацию элемента БП wa_CustomEditWindow. Там немного сложнее, в Вашей реализации уберите лишние атрибуты. Обратите внимание на атрибут Completed, с помощью которого происходит завершение элемента БП, а также на передачу параметров в функции ProcessNotify (сначала создаётся новый объект Parameters, устанавливаются значения и вызывается повторно ProcessWorkflowItem; для этого необходимо передавать через атрибуты WorkflowItemID).
На случай, если у Вас версия ниже 3.3.2, и в ней ещё не реализован этот элемент, присоединяю текст скрипта к данному сообщению.