Дерево страниц
Skip to end of metadata
Go to start of metadata

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 7 Следующий »

Статус

ГОТОВО

Автор
Комментарий

На этой странице:



Постановка задачи

Создать действие, по нажатию на которое 

Инструмент

Палитра XML

Реализация

  1. Создать схему диалога

    <?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>
  2. Создать форму диалога

    <?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>
  3. Создать 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;
    } 
  4. Создать схему кнопок для подключения в представление

    <?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>
  5. Создать форму и в 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>
  6. Подключить форму к дескриптору

    <?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>


  • Нет меток