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

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

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

Но речь не об этом, хотя нюанс досадный (надо бы поправить) - напишу подробнее потом в поддержку, так как при последующем вызове "Свойств действия" возникает ошибка...
Назначаем на событие данного элемента обработчик такого примерно вида:
var Diagram = GetDiagramByItem(ActionItem);
var StartDate = GetTodayDate();
WFSetParamsMapItemValue(ActionItem, 'Field_StartDate', StartDate.getVarDate());
}
И вот тут вопрос - так как не проставляется в это поле желаемая дата, увы... (кэш чистим, стандартное заполнение поля в карточке отключаем, либо просто берем произвольное/новое поле и получается то же самое...)
Поле с датой взято для примера, аналогично необходимо назначать значения различных полей.
Интересно, как для окон, вызываемых этим action передавать значения параметров - без использования связи их с параметрами диаграммы (таким образом, естественно, все получается).
Нравится
Попробуйте вместо WFSetParamsMapItemValue использовать WFSetParamValue:
[javascript]
function Action4OnBeforeExecute(ActionItem) {
var Diagram = GetDiagramByItem(ActionItem);
var StartDate = GetTodayDate();
WFSetParamValue(ActionItem, 'Field_StartDate', StartDate.getVarDate());
}
[/javascript]
"Лабьяк Олег Игоревич" написал:Попробуйте вместо WFSetParamsMapItemValue использовать WFSetParamValue:
И ведь сработало, спасибо!
Раз с эти вопросом все стало ясно, подниму еще одну тему - раньше использовались actions Счет, Продажа и прочие - для них передавалось в датасет значение WorkflowItemID, его обработка в скрипте карточек осталась по сей день. При использовании "Открыть окно" такое значение не передается, соответственно объекты как бы оторваны от БП - есть ли уже задуманная, внесенная в систему "штатная" альтернатива или можно использовать любые способы по желанию - атрибут для вызываемого окна передавать и т.д. и писать для него свои обработчики в коде карточки?
Можно сделать проще - перед открытием окна элемента "Открыть окно" заполнить элемент с кодом WorkflowItemID атрибута DefaultValues этого окна соответствующим значением. Если в датасете окна есть такое поле, оно будет заполнено, иначе - ничего не произойдёт.
Изменения нужно внести в функцию ExecuteOpenWindow скрипта wa_OpenWindowScript:
[javascript]
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;
}
}
........
}
[/javascript]
Спасибо Вам за замечание, информация по нему будет передана в департамент разработки продуктов.
Ага, ценное дополнение, спасибо вновь! сейчас применим
+ по ошибке с параметром Дата письмо я отослал на суппорт
Да, мы получили Ваше письмо. В ближайшее время ожидайте ответ.
Олег, спасибо за оперативность! уже получил ответ, окно параметров стало открываться корректно