Назначение параметров для action "Открытие окна"

Уважаемые Гуру бизнес-процессов! Возник вопрос, по которому очень хотелось бы услышать совет и рекомендацию, как лучше и как правильно.
Terrasoft 3.3.2.125.
Итак, для создания например счета мы используем action "Открыть окно". Назначаем окно wnd_InvoiceEdit, задаем для него набор параметров (в "Свойствах действия"), в том числе "Планируемую дату" - будем проставлять ее как текущую или впоследствии сделаем что-то хитрее.

Параметр этот создаем с типом "Дата", что логично

Тем не менее, отображается сгенерированный параметр как тип "Строка" в списке параметров (реестр "Параметры действия" для данного элемента).

Но речь не об этом, хотя нюанс досадный (надо бы поправить) - напишу подробнее потом в поддержку, так как при последующем вызове "Свойств действия" возникает ошибка...

Назначаем на событие данного элемента обработчик такого примерно вида:

function Action4OnBeforeExecute(ActionItem) {
        var Diagram = GetDiagramByItem(ActionItem);
        var StartDate = GetTodayDate();
        WFSetParamsMapItemValue(ActionItem, 'Field_StartDate', StartDate.getVarDate());
}

И вот тут вопрос - так как не проставляется в это поле желаемая дата, увы... (кэш чистим, стандартное заполнение поля в карточке отключаем, либо просто берем произвольное/новое поле и получается то же самое...)
Поле с датой взято для примера, аналогично необходимо назначать значения различных полей.
Интересно, как для окон, вызываемых этим action передавать значения параметров - без использования связи их с параметрами диаграммы (таким образом, естественно, все получается).

Нравится

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

Попробуйте вместо WFSetParamsMapItemValue использовать WFSetParamValue:

function Action4OnBeforeExecute(ActionItem) {
        var Diagram = GetDiagramByItem(ActionItem);
        var StartDate = GetTodayDate();
        WFSetParamValue(ActionItem, 'Field_StartDate', StartDate.getVarDate());
}

"Лабьяк Олег Игоревич" написал:Попробуйте вместо WFSetParamsMapItemValue использовать WFSetParamValue:

И ведь сработало, спасибо!

Раз с эти вопросом все стало ясно, подниму еще одну тему - раньше использовались actions Счет, Продажа и прочие - для них передавалось в датасет значение WorkflowItemID, его обработка в скрипте карточек осталась по сей день. При использовании "Открыть окно" такое значение не передается, соответственно объекты как бы оторваны от БП - есть ли уже задуманная, внесенная в систему "штатная" альтернатива или можно использовать любые способы по желанию - атрибут для вызываемого окна передавать и т.д. и писать для него свои обработчики в коде карточки?

Можно сделать проще - перед открытием окна элемента "Открыть окно" заполнить элемент с кодом WorkflowItemID атрибута DefaultValues этого окна соответствующим значением. Если в датасете окна есть такое поле, оно будет заполнено, иначе - ничего не произойдёт.

Изменения нужно внести в функцию ExecuteOpenWindow скрипта wa_OpenWindowScript:

function ExecuteOpenWindow(WindowType, ActionItem, WorkflowAction, 
	WorkflowItemID) {
	var WindowUSI = WFGetParamValue(ActionItem, 'WindowUSI', '');
	if (!WindowUSI) {
		ShowErrorDialog(WindowServiceIsEmptyError);
		return false;
	}
	var ServiceInfo = Services.InformationsByUSI(WindowUSI);
	if (!ServiceInfo) {
		ShowErrorDialog(FormatStr(WindowServiceNotFoundError, WindowUSI));
		return false;
	}
	var Window = GetSingleItemByCode(ServiceInfo.USI, 'OpenWindow');
 
	ProcessCloseOptions(Window, ActionItem, WorkflowAction, WorkflowItemID);
 
	// Заполнение значения по умолчанию для поля WorkflowItemID
	var DefaultValues = GetNewDictionary();
	DefaultValues('WorkflowItemID') = WorkflowItemID;
	Window.Attributes('DefaultValues') = DefaultValues;
	// Заполнение завершено
 
	SetAdditionalWindowAttributes(Window, ActionItem);
 
	if (WindowType == owtEdit) {
		var IsNew = WFGetParamValue(ActionItem, 'CreateNewRecord', true);
		var RecordID = WFGetParamValue(ActionItem, 'RecordID', GUID_NULL);
		Window.Attributes('IsNew') = IsNew;
		Window.Attributes('RecordID') = RecordID ? RecordID : GUID_NULL;
		if (!IsNew && IsEmptyGUID(RecordID)) {
			ShowErrorDialog("Не указана запись для редактирования");
			return false;
		}
	}
........
}

Спасибо Вам за замечание, информация по нему будет передана в департамент разработки продуктов.

Ага, ценное дополнение, спасибо вновь! сейчас применим
+ по ошибке с параметром Дата письмо я отослал на суппорт

Да, мы получили Ваше письмо. В ближайшее время ожидайте ответ.

Олег, спасибо за оперативность! уже получил ответ, окно параметров стало открываться корректно

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