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

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

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Информация
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="true">
            <calc-values>
              <script event="open" lang="SPEL"><![CDATA['Выберите документ из системы']]></script>
            </calc-values>
          </string>
          <boolean name="allowedManual" temporal="true">
            <calc-values>
              <script event="open" lang="SPEL"><![CDATA[false]]></script>
            </calc-values>
          </boolean>
          <boolean name="isManySelect" temporal="true">
            <calc-values>
              <script event="open" lang="SPEL"><![CDATA[true]]></script>
            </calc-values>
          </boolean>
          <string name="modules" array="true" temporal="true">
            <calc-values>
              <script event="open" lang="SPEL"><![CDATA[T(java.util.Arrays).asList("OutputDocs", "InternalDocs")]]></script>
            </calc-values>
          </string>
          <string name="submit_caption" 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);
    }
}