Переходы по кнопкам формы в бизнес процессах

Добрый день, возникла следующая проблема при создании БП.
Есть форма с 4 строковыми полями и кнопками Поиск,Отложить,Закрыть.
При нажатии кнопки Поиск запускается поиск в системе и переходит на шаг 2 где отображаются результаты поиска,Отложить - сохраняет БП,Закрыть - завершает БП.

Как можно реализировать переходы на соответствующие шаги по нажатию кнопки?

Нравится

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

Думаю, в Вашем случае можно использовать элемент "Выбор" (отображается серым ромбом в меню объектов БП). Общий алгоритм примерно такой:

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, и в ней ещё не реализован этот элемент, присоединяю текст скрипта к данному сообщению.

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