Корневой элемент handler, async-handler. Пространство имен: <ui xmlns="http://www.intertrust.ru/schema/palette/tn-ui"> |
Используется для подключения JavaBean или написание JavaScript кода |
<?xml version='1.0' encoding='UTF-8'?> <ui xmlns="http://www.intertrust.ru/schema/palette/tn-ui"> <!-- Асинхронный обработчик--> <async-handler id="{id}" name="{name}" name-process="{process name}"> <script lang="JavaBean"><![CDATA[...]]></script> </async-handler> <handler id="{id}" name="{name}"> <script lang="JavaScript"><![CDATA[...]]></script> </handler> </ui> |
Параметры | Описание |
---|---|
id | Идентификатор |
name | Название |
use-by-link | Можно ли подписывать обработчик для использования пользователем без прямых прав чтения |
Параметры | Описание |
---|---|
lang | Язык программирования JavaScript/подключение JavaBean |
importClass(Packages.ru.intertrust.cmj.af.core.AFSession); importClass(Packages.ru.intertrust.cmj.af.exceptions.AFDaoBadParameterException); importClass(Packages.ru.intertrust.cmj.rest.tunable.object.TunableObjectREST); importClass(Packages.ru.intertrust.cmj.rest.tunable.object.TunableObjectREST.Resource); importClass(Packages.ru.intertrust.cmj.rest.tunable.object.action.TunableOperation); importClass(Packages.ru.intertrust.cmj.tunable.object.AnyTunableObject); importClass(Packages.ru.intertrust.cmj.tunable.object.TunableObjectApplication); importClass(Packages.ru.intertrust.cmj.tunable.object.TunableObjectApplication.ClientContextKey); importClass(Packages.ru.intertrust.cmj.tunable.object.common.TunableObjectHelper); importClass(Packages.ru.intertrust.cmj.rest.tunable.object.action.OperationJScriptREST); importClass(Packages.ru.intertrust.cmj.rest.tunable.object.action.OperationJScriptREST.ReturnParamsResource); importPackage(Packages.java.util); importPackage(Packages.java.lang); function process(paramsResource, returnResource) { if (paramsResource == null) { throw new IllegalArgumentException("paramsResource must no be null."); } var paramPackageId = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues() .get("counter")); if (paramPackageId.equals("context")) { // обработка первого пакета данных process_context(paramsResource, returnResource); } else if (paramPackageId.equals("answer1")) { // обработка данных первого диалога process_dialog1(paramsResource, returnResource); } } /** * Обработка первого пакета данных с клиента. * @param paramsResource * @return ресурс первого диалога сценария */ function process_context(paramsResource, returnResource) { var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class); var ids = appTNObject.getClientContextIds(paramsResource.tuning()); if (ids.isEmpty()) { throw new AFDaoBadParameterException("Не выбраны документы!"); } /* do something */ /* здесь указывается имя Схемы диалога который нужно показать клиенту */ var message = appTNObject.composeDialog("TestDialogScheme", null, null, null); TunableObjectHelper.putAFInstanceValue(message.tuning(), "ids", ids); TunableObjectHelper.putAFInstanceValue(message, "counter", "answer1"); returnResource.resource = Resource.create(message); } /** * Обработка данных первого диалога сценария. * @param paramsResource * @return ресурс второго диалога, или, иначе пустой ответ, как сигнал о завершении операции. * В случае пустого ответа клиент должен закрыть документ, если контекст - открытый документ. */ function process_onePersonDelete_dialog1(paramsResource, returnResource) { /* do something */ returnResource.setResource(null); } |
paramsResource - экземпляр класса TunableObjectREST.Resource, при первом вызове содержит данные о том, сколько и какие документы выделены, при последующий вызовах это ресурс диалога, в котором было произведено действие submit. Также содержит свойство "counter" которое нужно для определения того, на каком шаге сценария операции находимся. При первом вызове свойство counter= "context", при последующих действиях оно определяется вручную(можно кодом положить нужное значение).
returnResource - экземпляр класса TunableObjectREST.ReturnParamsResource, содержит в себе единственное поле - resource, в которое нужно установить либо:
Параметры | Описание |
---|---|
process | function process(paramsResource, returnResource) - название функции менять нельзя Функция вызывается при первом нажатии кнопки и при последующих нажатиях кнопки с action=submit в диалогах операции. Через параметр returnResource.resource должна передать диалог/null клиенту. В общем случае используется для вызова нужной функции в зависимости от шага сценария. |
process_context | function process_context(paramsResource, returnResource) Функция вызывается из process(paramsResource, returnResource) при первом вызове, в ней формируется ресурс диалога с нужным значением в поле "counter" и кладется в поле returnResource.resource. |
process_<dialog_name> | function process_<dialog_name>(paramsResource, returnResource) Функция вызывается из process(paramsResource, returnResource) при определенном значении поля "counter". Переподбирается один или несколько объектов(по полю ids), в зависимости от того, на основании данных пришедшего диалога, над объектами проводятся определенные действия, включая сохранение. Заполняется поле returnResource.resource. |
Для добавления диалога создаётся схема и секция с mode=dialog по определённым правилам:
Параметры | Описание |
---|---|
id | Идентификатор |
name | Название |
use-by-link | Можно ли подписывать обработчик для использования пользователем без прямых прав чтения |
name-operation | Название выполняемой операции (для отображения пользователю) |
name-process | Название процесса, в котором используется обработчик (для отображения пользователю) |
Параметры | Описание |
---|---|
lang | Язык программирования JavaScript/подключение JavaBean |
|
Теги и атрибуты: |