#javascript #filenet-p8
#язык JavaScript #файловая сеть-p8
Вопрос:
Я пытаюсь написать пользовательский диалог, который создается с помощью адаптера сценариев в IBM Case Manager 5.3.0 . Это код для адаптера скрипта
define([ 'dojo/_base/declare', 'dojo/_base/lang', 'icm/base/Constants', 'icm/model/properties/controller/ControllerManager', 'eu/europa/ec/cmr/dialog/ExtendDeadlineDialog' ], function ( declare, lang, Constants, ControllerManager, ExtendDeadlineDialog ) { var SingletonClass = declare('eu.europa.ec.cmr.scriptAdapters.ExtendDeadline', [], { WK_ITEM_RESPONSE_EXTEND_DEADLINE: "Extend Deadline", end : false, execute: async function (payload) { let workItemEditable = payload.workItemEditable; let coordination = payload.coordination; let self = this; let controllerManager = ControllerManager.bind(workItemEditable); let currentDeadlineDate = controllerManager.getPropertyController("F_CaseTask", "PT_DeadlineDate").get("value"); ControllerManager.unbind(workItemEditable); coordination.participate(Constants.CoordTopic.VALIDATE, async function (context, complete, abort) { if (context[Constants.CoordContext.WKITEMRESPONSE] === self.WK_ITEM_RESPONSE_EXTEND_DEADLINE) { let extendDeadlineDialog = new ExtendDeadlineDialog(currentDeadlineDate,lang.clone(workItemEditable)); extendDeadlineDialog.exexute = self.callback.bind(self); extendDeadlineDialog.show(); while (self.end === false) { await self.sleep(3000); } console.log("Completing"); this.end = false; complete(); } }); }, callback : function () { this.end = true; console.log("Hello World"); }, sleep: function (ms) { return new Promise( resolve =gt; setTimeout(resolve, ms) ); } }); if (!_instance) { var _instance = new SingletonClass(); } return _instance; });
Это стандартный адаптер сценариев, который создает пользовательский диалог внутри функции coordination.participate. Код для пользовательского диалогового окна выглядит следующим образом:
define([ 'dojo/_base/declare', "dojo/_base/lang", 'dojo/text!./templates/ExtendDeadlineDialog.html', 'ecm/widget/dialog/BaseDialog', "dijit/_TemplatedMixin", 'icm/model/properties/controller/ControllerManager', 'icm/base/Constants', 'ecm/widget/dialog/ErrorDialog', ], function ( declare, lang, template, BaseDialog, _TemplatedMixin, ControllerManager, Constants, ErrorDialog ) { return declare('eu.europa.ec.cmr.dialog.ExtendDeadlineDialog', [BaseDialog, _TemplatedMixin], { templateString: template, currentDeadlineDate: null, constructor: function (currentDeadlineDate,workItemEditable) { this.currentDeadlineDate = currentDeadlineDate; console.log(workItemEditable); }, postCreate: function () { this.inherited(arguments); this.setTitle("Extend Task Deadline"); this.setResizable(true); this.setExpandable(false); this.setSize(300, 280); this.currentDateBox.set("value",this.currentDeadlineDate); this.newDateBox.constraints.min = this.currentDateBox.get("value"); }, startup: function() { this.inherited(arguments); }, onCancel: function() { this.inherited(arguments); this.destroy(); }, onConfirm: function () { this.inherited(arguments); if (this.newDateBox.get("value")) { this.destroy(); } else { let errorDialog = new ErrorDialog("New date cannot be blank"); errorDialog.showMessage("New date cannot be blank"); } } }); });
Это настраиваемое диалоговое окно состоит из двух областей текста даты и двух кнопок. Когда пользователь нажимает кнопку подтверждения, мне нужно получить новую дату и сохранить ее в файловой сети. Когда я запускаю этот код и открываю диалоговое окно, пользовательское диалоговое окно не может быть создано, и проблема заключается в переменной workItemEditable, которую я пытаюсь передать через ее конструктор. Однако эта переменная необходима, если я хочу сохранить новую дату в файловой сети. Кто-нибудь знает, почему это происходит или как вернуть значение даты обратно в исходный scipt адаптера сценария?