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

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

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Информация
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);
    }
}