Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Информация
iconfalse

Корневой элемент handler, async-handler. Пространство имен: <ui xmlns="http://www.intertrust.ru/schema/palette/tn-ui">

Информация
iconfalse
titleКраткое описание

Используется для подключения JavaBean или написание JavaScript кода

Блок кода
languagexml
titleСтруктура XML
collapsetrue
<?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>	

handler

attributes

ПараметрыОписание

id

Идентификатор

name

Название
Можно ли подписывать обработчик для использования пользователем без прямых прав чтения

script

ПараметрыОписание

lang

Язык программирования JavaScript/подключение JavaBean
function
Параметры/Функции
code
Описание
languagejs
collapsetrue
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 - экземпляр
paramsResource 
Экземпляр класса TunableObjectREST.Resource, при первом
вызове содержит данные
вызове содержит данные о том, сколько и какие документы выделены, при последующий вызовах это ресурс диалога, в котором было произведено действие submit. Также содержит
свойство 
свойство "counter"  которое нужно для определения того, на каком шаге сценария операции находимся.
 При
При первом вызове свойство counter= "context", при последующих действиях оно определяется вручную(можно кодом положить нужное значение).
returnResource - экземпляр класса TunableObjectREST
returnResource 

Экземпляр класса TunableObjectREST.ReturnParamsResource, содержит в себе единственное поле -

 resource

resource, в которое нужно установить либо:

  1. ресурс диалога c mode=dialog(в таком случае клиент покажет диалог), или какого-либо другого объекта, например, РКК(в таком случае клиент откроет объект с mode=read);
  2. null, что будет означать что операция завершена(в таком случае для кнопки на открытой форме документа клиент закроет документ, для кнопки в представлении клиент оставит открытым представление). Это поле обязательно нужно заполнить перед выходом из функции process(paramsResource, returnResource). 
ПараметрыОписание
process

function process(paramsResource, returnResource)

- название функции менять нельзя

Функция вызывается при первом нажатии кнопки и при последующих нажатиях кнопки с action=submit в диалогах операции. 

Через параметр returnResource.resource должна передать диалог/null клиенту. В общем случае используется для вызова нужной функции в зависимости от шага сценария.

process_
context
<name>

function process_

context(paramsResource, returnResource)

Функция вызывается из process(paramsResource, returnResource) при первом вызове, в ней формируется ресурс диалога с нужным значением в поле "counter"  и кладется в поле returnResource.resource

process_<dialog_name>
function process_<dialog_name>

<name>(paramsResource, returnResource)

Функция вызывается из process(paramsResource, returnResource) при определенном значении поля "counter". Переподбирается один или несколько объектов(по полю ids), в зависимости от того, на основании  данных пришедшего диалога, над объектами проводятся определенные действия, включая сохранение.  Заполняется поле returnResource.resource.    

Примечание
iconfalse
titleСоздание схем и секций диалогов в соответствии со сценарием операции
.

Для добавления диалога создаётся схема и секция с mode=dialog по определённым правилам:

  1. схема должна наследоваться с ClientContextRequest;
  2. в схеме в общем случае должно присутствовать поле, в котором будут храниться и передаваться следующему диалогу id-выбранных документов.
  3. секция должна быть с условием применения "dialog", 
  4. в корне секции должна быть как минимум одна кнопка c действием "submit" или "cancel".
  5. можно делать несколько кнопок submit, но тогда они должны быть привязаны к разным свойствам boolean схемы. При нажатии кнопки клиент установит значение true в соответствующем полe.
  6. Если требуется при определенном условии показать пользователю "красиво оформленное" сообщение об ошибке, то можно это сделать также с помощью диалога.

async-handler

Асинхронный процесс - последовательность операций(шагов), в которой результат работы одной операции сохраняется на сервере для использования следующей операцией, причём переход к следующей операции(шагу) в общем случае инициируется пользователем.

attributes

ПараметрыОписание

id

Идентификатор

name

Название

use-by-link

Можно ли подписывать обработчик для использования пользователем без прямых прав чтения

name-operation

Название выполняемой операции (для отображения пользователю)

name-process

Название процесса, в котором используется обработчик (для отображения пользователю)

script

ПараметрыОписание

lang

Язык программирования JavaScript/подключение JavaBean
Функции/МетодыОписание
paramsResource 
Экземпляр класса TunableObjectREST.Resource, при первом вызове содержит данные о том, сколько и какие документы выделены, при последующий вызовах это ресурс диалога, в котором было произведено действие submit. Также содержит свойство "counter"  которое нужно для определения того, на каком шаге сценария операции находимся. При первом вызове свойство counter= "context", при последующих действиях оно определяется вручную(можно кодом положить нужное значение).
processAsync

function processAsync(String monitorId)

Функция вызывается при первом нажатии кнопки.

process_<name>

function process_<name>(String monitorId)

Функция вызывается из processAsync(monitorId)

rollback

function rollback(String monitorId)

Запускает код откатывающий изменения, произведенные обработчиком если это необходимо и возможно.  Этот метод вызывается в случае если процесс был прерван или если в обработчике была возникла ошибка. 

Примечание
iconfalse

Весь обмен данными происходит через так называемый монитор процесса. На вход обработчика поступает ID монитора, и на выходе из обработчика Tunable-ресурс не возвращается, а записывается в монитор

Свойства страницы
Статус

Статус
colourGreen
titleГОТОВО

Комментарий
панель

Теги и атрибуты:

Оглавление