Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Информация
iconfalse
titleПостановка задачи

Инструкция по настройке НР- кнопки выбора документа в НР-объектное поле, через диалог добавления связей

Подсказка
iconfalse
Инструмент: Палитра XML
Свойства страницы
Статус

Статус
colourGreen
titleГОТОВО

Комментарий

панель
titleРеализация

Оглавление

панель
title<Сопроводительная информация>


Примечание
iconfalse

С точки зрения поведения является неким подобием действия update-linked-doc , за исключением того, что форма диалога захардкожена зашита на клиенте.

Создание

описанией

описания связей

Для текущего документа нужно создать описания связей, со всеми модулями, из которых возможен выбор документов.

Подключение диалога выбора связей

В схеме, по кототорой которой открывается форма/диалог добавить свойство "addLinked<Name>" со ссылкой на системную схему "SelectLinkedDocDialogResource"

Блок кода
languagexml
<schema-ref name="addLinkedDoc" ref="SelectLinkedDocDialogResource"/>

Конфигурация диалога выбора связей

  • Создать схему - наследник "LinkedDocSelectionParams<Name>" с системной схемы "LinkedDocSelectionParamsCommon". внутри созданной схемы
переопредить
  • переопределить свойства
- параметры диалога
  • :
    • title - заголовок диалога
    • allowedManual - отображать ли вкладку "вручную"
    • isManySelect - доступен ли множественный выбор
    • modules - массив идентификаторов модулей, из которых можно выбирать документы. Если можно выбирать из любых, то
нужено
    • нужно вернуть пустой массив. Тогда выбор будет ограничиваться настройками описания связей.
    • submit_caption - название кнопки для
подтверждени
    • подтверждения выбора
    • cancel_caption - название кнопки для отмены
      Значения в них задаются с помощью формул, вычисляемым при открытии.

      Блок кода
      languagexml
      titleПример
      <schemas xmlns="http://www.intertrust.ru/schema/palette/tn-schema">
        <schema name="LinkedDocSelectionParamsExample" extends="LinkedDocSelectionParamsCommon">
          <meta>
            <category name="Система\Делопроизводство"/>
            <documentation>Ресурс с 
параматрами
    • параметрами выбора документа в диалоге добавления связанного</documentation>
          </meta>
          <string name="title"
 temporal
    •  temporal="true">
            <calc-values>
              <script event="open"
 lang
    •  lang="SPEL"><![CDATA['Выберите документ из системы']]></script>
            </calc-values>
          </string>
      
    <boolean name
    •     <boolean name="allowedManual"
 temporal
    •  temporal="true">
            <calc-values>
              <script event="open"
 lang
    •  lang="SPEL"><![CDATA[false]]></script>
            </calc-values>
          </boolean>
      
    <boolean name
    •     <boolean name="isManySelect"
 temporal
    •  temporal="true">
            <calc-values>
              <script event="open"
 lang
    •  lang="SPEL"><![CDATA[true]]></script>
            </calc-values>
          </boolean>
          <string name="modules"
 array
    •  array="true"
 temporal
    •  temporal="true">
            <calc-values>
              <script event="open"
 lang
    •  lang="SPEL"><![CDATA[T(java.util.Arrays).asList("OutputDocs",
 
    •  "InternalDocs")]]></script>
            </calc-values>
          </string>
          <string name="submit_caption"
 temporal
    •  temporal="true">
            <calc-values>
              <script event="open" lang="SPEL"><![CDATA['Добавить документ']]></script>
            </calc-values>
          </string>
        </schema>
      </schemas>
  • Для созданной схемы создать форму, она не будет использоваться, но её наличие необходимо системе для вычисления
свойтсв
  • свойств схемы. В ней можно сделать, например, только поле title.

Подключение к форме/диалогу

На форме создать:

  • скрытое поле, указывающее на свойство "addLinked<Name>". В нём указывается рекалкrecalc.
  • кнопка с действием update-linked-doc и указанной схемой с параметрами "LinkedDocSelectionParams<Name>"
Блок кода
languagexml
titleПример
<!--скрытое поле -->
<field attribute-ref="addLinkedDoc" recalc="true">
	<properties>
		<hide>
			<condition>true</condition>
		</hide>
	</properties>
</field>
<!--кнопка -->
<button attribute-ref="addLinkedDoc" name="${ui.form.RkkResourceForm.section.Attributes.button.addLinkedDoc.name:Добавить документ из системы}">
	<appearance>
		<label-style width="17" unit="symbol">
			<style id="tunBtnHeader"/>
		</label-style>
	</appearance>
	<action>
		<custom>
			<update-linked-doc schema-ref="LinkedDocSelectionParamsExample"/>
		</custom>
	</action>
</button>


Доработка обработчика событий

При нажатии на кнопку будет показан диалог выбора связей с учётом заданных параметров.

Веб

Web-клиент заполнит объект со структурой SelectLinkedDocDialogResource

Предупреждение

в поле ids web-клиент кладёт не сами ID а, self-ссылки на документы

После выбора отправится запрос на

рекалк

обновление, который надо обработать в custom-event-handler

 и

и сделать с выбранным

докуменот

документом то, что нужно в конкретном случае.

Блок кода
languagejs
titleПример
function recalc(object, changedField) {
    if (changedField == 'addLinkedDoc') {
        var addLinkedDoc = values.get('addLinkedDoc');
        if (addLinkedDoc.getValues().get("ids") != null) {
            var ids = addLinkedDoc.getValues().get("ids").getValues();
            for (var i = 0; i < ids.size(); i++) {
                var unid = getIdFromHref(ids.get(i).getValue());
                System.out.println("unid = "+unid);
                if (!unid.equals("")) {
                    var rkk = appdp.getEntityByUNID(unid);
                    //rkk - выбранный в диалоге документ
                }
            }
        }
        TunableObjectHelper.putAFInstanceValue(object.tuning(), "addLinkedDoc", null);
    }
}
 
function getIdFromHref(href) {
    var index = href.lastIndexOf("/", href.length())+1;
    if (index < 0) {
        return href;
    } else {
        return href.substring(index);
    }
}