Дерево страниц
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">
    <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>