сохраниться
);
importClass(<Название класса>
importPackage(<Название пакета>);
<Custom Dialog>
<Custom Dialog>
<Handler Name>
Палитра XML
Реализация
Создать handler (JS-Обработчик операций)
Создать схему диалога
Блок кода | ||||
---|---|---|---|---|
| ||||
<?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">
<meta>
<documentation>Заголовок диалога</documentation>
</meta>
</string>
<string name="selectIds" temporal="true" array="true">
<meta>
<documentation>Выбранные идентификаторы объектов</documentation>
</meta>
</string>
<string name="counter" temporal="true">
<meta>
<documentation>Счетчик диалогов</documentation>
</meta>
</string >
<string name="comment" temporal="true">
<meta>
<documentation>Комментарий</documentation>
</meta>
</string>
<string name="versionContext" temporal="true">
<meta>
<documentation>Текущая версия объекта</documentation>
</meta>
</string>
</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>
<field attribute-ref="message">
<properties>
<read-only condition-union="AND">
<condition>true</condition>
</read-only>
</properties>
</field>
<field attribute-ref="comment">
<hint-in-field>${ui.form.CustomDialog.field.Comment.name:Комментарий}</hint-in-field>
<appearance multiline="true">
<limit height="4" max-lenght="510"/>
</appearance>
</field>
<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.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.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.dp.DPApplication);
importClass(Packages.ru.intertrust.cmj.rest.rkk.RkkResource);
importClass(Packages.ru.intertrust.cmj.af.utils.BeansUtils);
importClass(Packages.ru.intertrust.cmj.af.misc.AFDateTime);
importPackage(Packages.ru.intertrust.cmj.af.utils);
importPackage(Packages.ru.intertrust.cmj.af.tuning);
importPackage(Packages.ru.intertrust.cmj.rest.tuning);
importPackage(Packages.java.util);
importPackage(Packages.java.lang |
);
|
|
/**
* Стартовая функция
*/
function process(paramsResource, returnResource) {
if (paramsResource == null) {
throw new IllegalArgumentException("paramsResource must no be null.");
}
var systemNames = ['ClientContextRequest',' |
CustomDialog','dlgInfo','dlgError','dlgWarning']; paramSchemaName = paramsResource.tuning().getSchema().getName(); var paramPackageId = ""; if (systemNames.indexOf(paramSchemaName)!=-1) { paramPackageId = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("counter")); } else { paramPackageId = "contextWithResource"; } if (paramPackageId.equals("context")) { createContextResourceRequest(returnResource); //Создание открытого контекстного объекта } else if (paramPackageId.equals("contextWithResource")) { process_dlgCustom(paramsResource, returnResource); //Вызов кастомного диалога } else if (paramPackageId.equals("answer")) { process_context(paramsResource, returnResource); //Основная обработка объекта } else if (paramPackageId.equals("exit")) { process_refresh(paramsResource, returnResource); //Выход и обновление объекта } } /** * Инициализация контекста открытого документа * @return возвращение контекста открытого документа */ function createContextResourceRequest(returnResource) { var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class); var afObjectContextRequest = appTNObject.createClientContextRequest(TunableObjectApplication.ClientContextKey.resourceid, TunableObjectApplication.ClientContextKey.resource); TunableObjectHelper.putAFInstanceValue(afObjectContextRequest, "counter", "contextWithResource"); returnResource.setResource(TunableObjectREST.Resource.create(afObjectContextRequest)); } /** * Обновление документа * @param paramsResource * @return ресурс первого диалога сценария */ function process_refresh(paramsResource, returnResource) { var ids = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("selectIds")); var appdp = AFSession.get().getApplication(DPApplication.class); var obj = appdp.getEntityByUNID(ids.get(0)); var res = RkkResource.valueOf(obj); returnResource.setResource(res); } /** * Проверка объекта на актуальность * @id идентификатор объекта * @version текущая версия контекста * @return статус актуальности */ function isActualObject(id, version){ var versionObj = ""; var appdp = AFSession.get().getApplication(DPApplication.class); var obj = appdp.getEntityByUNID(id); var versionParts = version.split('$$'); var versionContext = versionParts[0]; if (obj != null){ versionObj = obj.getVersionStamp().toString(); } return versionContext == versionObj; } /** * Диалог Информации * @ids текущий идентификатор документа * @resultMessage сообщение * @return ресурс */ function process_dlginfo(ids, resultMessage,returnResource){ var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class); var message = appTNObject.composeDialog("dlgInfo", null, null, null); TunableObjectHelper.putAFInstanceValue(message.tuning(), "selectIds", ids); TunableObjectHelper.putAFInstanceValue(message.tuning(), "message", resultMessage); TunableObjectHelper.putAFInstanceValue(message, "counter", "exit"); returnResource.resource = TunableObjectREST.Resource.create(message); return returnResource.resource; } /** * Диалог Предупреждение * @ids текущий идентификатор документа * @resultMessage сообщение * @return ресурс */ function process_dlgWarning(ids, resultMessage,returnResource){ var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class); var message = appTNObject.composeDialog("dlgWarning", null, null, null); TunableObjectHelper.putAFInstanceValue(message.tuning(), "selectIds", ids); TunableObjectHelper.putAFInstanceValue(message.tuning(), "message", resultMessage); TunableObjectHelper.putAFInstanceValue(message, "counter", "exit"); returnResource.resource = TunableObjectREST.Resource.create(message); return returnResource.resource; } /** * Диалог Ошибка * @ids текущий идентификатор документа * @resultMessage сообщение * @return ресурс */ function process_dlgError(ids, resultMessage,returnResource){ var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class); var message = appTNObject.composeDialog("dlgEror", null, null, null); TunableObjectHelper.putAFInstanceValue(message.tuning(), "selectIds", ids); TunableObjectHelper.putAFInstanceValue(message.tuning(), "message", resultMessage); TunableObjectHelper.putAFInstanceValue(message, "counter", "exit"); returnResource.resource = TunableObjectREST.Resource.create(message); return returnResource.resource; } /** * Вывод настраиваемого диалога * @param paramsResource * @return ресурс первого диалога сценария */ function process_dlgCustom(paramsResource, returnResource) { var appTNObject = AFSession.get().getApplication(TunableObjectApplication.class); var id = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("$id")); //id объекта открытого в web var ids = Utils.newArrayList(); ids.add(id); //Проверка на актуальность документа var version = paramsResource.getVersion(); if (!isActualObject(ids.get(0), version)){ process_dlginfo(ids,"<>",returnResource); return returnResource.resource; } //Кастомный диалог var message = appTNObject.composeDialog(" |
CustomDialog", null, null, null); TunableObjectHelper.putAFInstanceValue(message.tuning(), "message", "Комментарий:"); TunableObjectHelper.putAFInstanceValue(message.tuning(), "selectIds", ids); TunableObjectHelper.putAFInstanceValue(message.tuning(), "versionContext", version); TunableObjectHelper.putAFInstanceValue(message, "counter", "answer"); returnResource.setResource(TunableObjectREST.Resource.create(message)); } /** * Обработка данных * @param paramsResource * @return ресурс */ function process_context(paramsResource, returnResource) { var ids = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("selectIds")); //Идентификатор отрытого объекта var comment = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("comment")); //Комментарий из кастомного диалога var version = TunableObjectHelper.getAFInstanceValue(paramsResource.tuning().getValues().get("versionContext")); //Версия открытого объекта var appdp = AFSession.get().getApplication(DPApplication.class); var obj = appdp.getEntityByUNID(ids.get(0)); //Проверка на актуальность документа if (!isActualObject(ids.get(0), version)){ process_dlgWarning(ids,"Данная версия объекта/документа была изменена. Требуется обновить документ!",returnResource); return returnResource.resource; } /* Алгоритм */ //Проверка при сохранении try { obj.save(); } catch (e) { process_dlgError(ids,"Произошел конфликт при сохранении документа. Требуется обновить документ!",returnResource); return returnResource.resource; } } |
Добавить кастомную кнопку и подключить кастомную операцию
- В форме создать секцию RootMenu
В RootMenu создать button и подключить к нему handler
Информация | ||
---|---|---|
| ||
https://conf.inttrust.ru:8443/pages/viewpage.action?pageId=59704445 |
Блок кода | ||
---|---|---|
| ||
<section id="RootMenu">
<component>
<button name="${<Form Name>.RootMenu.button.<Name>:Новая кнопка}">
<icon code="37"/>
<action>
<custom>
<operation>
<handler-ref ref=" |
CustomHandlerName"/> </operation> </custom> </action> </button> </component> </section> |