Skip to end of metadata
Go to start of metadata
Постановка задачи
Создать действие, по нажатию на которое выполняется массовая операция над выделенными объектами
Инструмент
Палитра XML
Реализация
Создать схему диалога
<?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>
Создать форму диалога
<?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-Обработчик операций)
<?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>
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>