Постановка задачи
Создать действие, по нажатию на которое
Инструмент
Палитра XML
РеализацияСоздать схему диалога
Блок кода |
---|
language | xml |
---|
title | Схема диалога |
---|
|
<?xml version='1.0' encoding='UTF-8'?>
<schemas xmlns="http://www.intertrust.ru/schema/palette/tn-schema">
<schema extends="Dialog" name="CustomDialog">
<string name="message" temporal="true"/>
<string name="selectIds" temporal="true" array="true"/>
<string name="counter" temporal="true"/>
<!--Параметры диалога-->
</schema>
</schemas> |
Создать форму диалога
Блок кода |
---|
language | xml |
---|
title | Форма диалога |
---|
|
<?xml version='1.0' encoding='UTF-8'?>
<ui xmlns="http://www.intertrust.ru/schema/palette/tn-ui">
<form schema-ref="CustomDialog" id="CustomDialog" projection="default">
<properties>
<hide condition-union="AND">
<negative-condition-ref ref="dialog"/>
</hide>
</properties>
<component>
<!--Параметры диалога-->
<button name="${ui.form.CustomDialog.button.Ок:Ок}">
<action>
<system name="submit"/>
</action>
</button>
<button name="${ui.form.CustomDialog.button.Cancel:Отмена}">
<action>
<system name="cancel"/>
</action>
</button>
</component>
</form>
</ui> |
Создать handler (JS-Обработчик операций)
Блок кода |
---|
language | xml |
---|
title | Обработчик операций |
---|
|
<?xml version='1.0' encoding='UTF-8'?>
<ui xmlns="http://www.intertrust.ru/schema/palette/tn-ui">
<handler name="Новая кнопка" id="CustomHandlerName">
<meta>
<documentation></documentation>
</meta>
<script lang="JavaScript"><![CDATA[код кнопки]]></script>
</handler>
</ui> |
Блок кода |
---|
language | js |
---|
title | Шаблон кода кнопки |
---|
linenumbers | true |
---|
collapse | true |
---|
|
importClass(Packages.ru.intertrust.cmj.af.core.AFCMDomino);
importClass(Packages.ru.intertrust.cmj.af.core.AFSession);
importClass(Packages.ru.intertrust.cmj.af.utils.DominoUtils);
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);
importClass(Packages.ru.intertrust.cmj.af.tuning.AFInstanceObject);
importClass(Packages.ru.intertrust.cmj.dp.DPApplication);
importClass(Packages.org.springframework.util.CollectionUtils);
importClass(Packages.ru.intertrust.cmj.af.utils.Utils);
importClass(Packages.org.apache.commons.lang.StringUtils);
importPackage(Packages.java.util);
importPackage(Packages.java.lang);
importPackage(Packages.ru.intertrust.cmj.af.tuning.impl);
importPackage(Packages.ru.intertrust.cmj.af.tuning);
importPackage(Packages.ru.intertrust.cmj.rest.tuning);
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")) { // обработка первого пакета данных
return process_dialog(paramsResource, returnResource);
} else if (paramPackageId.equals("answer")) { // обработка данных первого диалога
return process_context(paramsResource, returnResource);
} else if (paramPackageId.equals("exit")) { // submit
return null;
}
}
function process_dialog(paramsResource, returnResource) {
var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class);
var ids = appTNObject.getClientContextIds(paramsResource.tuning());
var message = null;
message = appTNObject.composeDialog("CustomDialog", null, null, null);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "selectIds", ids);
TunableObjectHelper.putAFInstanceValue(message, "counter", "answer");
returnResource.setResource(TunableObjectREST.Resource.create(message));
return returnResource.resource;
}
function process_context(paramsResource, returnResource) {
var ids = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("selectIds"));
var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class);
var processed = 0;
var error = 0;
var updated = 0;
//Параметры
var paramSelect = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("<Name Field>"));
for (var i = 0; i < ids.size(); i++) {
var obj = appTNObject.getEntityByUNID(ids.get(i));
/*
Алгоритм
*/
try {
obj.save();
updated++;
} catch (e) {
error++;
}
processed++;
}
var resultMessage = "Результат обновление. Всего отобрано:" + processed + ". Обновлёно: " + updated + ". Ошибок: " + error;
message = appTNObject.composeDialog("dlgInfo", null, null, null);
TunableObjectHelper.putAFInstanceValue(message.tuning(), "message", resultMessage);
TunableObjectHelper.putAFInstanceValue(message, "counter", "exit");
returnResource.resource = TunableObjectREST.Resource.create(message);
return returnResource.resource;
} |
Создать схему кнопок для подключения в представление
Блок кода |
---|
|
<?xml version='1.0' encoding='UTF-8'?>
<schemas xmlns="http://www.intertrust.ru/schema/palette/tn-schema">
<schema name="NameCollection">
<meta>
<category name="Справочники"/>
</meta>
</schema>
</schemas> |
Создание форму для кнопки
Создать форму и в RootMenu создать button и подключить к нему handler
Блок кода |
---|
|
<?xml version='1.0' encoding='UTF-8'?>
<ui xmlns="http://www.intertrust.ru/schema/palette/tn-ui">
<form schema-ref="NameCollection" id="NameCollectionUI" projection="default" showtabs="true"> |
<properties>
</properties>
<component>
<section id="RootMenu">
<component>
<button name="${ui.form.NameCollectionUI.RootMenu.button.<Новая кнопка>.name:Новая кнопка}">
<action>
<custom>
<operation>
<handler-ref ref="CustomHandlerName"/>
</operation>
</custom>
</action>
</button>
</component>
</section>
</component>
</form>
</ui> |
Подключить форму к дескриптору
Блок кода |
---|
<?xml version='1.0' encoding='UTF-8'?>
<catalog xmlns="http://www.intertrust.ru/schema/palette/cat-ui">
<custom-descriptor ident="<Module>" view="<Collection>" id="<Id>" name="<Название>" style="default">
<builder name="CustomBuilder"/>
<table>
<columns>
<!-- Описание колонок -->
</columns>
</table>
<custom-actions schema-ref="NameCollectionUI"/>
</custom-descriptor>
</catalog> |