Уважаемые Гуру бизнес-процессов! Возник вопрос, по которому очень хотелось бы услышать совет и рекомендацию, как лучше и как правильно.
Terrasoft 3.3.2.125.
Итак, для создания например счета мы используем action "Открыть окно". Назначаем окно wnd_InvoiceEdit, задаем для него набор параметров (в "Свойствах действия"), в том числе "Планируемую дату" - будем проставлять ее как текущую или впоследствии сделаем что-то хитрее.
Параметр этот создаем с типом "Дата", что логично
Тем не менее, отображается сгенерированный параметр как тип "Строка" в списке параметров (реестр "Параметры действия" для данного элемента).
Но речь не об этом, хотя нюанс досадный (надо бы поправить) - напишу подробнее потом в поддержку, так как при последующем вызове "Свойств действия" возникает ошибка...
Назначаем на событие данного элемента обработчик такого примерно вида:
var Diagram = GetDiagramByItem(ActionItem);
var StartDate = GetTodayDate();
WFSetParamsMapItemValue(ActionItem, 'Field_StartDate', StartDate.getVarDate());
}
И вот тут вопрос - так как не проставляется в это поле желаемая дата, увы... (кэш чистим, стандартное заполнение поля в карточке отключаем, либо просто берем произвольное/новое поле и получается то же самое...)
Поле с датой взято для примера, аналогично необходимо назначать значения различных полей.
Интересно, как для окон, вызываемых этим action передавать значения параметров - без использования связи их с параметрами диаграммы (таким образом, естественно, все получается).
Нравится
Попробуйте вместо 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; } } ........ }
Спасибо Вам за замечание, информация по нему будет передана в департамент разработки продуктов.
Ага, ценное дополнение, спасибо вновь! сейчас применим
+ по ошибке с параметром Дата письмо я отослал на суппорт
Да, мы получили Ваше письмо. В ближайшее время ожидайте ответ.
Олег, спасибо за оперативность! уже получил ответ, окно параметров стало открываться корректно