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

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

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Информация
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
Блок кода
languagejs
titleПример
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 
Экземпляр класса TunableObjectREST.Resource, при первом вызове содержит данные о том, сколько и какие документы выделены, при последующий вызовах это ресурс диалога, в котором было произведено действие submit. Также содержит свойство "counter"  которое нужно для определения того, на каком шаге сценария операции находимся. При первом вызове свойство counter= "context", при последующих действиях оно определяется вручную(можно кодом положить нужное значение).
returnResource 

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

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

function process(paramsResource, returnResource)

Предупреждение
iconfalse

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

Функция вызывается при первом нажатии кнопки и при последующих нажатиях кнопки с 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.    

Примечание
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
Свойства страницы
Статус

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

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

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

Оглавление