Сравнение версий
по сравнению с
Ключ
- Эта строка добавлена.
- Эта строка удалена.
- Изменено форматирование.
Постановка задачи
Создать действие, по нажатию на которое выполняется массовая операция над выделенными объектами
Подсказка | ||
---|---|---|
| ||
Инструмент: Палитра XML |
Свойства страницы | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Реализация
Создать схему диалога
Блок кода language 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>
Создать форму диалога
Блок кода language xml <?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 <?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
Блок кода language xml <?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>
панель | ||
---|---|---|
| ||