Скриптинг в формах
------------------

Основные требования и некоторые детали задачи описаны в
соответствующей постановке: `«Скриптинг в формах» <http://tdd.lan.arta.kz/docs/additional/statements/3/html/forms63.html>`_

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

Примеры использования скриптинга см. `здесь <http://tdd.lan.arta.kz/docs/synergy/tags/wilkes/sdk-doc/html/extfp-usecases/extfp-usecases.html>`_

**Используемые технологии и библиотеки:**

*   `jQuery`
*   `Underscore` - утилиты
*   `Backbone` - UI компоненты
*   `Marionette` - UI компоненты
*   `jQuery ui` - UI компоненты
*   `math.js` - поддержка математики больших чисел
*   `base64.js` - добавляет методы btoa, atob для браузеров,
    в которых их нет (в частности IE 9, 10)
*   `XregExp.js` - поддержка более сложных регулярных
    выражений

**Схемы работы проигрывателя:**

.. figure:: _static/img/schema_1.png

    Общая схема работы проигрывателя

.. figure:: _static/img/schema_2.png

    Процесс изменения модели

.. figure:: _static/img/schema_3.png

    Процесс изменения значения компонента

.. figure:: _static/img/schema_4.png

    Взаимодействие со средой

**Общедоступные объекты:**

*   ``AS`` - общее пространство имен
*   ``AS.FORMS`` - формы
*   ``AS.COMPONENTS`` - компоненты, которые могут быть использованы отдельно от проигрывателя форм
*   ``AS.SERVICES`` - сервисы
*   ``AS.LOGGER`` - логгер
*   ``AS.OPTIONS`` - настройки
*   ``AS.DICTIONARIES`` - кэш справочников

**Типы событий:**

*   ``formShow : 'formShow'`` - отображение формы
    (построение новой формы)

*   ``formDestroy : 'formDestroy'`` - метод `destroy`_ модели проигрывателя

*   ``dataLoad: 'dataLoad'`` - подгрузка данных

*   ``valueChange: 'valueChange'`` - изменение значения
    модели

*   ``markInvalid : 'markInvalid'`` - необходимость отображению подсветить невалидное значение

*   ``tableRowAdd: 'tableRowAdd'`` - добавление ряда в таблице

*   ``tableRowDelete: 'tableRowDelete'`` - удаление ряда в таблице

*   ``dictionaryLoad : 'dictionaryLoad'`` - подгрузка справочника

*   ``tagEdit : 'tagEdit'`` - редактирование тега

*   ``tagDelete : 'tagDelete'`` - удаление тега

*   ``loadComponentAdditionalInfo : 'loadComponentAdditionalInfo'`` -
    подгрузка дополнительной информации компонента (сейчас
    используется для пользовательского компонента)

**Особенности реализации:**

В области видимости скрипта (добавленный как к компоненту,
так и пользовательскому компоненту) имеются следующие
переменные:

*   ``model`` - модель текущего компонента;
*   ``view`` - отображение текущего компонента;
*   ``editable`` - режим (просмотр / редактирование);
*   ``model.playerModel`` - модель проигрывателя;
*   ``view.playerView`` - отображение проигрывателя.

Скрипт (добавленный как к компоненту, так и пользовательскому
компоненту) выполняется каждый раз при смене режима
проигрывателя (просмотр - редактирование). При этом *модель*
компонента остается та же, а *отображение* компонента каждый
раз пересоздается. Поэтому при написании скриптов следует
учесть следующее: если добавляются или переписываются методы
модели, либо происходит подписывание на события другой модели,
то рекомендуется использовать следующее:

.. code-block:: javascript
  :linenos:

  if (!model.inited)
    {
      //манипулирование моделями
      model.inited = true;
    }

**"Строгий режим" JavaScript:**

Начиная с версии Synergy 3.14, все пользовательские скрипты
выполняются с добавлением директивы `use strict`. Эта директива
означает, что соответствующий ей код будет выполнятся в так
называемом **"строгом режиме"**, поддерживающем стандарт `JavaScript`
`ECMAScript5 <http://www.ecma-international.org/publications/standards/Ecma-262.htm>`_

.. warning:: Если код скрипта содержит конструкции, не соответствующие стандарту ES5, то они не будут выполняться. Это не является ошибкой Synergy.

#### Создание экземпляра проигрывателя и его методы {#integration.methods.form_scripting.asforms}

Для того, чтобы создать экземпляр проигрывателя, необходимо вызвать
метод ``AS.FORMS.createPlayer()``.

Методы проигрывателя
~~~~~~~~~~~~~~~~~~~~

.. js:function:: showFormByCode(formCode[,version])

    Отображает форму по ее коду, без создания соответствующего экземпляра asfData

    :param string formCode: Код формы.
    :param number version: Версия формы.

.. js:function:: showFormData(formUUID[, version[, dataUUID[, dataVersion]]])

    Отображает форму

    :param string formUUID: Идентификатор формы.
    :param number version: Номер версии формы.
    :param string dataUUID: Идентификатор данных формы.
    :param number dataVersion: Номер версии данных формы.

.. js:function:: saveFormData(callback)

    Сохраняет данные формы

    :param callback: Функция, которая будет вызвана после сохранения данных с параметром asfDataUUID.

.. js:function:: dataLoaded(definition[,data])

    Построение формы согласно definition и заполнение asfData значением параметра data
    Вспомогательный метод, вызывающийся при выполнении методов `showFormData`_ и `showFormByCode`_.

    :param string definition: Описание формы в формате JSON.
    :param string data: Данные формы в форме JSON.

.. js:function:: destroy()

    Удаляет экземпляр проигрывателя

#### Базовые модели и отображения {#integration.methods.form_scripting.base}

Базовая модель.

+-----------------------+----------------------+------------------------------+
| Наименование          | Тип                  | Описание                     |
+=======================+======================+==============================+
| asfProperty           | asfProperty          | Определение компонента из    |
|                       |                      | описания формы               |
+-----------------------+----------------------+------------------------------+
| playerModel           | AS.FORMS.PlayerModel | Модель проигрывателя         |
+-----------------------+----------------------+------------------------------+

Базовые свойства модели.

+-----------------------+----------------------+------------------------------+
| Наименование          | Аргумент             | Описание                     |
+=======================+======================+==============================+
| getErrors             |                      | Получение ошибок заполнения  |
|                       |                      | поля согласно настройкам     |
|                       |                      | `asfProperty`                |
+-----------------------+----------------------+------------------------------+
| isEmpty               |                      | Пустое ли значение           |
+-----------------------+----------------------+------------------------------+
| getLocale             |                      | Получение локали,            |
|                       |                      | настроенной в компоненте     |
+-----------------------+----------------------+------------------------------+
| isValid               |                      | Валидно ли текущее значение  |
|                       |                      | модели согласно настройкам   |
|                       |                      | `asfProperty`                |
+-----------------------+----------------------+------------------------------+
| fireChangeEvents      |                      | Вызов событий изменения      |
|                       |                      | значения формы               |
+-----------------------+----------------------+------------------------------+
| getHTMLValue          |                      | Получение HTML-представления |
|                       |                      | текстового значения поля     |
|                       |                      | со стилями                   |
+-----------------------+----------------------+------------------------------+
| doSetValue            | newValue             | Вставить новое значение и    |
|                       |                      | отправить уведомление всем   |
|                       |                      | подписанным объектам, в т.ч. |
|                       |                      | отображению                  |
+-----------------------+----------------------+------------------------------+
| getValue              |                      | Получение значения           |
+-----------------------+----------------------+------------------------------+
| getTextValue          |                      | Получение текстового         |
|                       |                      | значения                     |
+-----------------------+----------------------+------------------------------+
| getAsfData            | Int blockNumber      | Получение `asfData` с        |
|                       |                      | указанным номером блока      |
|                       |                      | (если это компонент          |
|                       |                      | статической таблицы, то      |
|                       |                      | передавать эту переменную    |
|                       |                      | не нужно)                    |
+-----------------------+----------------------+------------------------------+
| setAsfData            | asfData              | Вставить значение `asfData`  |
+-----------------------+----------------------+------------------------------+

> Примечание.
>
> `getErrors` возвращает массив ошибок. Если массив
> пустой, значит ошибки отсутствуют, иначе - его
> элементы имеют поля:
>
> * `errorCode` - код ошибки;
> * `id` - идентификатор компонента.
>
> Возможные коды ошибок:
>
> * `emptyValue`
> * `wrongValue`
> * `deletedValue`
> * `valueTooHigh`
> * `valueTooSmall`
>
> Для одного и того же компонента может быть как
> несколько ошибок, так может и не быть ни одной.

Базовое отображение.

+-----------------------+----------------------+------------------------------+
| Наименование          | Тип                  | Описание                     |
+=======================+======================+==============================+
| model                 | Наследует            | Модель                       |
|                       | AS.FORMS.Model       |                              |
+-----------------------+----------------------+------------------------------+
| container             | div                  | Контейнер, в котором будет   |
|                       |                      | отрисовываться отображение   |
+-----------------------+----------------------+------------------------------+
| input                 | input                | Поле ввода для некоторых     |
|                       |                      | компонентов:                 |
|                       |                      |                              |
|                       |                      | *  текстовое поле            |
|                       |                      | *  числовое поле             |
|                       |                      | *  многострочный текст       |
+-----------------------+----------------------+------------------------------+
| playerView            |                      | Отображение проигрывателя    |
+-----------------------+----------------------+------------------------------+

Базовые методы отображения.

+-----------------------+----------------------+------------------------------+
| Наименование          | Аргумент             | Описание                     |
+=======================+======================+==============================+
| unmarkInvalid         |                      | Убрать пометку неправильно   |
|                       |                      | заполненного поля            |
+-----------------------+----------------------+------------------------------+
| markInvalid           |                      | Пометить поле как            |
|                       |                      | неправильно заполненное      |
+-----------------------+----------------------+------------------------------+
| checkValid            |                      | Проверить корректность       |
|                       |                      | текущего значения (если      |
|                       |                      | поле заполнено неверно, то   |
|                       |                      | вызовется метод              |
|                       |                      | `markInvalid`)               |
+-----------------------+----------------------+------------------------------+
| setEnabled            | boolean enabled      | Сделать доступным или        |
|                       |                      | недоступным для              |
|                       |                      | редактирования               |
+-----------------------+----------------------+------------------------------+
| setVisible            | boolean visible      | Сделать видимым или          |
|                       |                      | невидимым                    |
+-----------------------+----------------------+------------------------------+
| updateValueFromModel  |                      | Обновить отображение         |
|                       |                      | согласно значению модели     |
+-----------------------+----------------------+------------------------------+

> Примечание.
>
> Если скрывается последний компонент в строке, то
> вся строка принимает минимальную высоту 18 px.

#### Модели и отображения, которые не имеют специфичных свойств или переопределения методов {#integration.methods.form_scripting.non_specific}

*   `AS.FORMS.DocAttributeModel` - модель компонента
    «Свойства документа»;
*   `AS.FORMS.DocAttributeView` - отображение компонента
    «Свойства документа»;
*   `AS.FORMS.DocLinkModel` - модель компонента «Ссылка
    на документ»;
*   `AS.FORMS.DocLinkTextView` - отображение компонента
    «Ссылка на документ» в режиме редактирования
*   `AS.FORMS.DocLinkView` - отображение компонента
    «Ссылка на документ» в режиме просмотра;
*   `AS.FORMS.ImageModel` - модель компонента
    «Изображение»;
*   `AS.FORMS.ImageView` - отображение компонента
    «Изображение»;
*   `AS.FORMS.LabelModel` - модель компонента
    «Неизменяемый текст»;
*   `AS.FORMS.LabelView` - отображение компонента
    «Неизменяемый текст»;
*   `AS.FORMS.SimpleModel` - модель компонентов
    «Многострочное поле», «Номер», «HTD-редактор»,
    «Ход выполнения», «Лист резолюций», «Лист
    подписей»;
*   `AS.FORMS.TextBoxModel` - модель текстового поля.

#### Модели и отображения, которые имеют специфичные свойства или методы {#integration.methods.form_scripting.specific}

**Модели и отображения проигрывателя.**

*   `AS.FORMS.PlayerModel` - модель проигрывателя

Свойства:

+-----------------------+----------------------+------------------------------+
| Наименование          | Тип                  | Описание                     |
+=======================+======================+==============================+
| models                | Массив               | Массив моделей страниц       |
|                       | AS.FORMS.TableModel  |                              |
+-----------------------+----------------------+------------------------------+
| errorDataLoad         | boolean              | `true` - если описание формы |
|                       |                      | содержит ошибки              |
+-----------------------+----------------------+------------------------------+
| formId                | string               | Идентификатор формы          |
+-----------------------+----------------------+------------------------------+
| asfDataId             | string               | Идентификатор данных         |
+-----------------------+----------------------+------------------------------+
| nodeId                | string               | Идентификатор ноды данных    |
+-----------------------+----------------------+------------------------------+
| hasChanges            | boolean              | Имеются ли изменения         |
+-----------------------+----------------------+------------------------------+
| formName              | string               | Наименование формы           |
+-----------------------+----------------------+------------------------------+
| formats               | string               | Форматы печати               |
+-----------------------+----------------------+------------------------------+
| defaultPrintFormat    | string               | Формат печати по умолчанию   |
+-----------------------+----------------------+------------------------------+
| hasMobile             | boolean              | Имеется ли мобильное         |
|                       |                      | представление                |
+-----------------------+----------------------+------------------------------+
| hasPrintable          | boolean              | Имеется ли печатное          |
|                       |                      | представление                |
+-----------------------+----------------------+------------------------------+
| formCode              | string               | Код формы                    |
+-----------------------+----------------------+------------------------------+

Методы:

+-----------------------+----------------------+------------------------------+
| Наименование          | Аргумент             | Описание                     |
+=======================+======================+==============================+
| buildModelsDefinition | definition           | Построить форму по описанию  |
+-----------------------+----------------------+------------------------------+
| getModelWithId        | cmpId, tableId,      | Получение модели компонента  |
|                       | tableBlockIndex      | с указанным идентификатором  |
|                       |                      | в указанной таблице и        |
|                       |                      | указанном блоке, если        |
|                       |                      | идентификатор таблицы не     |
|                       |                      | указан, то ищется модель     |
|                       |                      | компонента на странице или в |
|                       |                      | статических таблицах         |
+-----------------------+----------------------+------------------------------+

*   `AS.FORMS.PlayerView` - отображение проигрывателя

Свойства:

+-------------------+--------------------------+------------------------------+
| Наименование      | Тип                      | Описание                     |
+===================+==========================+==============================+
| view              | Массив                   | Массив отображений страниц   |
|                   | AS.FORMS.TableStaticView |                              |
+-------------------+--------------------------+------------------------------+
| editable          | boolean                  | `true` - если описание формы |
|                   |                          | содержит ошибки              |
+-------------------+--------------------------+------------------------------+

Методы:

+-----------------------+----------------------+------------------------------+
| Наименование          | Аргумент             | Описание                     |
+=======================+======================+==============================+
| setEditable           | Boolean editable     | Устанавливает режим          |
|                       |                      | отображения чтение/запись    |
+-----------------------+----------------------+------------------------------+
| getViewWithId         | cmpId, tableId,      | Получение отображения        |
|                       | tableBlockIndex      | компонента с указанным       |
|                       |                      | идентификатором в указанной  |
|                       |                      | таблице и указанном блоке,   |
|                       |                      | если идентификатор таблицы   |
|                       |                      | не указан, то ищется модель  |
|                       |                      | компонента на странице или в |
|                       |                      | статических таблицах         |
+-----------------------+----------------------+------------------------------+
| appendTo              | HTML element         | Отображает проигрыватель в   |
|                       |                      | заданном компоненте          |
+-----------------------+----------------------+------------------------------+
| destroy               |                      |                              |
+-----------------------+----------------------+------------------------------+

**Модели и отображения компонентов.**

*   [«Страница» и «Таблица»](#integration.methods.form_scripting.table)
*   [«Числовое поле»](#integration.methods.form_scripting.numeric_field)
*   [«Выпадающий список», «Выбор вариантов», «Переключатель вариантов»](#integration.methods.form_scripting.combobox_checkbox_radiobutton)
*   [«Дата/время»](#integration.methods.form_scripting.date_time)
*   [«Файл»](#integration.methods.form_scripting.file)
*   [«Ссылка»](#integration.methods.form_scripting.link)
*   [«Пользователь»](#integration.methods.form_scripting.user)
*   [«Должность»](#integration.methods.form_scripting.position)
*   [«Подразделение»](#integration.methods.form_scripting.department)
*   [«Период повторения»](#integration.methods.form_scripting.repeat_period)
*   [«Ссылка на проект»](#integration.methods.form_scripting.project_link)
*   [«Ссылка на реестр»](#integration.methods.form_scripting.registry_link)
*   [«Ссылка на адресную книгу»](#integration.methods.form_scripting.address_book)
*   [«Ссылка на файл в хранилище»](#integration.methods.form_scripting.file_storage)

##### Модели и отображения компонентов «Страница» и «Таблица» {#integration.methods.form_scripting.table}

*   `AS.FORMS.TableModel` - модель компонентов
    «Страница» и «Таблица»

Методы:

+-----------------------+----------------------+------------------------------+
| Наименование          | Аргумент             | Описание                     |
+=======================+======================+==============================+
| createRow             |                      | Добавляет блок таблицы       |
+-----------------------+----------------------+------------------------------+
| removeRow             | Номер блока          | Удаляет блок таблицы         |
+-----------------------+----------------------+------------------------------+
| getTextValue          |                      | Возвращает форматированное   |
|                       |                      | значение свертки             |
+-----------------------+----------------------+------------------------------+
| isHaveHeader          |                      | Есть ли заголовок            |
+-----------------------+----------------------+------------------------------+
| isPage                |                      | Является ли страницей        |
+-----------------------+----------------------+------------------------------+
| isStatic              |                      | Является ли статической      |
|                       |                      | таблицей                     |
+-----------------------+----------------------+------------------------------+
| isParagraph           |                      | Включена ли свертка          |
+-----------------------+----------------------+------------------------------+

*   `AS.FORMS.TableStaticView` - отображение
    статической таблицы

Методы:

+-----------------------+----------------------+------------------------------+
| Наименование          | Аргумент             | Описание                     |
+=======================+======================+==============================+
| getRowsCount          |                      | Возвращает количество рядов  |
|                       |                      | таблицы                      |
+-----------------------+----------------------+------------------------------+
| setColumnVisible      | Int columnNumber     | Делает столбец таблицы       |
|                       | boolean visible      | видимым / невидимым          |
+-----------------------+----------------------+------------------------------+
| getInvisibleColumns   |                      | Возвращает список невидимых  |
|                       |                      | столбцов                     |
+-----------------------+----------------------+------------------------------+
| getViewWithId         | cmpId, tableId,      | Получение отображения        |
|                       | tableBlockIndex      | компонента с указанным       |
|                       |                      | идентификатором в указанной  |
|                       |                      | таблице и указанном блоке,   |
|                       |                      | если идентификатор таблицы   |
|                       |                      | не указан, то ищется модель  |
|                       |                      | компонента на странице или в |
|                       |                      | статических таблицах         |
+-----------------------+----------------------+------------------------------+

*   `AS.FORMS.TableDynamicView` - отображение
    динамической таблицы

Методы:

+-----------------------+----------------------+------------------------------+
| Наименование          | Аргумент             | Описание                     |
+=======================+======================+==============================+
| setEnabled            |                      | Разрешает либо запрещает     |
|                       |                      | пользователю добавлять и     |
|                       |                      | удалять блоки, при этом      |
|                       |                      | программная возможность      |
|                       |                      | остается                     |
+-----------------------+----------------------+------------------------------+
| setColumnVisible      | Int columnNumber     | Делает столбец таблицы       |
|                       | boolean visible      | видимым / невидимым          |
+-----------------------+----------------------+------------------------------+
| getInvisibleColumns   |                      | Возвращает список невидимых  |
|                       |                      | столбцов                     |
+-----------------------+----------------------+------------------------------+
| getViewWithId         | cmpId, tableId,      | Получение отображения        |
|                       | tableBlockIndex      | компонента с указанным       |
|                       |                      | идентификатором в указанной  |
|                       |                      | таблице и указанном блоке,   |
|                       |                      | если идентификатор таблицы   |
|                       |                      | не указан, то ищется модель  |
|                       |                      | компонента на странице или в |
|                       |                      | статических таблицах         |
+-----------------------+----------------------+------------------------------+
| mergeCell             | * `Int Row `         | Объединяет ячейки в блоке    |
|                       | * `int column`       |                              |
|                       | * `int rowsCount`    |                              |
|                       | * `int columnCount`  |                              |
+-----------------------+----------------------+------------------------------+
| splitCell             | Row, column          | Разъединяет ячейки           |
+-----------------------+----------------------+------------------------------+
| getRowsCount          |                      | Возвращает количество рядов  |
|                       |                      | таблицы                      |
+-----------------------+----------------------+------------------------------+
| getBlocksCount        |                      | Возвращает количество блоков |
|                       |                      | таблицы                      |
+-----------------------+----------------------+------------------------------+

*   `AS.FORMS.TableParagraphView` - отображение
    динамической таблицы в свертке

##### Модели и отображения компонента «Числовое поле» {#integration.methods.form_scripting.numeric_field}

*   `AS.FORMS.NumericModel` - модель компонента
    «Числовое поле»

Формат `asfData`:

<#include "../bin/architecture/src/forms/numericinput_data.md">

*   `AS.FORMS.NumericInputView` - отображение
    компонента «Числовое поле»

##### Модели и отображения компонентов выбора {#integration.methods.form_scripting.combobox_checkbox_radiobutton}

*   `AS.FORMS.ComboBoxModel` - модель компонентов
    «Выпадающий список», «Выбор вариантов»,
    «Переключатель вариантов»

Формат `asfData` выпадающего списка:

<#include "../bin/architecture/src/forms/listbox_data.md">

Формат `asfData` выбора вариантов:

<#include "../bin/architecture/src/forms/checkbox_data.md">

Формат `asfData` переключателя вариантов:

<#include "../bin/architecture/src/forms/radiobutton_data.md">

Свойства:

+-----------------------+----------------------+------------------------------+
| Наименование          | Тип                  | Описание                     |
+=======================+======================+==============================+
| listElements          | [{value : «value1»,  | Массив всех элементов        |
|                       | key : «key1»}, ...]  | компонента не зависимо от    |
|                       |                      | фильтра                      |
+-----------------------+----------------------+------------------------------+
| listCurrentElements   | [{value : «value1»,  | Массив элементов компонента  |
|                       | key : «key1»}, ...]  | согласно фильтру, если       |
|                       |                      | таковой имеется, либо массив |
|                       |                      | всех элементов               |
+-----------------------+----------------------+------------------------------+

Методы:

+-----------------------+----------------------+------------------------------+
| Наименование          | Аргумент             | Описание                     |
+=======================+======================+==============================+
| updateModelData       |                      | Обновляет данные текущих     |
|                       |                      | элементов компонента         |
|                       |                      | согласно фильтрам            |
+-----------------------+----------------------+------------------------------+
| getTextValues         |                      | Получение массива выбранных  |
|                       |                      | текстовых значений           |
+-----------------------+----------------------+------------------------------+
| getValue              |                      | Возвращает массив выбранных  |
|                       |                      | идентификаторов              |
+-----------------------+----------------------+------------------------------+
| setValue              | Идентификатор либо   | Вставляет значение           |
|                       | массив               |                              |
|                       | идентификаторов      |                              |
+-----------------------+----------------------+------------------------------+

##### Модели и отображения компонента «Дата/время» {#integration.methods.form_scripting.date_time}

*   `AS.FORMS.DateModel` - модель компонента
    «Дата/время»

Формат `asfData`:

<#include "../bin/architecture/src/forms/date_data.md">

Методы:

+--------------+------------------------------+------------------------------+
| Наименование | Аргумент                     | Описание                     |
+==============+==============================+==============================+
| getValue     |                              | Возвращает строковое         |
|              |                              | представление даты в формате |
|              |                              | «yyyy-MM-dd HH:mm:ss»,       |
|              |                              | например 2016-05-25 16:16:16 |
+--------------+------------------------------+------------------------------+
| setValue     | Принимает строковое значение | Вставляет значение           |
|              | даты в формате               |                              |
|              | «yyyy-MM-dd HH:mm:ss»,       |                              |
|              | например 2016-05-25 16:16:16 |                              |
+--------------+------------------------------+------------------------------+

> Примечание.
>
> Значение даты хранится как строка в формате
> `yyyy-MM-dd HH:mm:ss`. Пустое значение хранится
> как `____-__-__ __:__:__` или как `null`.

*   `AS.FORMS.DateView` - отображение компонента
    «Дата/время»

##### Модели и отображения компонента «Файл» {#integration.methods.form_scripting.file}

*   `AS.FORMS.FileModel` - модель компонента
    «Файл»

Формат `asfData`:

<#include "../bin/architecture/src/forms/file_data.md">

Методы:

+--------------+------------------------------+------------------------------+
| Наименование | Аргумент                     | Описание                     |
+==============+==============================+==============================+
| getValue     |                              | Возвращает `null` либо       |
|              |                              | данные, которые имеют        |
|              |                              | следующие обязательные поля: |
|              |                              |                              |
|              |                              | * `identifier`               |
|              |                              | * `name`                     |
|              |                              | * `path`                     |
|              |                              | * `mime`                     |
|              |                              | * `fromStorage` (true/false) |
+--------------+------------------------------+------------------------------+
| setValue     | Объект с обязательными       | Вставляет значение           |
|              | полями:                      |                              |
|              |                              |                              |
|              | * `identifier`               |                              |
|              | * `name`                     |                              |
|              | * `path`                     |                              |
|              | * `mime`                     |                              |
|              | * `fromStorage` (true/false) |                              |
+--------------+------------------------------+------------------------------+

*   `AS.FORMS.FileView` - отображение компонента
    «Файл»

##### Модели и отображения компонента «Ссылка» {#integration.methods.form_scripting.link}

*   `AS.FORMS.LinkModel` - модель компонента
    «Ссылка»

Формат `asfData`:

<#include "../bin/architecture/src/forms/link_data.md">

Методы:

+-------------------+-----------------------------+-----------------------------+
| Наименование      | Аргумент                    | Описание                    |
+===================+=============================+=============================+
| getValue          |                             | Возвращает описание ссылки: |
|                   |                             |                             |
|                   |                             | * `value: «url»`            |
|                   |                             | * `key: «label; openInNew»` |
+-------------------+-----------------------------+-----------------------------+
| setValue          | Объект с полями:            | Вставляет значение          |
|                   |                             |                             |
|                   | * `value: «url»`            |                             |
|                   | * `key: «label; openInNew»` |                             |
|                   |                             |                             |
|                   | Например:                   |                             |
|                   |                             |                             |
|                   | * `value: «http://ya.ru»`   |                             |
|                   | * `key: «OPEN YA; true»`    |                             |
+-------------------+-----------------------------+-----------------------------+
| getTextValue      |                             | Возвращает подпись ссылки   |
+-------------------+-----------------------------+-----------------------------+
| isOpenInNew       |                             | Открывать ли ссылку в новом |
|                   |                             | окне                        |
+-------------------+-----------------------------+-----------------------------+
| setValueFromInput | Объект с полями:            | Обновляет значение          |
|                   |                             |                             |
|                   | * `url`                     |                             |
|                   | * `title`                   |                             |
|                   | * `openInNew`               |                             |
+-------------------+-----------------------------+-----------------------------+

*   `AS.FORMS.LinkView` - отображение компонента
    «Ссылка»

##### Модели и отображения компонента «Пользователь» {#integration.methods.form_scripting.user}

*   `AS.FORMS.UserLinkModel` - модель компонента
    «Пользователь»

Формат `asfData`:

<#include "../bin/architecture/src/forms/user_data.md">

Методы:

+----------------+--------------------------------+--------------------------------+
| Наименование   | Аргумент                       | Описание                       |
+================+================================+================================+
| getValue       |                                | Возвращает массив данных,      |
|                |                                | которые содержат обязательные  |
|                |                                | поля:                          |
|                |                                |                                |
|                |                                | * `personID` - идентификатор   |
|                |                                |   пользователя                 |
|                |                                | * `personName` - название      |
|                |                                |   пользователя                 |
|                |                                |                                |
|                |                                | а также необязательные:        |
|                |                                |                                |
|                |                                | * `positionName` - название    |
|                |                                |   должности пользователя (если |
|                |                                |   существует)                  |
|                |                                | * `customFields`:              |
|                |                                |                                |
|                |                                |     {                          |
|                |                                |     * `calendarColor` - цвет   |
|                |                                |       статуса                  |
|                |                                |     * `calendarStatusLabel` -  |
|                |                                |       текст статуса (например  |
|                |                                |       «Введен ручную»)         |
|                |                                |                                |
|                |                                |     }                          |
+----------------+--------------------------------+--------------------------------+
| getSelectedIds |                                | Возвращает массив строк -      |
|                |                                | идентификаторов выбранных      |
|                |                                | пользователей                  |
+----------------+--------------------------------+--------------------------------+
| setValue       | Объект с обязательными         |                                |
|                | полями:                        |                                |
|                |                                |                                |
|                | * `personID` - идентификатор   |                                |
|                |   пользователя                 |                                |
|                | * `personName` - название      |                                |
|                |   пользователя                 |                                |
|                |                                |                                |
|                | а также необязательные:        |                                |
|                |                                |                                |
|                | * `positionName` - название    |                                |
|                |   должности пользователя (если |                                |
|                |   существует)                  |                                |
|                | * `customFields`:              |                                |
|                |                                |                                |
|                |      {                         |                                |
|                |      * `calendarColor` - цвет  |                                |
|                |        статуса                 |                                |
|                |      * `calendarStatusLabel` - |                                |
|                |        текст статуса (например |                                |
|                |        «Введен ручную»)        |                                |
|                |                                |                                |
|                |      }                         |                                |
+----------------+--------------------------------+--------------------------------+

*   `AS.FORMS.UserLinkView` - отображение
    компонента «Пользователь»

##### Модели и отображения компонента «Должность» {#integration.methods.form_scripting.position}

*   `AS.FORMS.PositionLinkModel` - модель компонента
    «Должность»

Формат `asfData`:

<#include "../bin/architecture/src/forms/position_data.md">

Методы:

+----------------+--------------------------------+--------------------------------+
| Наименование   | Аргумент                       | Описание                       |
+================+================================+================================+
| getValue       |                                | Возвращает массив данных,      |
|                |                                | которые содержат обязательные  |
|                |                                | поля:                          |
|                |                                |                                |
|                |                                | * `elementID` - идентификатор  |
|                |                                |   должности                    |
|                |                                | * `elementName` - название     |
|                |                                |   должности                    |
|                |                                |                                |
|                |                                | а также необязательные:        |
|                |                                |                                |
|                |                                | * `departmentName` - название  |
|                |                                |   подразделения, которому      |
|                |                                |   принадлежит должность        |
|                |                                | * `status` - текст статуса     |
|                |                                |   (например, «Введен ручную»)  |
|                |                                | * `statusColor` - цвет статуса |
+----------------+--------------------------------+--------------------------------+
| getSelectedIds |                                | Возвращает массив строк -      |
|                |                                | идентификаторов выбранных      |
|                |                                | должностей                     |
+----------------+--------------------------------+--------------------------------+
| setValue       | Объект с обязательными         |                                |
|                | полями:                        |                                |
|                |                                |                                |
|                | * `elementID` - идентификатор  |                                |
|                |   должности                    |                                |
|                | * `elementName` - название     |                                |
|                |   должности                    |                                |
|                |                                |                                |
|                | а также необязательные:        |                                |
|                |                                |                                |
|                | * `departmentName` - название  |                                |
|                |   подразделения, которому      |                                |
|                |   принадлежит должность        |                                |
|                | * `status` - текст статуса     |                                |
|                |   (например, «Введен ручную»)  |                                |
|                | * `statusColor` - цвет статуса |                                |
+----------------+--------------------------------+--------------------------------+

*   `AS.FORMS.PositionLinkView` - отображение
    компонента «Должность»

##### Модели и отображения компонента «Подразделение» {#integration.methods.form_scripting.department}

*   `AS.FORMS.DepartmentLinkModel` - модель компонента
    «Подразделение»

Формат `asfData`:

<#include "../bin/architecture/src/forms/department_data.md">

Методы:

+----------------+----------------------------------+----------------------------------+
| Наименование   | Аргумент                         | Описание                         |
+================+==================================+==================================+
| getValue       |                                  | Возвращает массив данных,        |
|                |                                  | которые содержат обязательные    |
|                |                                  | поля:                            |
|                |                                  |                                  |
|                |                                  | * `departmentId` - идентификатор |
|                |                                  |   подразделения                  |
|                |                                  | * `departmentName` - название    |
|                |                                  |   подразделения                  |
|                |                                  |                                  |
|                |                                  | а также необязательные:          |
|                |                                  |                                  |
|                |                                  | * `parentName` - название        |
|                |                                  |   подразделения, которому        |
|                |                                  |   принадлежит должность          |
|                |                                  | * `hasChildren` - имеются ли     |
|                |                                  |   дочерние подразделения         |
|                |                                  | * `status` - текст статуса       |
|                |                                  |   (например, «Введен ручную»)    |
|                |                                  | * `statusColor` - цвет статуса   |
+----------------+----------------------------------+----------------------------------+
| getSelectedIds |                                  | Возвращает массив строк -        |
|                |                                  | идентификаторов выбранных        |
|                |                                  | подразделений                    |
+----------------+----------------------------------+----------------------------------+
| setValue       | Объект с обязательными           |                                  |
|                | полями:                          |                                  |
|                |                                  |                                  |
|                | * `departmentId` - идентификатор |                                  |
|                |   подразделения                  |                                  |
|                | * `elementName` - название       |                                  |
|                |   подразделения                  |                                  |
|                |                                  |                                  |
|                | а также необязательные:          |                                  |
|                |                                  |                                  |
|                | * `parentName` - название        |                                  |
|                |   подразделения, которому        |                                  |
|                |   принадлежит должность          |                                  |
|                | * `hasChildren` - имеются ли     |                                  |
|                |   дочерние подразделения         |                                  |
|                | * `status` - текст статуса       |                                  |
|                |   (например, «Введен ручную»)    |                                  |
|                | * `statusColor` - цвет статуса   |                                  |
+----------------+----------------------------------+----------------------------------+

*   `AS.FORMS.DepartmentLinkView` - отображение
    компонента «Подразделение»

##### Модели и отображения компонента «Период повторения» {#integration.methods.form_scripting.repeat_period}

*   `AS.FORMS.RepeatPeriodModel` - модель компонента
    «Период повторения»

Формат `asfData`:

<#include "../bin/architecture/src/forms/repeater_data.md">

Свойства:

+-------------------+----------------------+-----------------------------------+
| Наименование      | Тип                  | Описание                          |
+===================+======================+===================================+
| type              | Int                  | Тип периода (0 - нет, 1 - по дням |
|                   |                      | недели, 2 - по дням месяца, 4 -   |
|                   |                      | ежегодно                          |
+-------------------+----------------------+-----------------------------------+

Методы:

+-------------------+------------------------------+---------------------------+
| Наименование      | Аргумент                     | Описание                  |
+===================+==============================+===========================+
| getValue          |                              | Возвращает массив         |
|                   |                              | элементов согласно типу,  |
|                   |                              | например ['4.1', '5.11',  |
|                   |                              | '7.12', '9.30']           |
+-------------------+------------------------------+---------------------------+
| setValue          | Строка следующего типа:      | Вставляет значение        |
|                   | 4|1.4;11.5;12.7;30.9         |                           |
+-------------------+------------------------------+---------------------------+
| setValueFromInput | `Int type array <String>`    | Обновляет значение        |
|                   | `selectedDays`               | модели `type`             |
|                   |                              |                           |
|                   |                              | * `type` - тип периода    |
|                   |                              | * `selectedDays` -        |
|                   |                              |   массив строк согласно   |
|                   |                              |   типу, например ['4.1',  |
|                   |                              |   '5.11', '7.12', '9.30'] |
+-------------------+------------------------------+---------------------------+
| getTypeText       |                              | Возвращает текстовую      |
|                   |                              | расшифровку выбранного    |
|                   |                              | типа                      |
+-------------------+------------------------------+---------------------------+
| getValueString    | * `value` строка типа '7.12' | Возвращает строчное       |
|                   |   согласно формату и типу    | представление данных      |
|                   | * `type` - тип периода       |                           |
|                   | * `full` - полное            |                           |
|                   |   представление              |                           |
|                   |   (используется для режима   |                           |
|                   |   просмотра)                 |                           |
+-------------------+------------------------------+---------------------------+

*   `AS.FORMS.RepeatPeriodView` - отображение
    компонента «Период повторения»

##### Модели и отображения компонента «Ссылка на проект» {#integration.methods.form_scripting.project_link}

*   `AS.FORMS.ProjectLinkModel` - модель компонента
    «Ссылка на проект»

Формат `asfData`:

<#include "../bin/architecture/src/forms/projectlink_data.md">

Методы:

+-------------------+-------------------------------+--------------------------+
| Наименование      | Аргумент                      | Описание                 |
+===================+===============================+==========================+
| getValue          |                               | Возвращает идентификатор |
|                   |                               | выбранного проекта или   |
|                   |                               | портфеля                 |
+-------------------+-------------------------------+--------------------------+
| setValue          | Идентификатор проекта или     | Вставляет значение       |
|                   | портфеля, либо `null`         |                          |
+-------------------+-------------------------------+--------------------------+
| setValueFromInput | Объект с полями:              | Обновляет значение       |
|                   |                               | компонента               |
|                   | * `actionID` - идентификатор  |                          |
|                   | * `name` - название           |                          |
|                   | * `elementType` - тип         |                          |
|                   |   элемента (256 - проект,     |                          |
|                   |   128 - портфель)             |                          |
+-------------------+-------------------------------+--------------------------+

*   `AS.FORMS.ProjectLinkView` - отображение
    компонента «Ссылка на проект»

##### Модели и отображения компонента «Ссылка на реестр» {#integration.methods.form_scripting.registry_link}

*   `AS.FORMS.RegistryLinkModel` - модель компонента
    «Ссылка на реестр»

Формат `asfData`:

<#include "../bin/architecture/src/forms/reglink_data.md">

Методы:

+-------------------+-------------------------------+--------------------------+
| Наименование      | Аргумент                      | Описание                 |
+===================+===============================+==========================+
| getValue          |                               | Возвращает идентификатор |
|                   |                               | выбранного документа     |
|                   |                               | реестра                  |
+-------------------+-------------------------------+--------------------------+
| setValue          | Идентификатор документа       | Вставляет значение       |
|                   | реестра                       |                          |
+-------------------+-------------------------------+--------------------------+
| getRegistryID     |                               | Возвращает идентификатор |
|                   |                               | реестра                  |
+-------------------+-------------------------------+--------------------------+

*   `AS.FORMS.RegistryLinkView` - отображение
    компонента «Ссылка на реестр»

##### Модели и отображения компонента «Ссылка на адресную книгу» {#integration.methods.form_scripting.address_book}

*   `AS.FORMS.AddressLinkModel` - модель компонента
    «Ссылка на адресную книгу»

Формат `asfData`:

<#include "../bin/architecture/src/forms/personlink_data.md">

Методы:

+-------------------+-------------------------------+--------------------------+
| Наименование      | Аргумент                      | Описание                 |
+===================+===============================+==========================+
| getValue          |                               | Возвращает идентификатор |
|                   |                               | выбранной записи         |
+-------------------+-------------------------------+--------------------------+
| setValue          | Идентификатор записи          | Вставляет значение       |
+-------------------+-------------------------------+--------------------------+
| setValueFromInput | Объект с полями:              | Обновляет значение       |
|                   |                               | компонента               |
|                   | * `newValue` - идентификатор  |                          |
|                   | * `newTextValue` - подпись    |                          |
|                   | * `newType` - тип контакта    |                          |
|                   |   (0 - люди, 1 - организация) |                          |
+-------------------+-------------------------------+--------------------------+

*   `AS.FORMS.AddressLinkView` - отображение
    компонента «Ссылка на адресную книгу»

##### Модели и отображения компонента «Ссылка на файл в хранилище» {#integration.methods.form_scripting.file_storage}

*   `AS.FORMS.FileLinkModel` - модель компонента
    «Ссылка на файл в хранилище»

Формат `asfData`:

<#include "../bin/architecture/src/forms/filelink_data.md">

Методы:

+--------------+------------------------------+------------------------------+
| Наименование | Аргумент                     | Описание                     |
+==============+==============================+==============================+
| getValue     |                              | Возвращает `null` либо       |
|              |                              | данные, которые имеют        |
|              |                              | следующие обязательные поля: |
|              |                              |                              |
|              |                              | * `identifier`               |
|              |                              | * `name`                     |
|              |                              | * `icon`                     |
+--------------+------------------------------+------------------------------+
| setValue     | Объект с обязательными       | Вставляет значение           |
|              | полями:                      |                              |
|              |                              |                              |
|              | * `identifier`               |                              |
|              | * `name`                     |                              |
|              | * `icon`                     |                              |
+--------------+------------------------------+------------------------------+

*   `AS.FORMS.FileLinkView` - отображение компонента
    «Ссылка на файл в хранилище»

#### Методы поля ввода с тегами {#integration.methods.form_scripting.tag_area}

События:

+--------------+------------------------------+------------------------------+
| Наименование | Аргумент                     | Описание                     |
+==============+==============================+==============================+
| tagEdit      | * `event` - событие          | Возникает при изменении      |
|              | * `tag` - объект, подпись    | подписи у элемента поля      |
|              |   которого была изменена     | ввода с тегами               |
|              | * `tagArea` - поле ввода с   |                              |
|              |   тегами                     |                              |
+--------------+------------------------------+------------------------------+
| tagDelete    | * `event` - событие          | Возникает при удалении       |
|              | * `tag` - объект, который    | элемента поля ввода с тегами |
|              |   был удален                 |                              |
|              | * `tagArea` - поле ввода с   |                              |
|              |   тегами                     |                              |
+--------------+------------------------------+------------------------------+

Методы:

+--------------+------------------------------+------------------------------+
| Наименование | Аргумент                     | Описание                     |
+==============+==============================+==============================+
| Конструктор  | * `css` - объект с css       |                              |
|              |   свойствами, обычно         |                              |
|              |   передается ширина поля     |                              |
|              |   ввода с тегами             |                              |
|              | * `width` - число,           |                              |
|              |   максимальная ширина поля   |                              |
|              |   ввода; если передается 0,  |                              |
|              |   то рассчитывается исходя   |                              |
|              |   из ширины css              |                              |
|              | * `multivalue` - может ли    |                              |
|              |   принимать множественные    |                              |
|              |   значения                   |                              |
|              | * `editContent` - доступно   |                              |
|              |   ли редактирование тегов    |                              |
|              |   объектов                   |                              |
|              | * `canAddRandomText` - можно |                              |
|              |   ли добавлять в качестве    |                              |
|              |   элементов произвольно      |                              |
|              |   набранный пользователем    |                              |
|              |   текст                      |                              |
|              | * `suggestHandler` -         |                              |
|              |   обработчик, который        |                              |
|              |   вызывается для отображения |                              |
|              |   пользователю подсказки;    |                              |
|              |   если передать null, то у   |                              |
|              |   пользователя не будет      |                              |
|              |   встроенного inline поиска; |                              |
|              |   в обработчик передается    |                              |
|              |   один параметр - введенный  |                              |
|              |   пользователем текст        |                              |
|              | * `createRandom` -           |                              |
|              |   обработчик, который        |                              |
|              |   добавляет введенный        |                              |
|              |   пользователем тег; в метод |                              |
|              |   передается название тега   |                              |
+--------------+------------------------------+------------------------------+
| focus        |                              | Переводит фокус на поле      |
|              |                              | ввода                        |
+--------------+------------------------------+------------------------------+
| addValue     | * `value` - добавляемое      | Добавляет значение           |
|              |   значение                   |                              |
|              | * `updateSuggestionInput`    |                              |
|              |   перерисовать ли поле ввода |                              |
|              |   с тегами                   |                              |
+--------------+------------------------------+------------------------------+
| markValidity | * `valid` - валидно ли поле  | Помечает поле правильно либо |
|              |                              | неправильно заполненным;     |
|              |                              | неправильно заполненное поле |
|              |                              | обводится красным цветом и   |
|              |                              | подсвечивается               |
+--------------+------------------------------+------------------------------+
| getValues    |                              | Возвращает список текущих    |
|              |                              | значений поля ввода          |
+--------------+------------------------------+------------------------------+
| setValues    | * `values` - массив          | Устанавливает значение поля  |
|              |   значений, может содержать  | ввода с тегами               |
|              |   произвольные объекты, у    |                              |
|              |   которых обязательно должно |                              |
|              |   быть свойства `tagName`    |                              |
|              |   (подпись тега)             |                              |
+--------------+------------------------------+------------------------------+
| setVisible   | `visible`                    | Определяет видимость         |
|              |                              | компонента                   |
+--------------+------------------------------+------------------------------+
| setEditable  | `editable`                   | Доступен ли компонент для    |
|              |                              | редактирования               |
+--------------+------------------------------+------------------------------+
| getWidget    |                              | Получение компонента,        |
|              |                              | который можно добавить в дом |
+--------------+------------------------------+------------------------------+

#### Методы AS.SERVICES {#integration.methods.form_scripting.as_services}

Методы:

+-----------------------------+--------------------------+----------------------------------+
| Наименование                | Аргумент                 | Описание                         |
+=============================+==========================+==================================+
| showDropDown                | values - массив значений | Отображает выпадающий список     |
|                             | [{value : "value1",      |                                  |
|                             | title : "title1",        | В callback передается `value`    |
|                             | selected : true},        | выбранного значения              |
|                             | [{value : "value2",      |                                  |
|                             | title : "title2"},       |                                  |
|                             | [{value : "value3",      |                                  |
|                             | title : "title3"}]       |                                  |
|                             |                          |                                  |
|                             | anchor - якорный         |                                  |
|                             | компонент, к которому    |                                  |
|                             | следует привязать popup  |                                  |
|                             |                          |                                  |
|                             | minWidth - минимальная   |                                  |
|                             | ширина                   |                                  |
|                             |                          |                                  |
|                             | handler - callback       |                                  |
+-----------------------------+--------------------------+----------------------------------+
| showDatePicker              | value - объект типа Date | Отображает компонент выбора даты |
|                             |                          |                                  |
|                             | anchor - якорный         |                                  |
|                             | компонент, к которому    |                                  |
|                             | следует привязать popup  |                                  |
|                             |                          |                                  |
|                             | input - поле ввода даты  |                                  |
|                             | (можно передать null),   |                                  |
|                             | используется для         |                                  |
|                             | передачи фокуса          |                                  |
|                             |                          |                                  |
|                             | handler : callback       |                                  |
+-----------------------------+--------------------------+----------------------------------+
| showUserChooserDialog       | values,                  | Отображает диалог выбора         |
|                             | multiSelectable,         | пользователей                    |
|                             | isGroupSelectable,       |                                  |
|                             | showWithoutPosition,     | В callback передается массив,    |
|                             | filterPositionID,        | содержащий объекты со            |
|                             | filterDepartmentID,      | следующими полями:               |
|                             | locale,                  |                                  |
|                             | handler                  | * `personID` - идентификатор     |
|                             |                          |   пользователя                   |
|                             |                          | * `personName` - название        |
|                             |                          |   пользователя                   |
|                             |                          |                                  |
|                             |                          | а также необязательные:          |
|                             |                          |                                  |
|                             |                          | * `positionName` - название      |
|                             |                          |   должности пользователя (если   |
|                             |                          |   существует)                    |
|                             |                          | * `customFields`:                |
|                             |                          |                                  |
|                             |                          |     {                            |
|                             |                          |     * `calendarColor` - цвет     |
|                             |                          |       статуса                    |
|                             |                          |     * `calendarStatusLabel` -    |
|                             |                          |       текст статуса (например    |
|                             |                          |       «Введен ручную»)           |
|                             |                          |                                  |
|                             |                          |     }                            |
+-----------------------------+--------------------------+----------------------------------+
| showPositionChooserDialog   | values,                  | Отображает диалог выбора         |
|                             | multiSelect,             | должностей                       |
|                             | filterUserId,            |                                  |
|                             | filterDepartmentId,      | В callback передается массив,    |
|                             | showVacant,              | содержащий объекты со            |
|                             | locale,                  | следующими полями:               |
|                             | handler                  |                                  |
|                             |                          | * `elementID` - идентификатор    |
|                             |                          |   должности                      |
|                             |                          | * `elementName` - название       |
|                             |                          |   должности                      |
|                             |                          |                                  |
|                             |                          | а также необязательные:          |
|                             |                          |                                  |
|                             |                          | * `departmentName` - название    |
|                             |                          |   подразделения, которому        |
|                             |                          |   принадлежит должность          |
|                             |                          | * `status`: текст статуса        |
|                             |                          |   (например, «Введен ручную»)    |
|                             |                          | * `statusColor` - цвет статуса   |
+-----------------------------+--------------------------+----------------------------------+
| showDepartmentChooserDialog | values,                  | Отображает диалог выбора         |
|                             | multiSelectable,         | департаментов                    |
|                             | filterUserID,            |                                  |
|                             | filterPositionID,        | В callback передается массив,    |
|                             | filterDepartmentID,      | содержащий объекты со            |
|                             | filterChildDepartmentID, | следующими полями:               |
|                             | locale,                  |                                  |
|                             | handler                  | * `departmentId` - идентификатор |
|                             |                          |   подразделения                  |
|                             |                          | * `departmentName` - название    |
|                             |                          |   подразделения                  |
|                             |                          |                                  |
|                             |                          | а также необязательные:          |
|                             |                          |                                  |
|                             |                          | * `parentName` - название        |
|                             |                          |   подразделения, которому        |
|                             |                          |   принадлежит должность          |
|                             |                          | * `hasChildren` - имеются ли     |
|                             |                          |   дочерние подразделения         |
|                             |                          | * `status` - текст статуса       |
|                             |                          |   (например, «Введен ручную»)    |
|                             |                          | * `statusColor` - цвет статуса   |
+-----------------------------+--------------------------+----------------------------------+
| showProjectLinkDialog       | handler                  | Отображает диалог выбора         |
|                             |                          | проекта/портфеля                 |
|                             |                          |                                  |
|                             |                          | В callback передается массив,    |
|                             |                          | содержащий объекты со            |
|                             |                          | следующими полями:               |
|                             |                          |                                  |
|                             |                          | * `actionID` - идентификатор     |
|                             |                          | * `name` - название              |
|                             |                          | * `elementType` - тип элемента   |
|                             |                          |   (256 - проект, 128 - портфель) |
+-----------------------------+--------------------------+----------------------------------+
| showRegisterLinkDialog      | registry,                | Отображает диалог выбора         |
|                             | handler                  | записи реестра                   |
|                             |                          |                                  |
|                             |                          | В callback передается            |
|                             |                          | идентификатор выбранного         |
|                             |                          | документа                        |
+-----------------------------+--------------------------+----------------------------------+
| showWaitWindow              |                          | Отображает окно ожидания         |
|                             |                          |                                  |
|                             |                          | Каждая платформа реализует свое  |
|                             |                          | окно, внутри Synergy это         |
|                             |                          | реализовано, для встраивания в   |
|                             |                          | другой портал необходимо данный  |
|                             |                          | метод переопределить             |
+-----------------------------+--------------------------+----------------------------------+
| hideWaitWindow              |                          | Скрывает окно ожидания           |
|                             |                          |                                  |
|                             |                          | Каждая платформа реализует свое  |
|                             |                          | окно, внутри Synergy это         |
|                             |                          | реализовано, для встраивания в   |
|                             |                          | другой портал необходимо данный  |
|                             |                          | метод переопределить             |
+-----------------------------+--------------------------+----------------------------------+
| unAuthorized                | Url - URLметода API, при | Скрывает окно ожидания           |
|                             | вызове которого          |                                  |
|                             | появилась ошибка 401     | Каждая платформа реализует свое  |
|                             |                          | окно, внутри Synergy это         |
|                             |                          | реализовано, для встраивания в   |
|                             |                          | другой портал необходимо данный  |
|                             |                          | метод переопределить             |
+-----------------------------+--------------------------+----------------------------------+

#### Утилита при вызове методов API Synergy {#integration.methods.form_scripting.api_utils}

Методы AS.FORMS.ApiUtils:

+-----------------+-------------------------------------+----------------------------------+
| Наименование    | Аргумент                            | Описание                         |
+=================+=====================================+==================================+
| addAuthHeader   |                                     | Добавляет заголовок с            |
|                 |                                     | параметрами авторизации          |
+-----------------+-------------------------------------+----------------------------------+
| getFullUrl      | UrlPart -                           | Формирует частичный (при         |
|                 | 'rest/api/asforms/form_ext?formID=' | наличии) либо полный URL до      |
|                 |                                     | метода API                       |
+-----------------+-------------------------------------+----------------------------------+
| simpleAsyncGet  | UrlPart -                           | Выполняет GET-запрос к API       |
|                 | 'rest/api/asforms/form_ext?formID=' | Synergy                          |
|                 |                                     |                                  |
|                 | callback  - куда вернуть результат  | Автоматически добавит заголовки  |
|                 |                                     |                                  |
|                 | dataType - тип данных               |                                  |
|                 |                                     |                                  |
|                 | data - данные                       |                                  |
|                 |                                     |                                  |
|                 | errorHandler — callback в случае    |                                  |
|                 | ошибки (при ошибке 401 вызовется    |                                  |
|                 | метод AS.SERVICES.unAuthorized)     |                                  |
+-----------------+-------------------------------------+----------------------------------+
| simpleAsyncPost | UrlPart -                           | Выполняет GET-запрос к API       |
|                 | 'rest/api/asforms/form_ext?formID=' | Synergy                          |
|                 |                                     |                                  |
|                 | callback  - куда вернуть результат  | Автоматически добавит заголовки  |
|                 |                                     |                                  |
|                 | dataType - тип данных               |                                  |
|                 |                                     |                                  |
|                 | data - данные                       |                                  |
|                 |                                     |                                  |
|                 | contentType - тип содержания        |                                  |
|                 |                                     |                                  |
|                 | errorHandler — callback в случае    |                                  |
|                 | ошибки (при ошибке 401 вызовется    |                                  |
|                 | метод AS.SERVICES.unAuthorized)     |                                  |
+-----------------+-------------------------------------+----------------------------------+

#### Утилиты для работы с asfData и asfDefinition {#integration.methods.form_scripting.asfdata_utils}

Методы AS.FORMS.ASFDataUtils:

+--------------------+-----------------------------+----------------------------------+
| Наименование       | Аргумент                    | Описание                         |
+====================+=============================+==================================+
| getComponentLocale | asfProperty                 | Получение локали, настроенной в  |
|                    |                             | компоненте                       |
+--------------------+-----------------------------+----------------------------------+
| isReadOnly         | model                       | Является ли компонент не         |
|                    |                             | редактируемым согласно настроек  |
+--------------------+-----------------------------+----------------------------------+
| getBaseAsfData     | * `asfProperty` - настройки | Получение базового объекта для   |
|                    | компонента из описания      | формирования данных для          |
|                    | формы                       | сохранения в Synergy. Получив    |
|                    | * `blockNumber`             | таким образом объект, можно      |
|                    | * `value`                   | добавить к нему собственные      |
|                    | * `key`                     | свойства (см. пример ниже)       |
+--------------------+-----------------------------+----------------------------------+

#### Утилиты для работы с датами {#integration.methods.form_scripting.date_utils}

Методы AS.FORMS.DateUtils:

+------------------------+--------------+----------------------------------+
| Наименование           | Аргумент     | Описание                         |
+========================+==============+==================================+
| isEmpty                | DateStr      | Соответствует ли переданная      |
|                        |              | строка пустому значению,         |
|                        |              | например 201-__-__ будет         |
|                        |              | считаться пустым значением       |
+------------------------+--------------+----------------------------------+
| parseDate              | DateStr      | Возвращает объект дата           |
|                        |              | соответствующей строке, если     |
|                        |              | строка не соответствует формату, |
|                        |              | то null                          |
+------------------------+--------------+----------------------------------+
| formatDate             | Date, format | Форматирует дату согласно        |
|                        |              | формату                          |
+------------------------+--------------+----------------------------------+
| getMonthName           | number       | Получение полного названия       |
|                        |              | месяца по номеру                 |
+------------------------+--------------+----------------------------------+
| getMonthShortName      | number       | Получение сокращенного названия  |
|                        |              | месяца по номеру                 |
+------------------------+--------------+----------------------------------+
| getMonthPossessiveName | number       | Получение названия месяца в      |
|                        |              | родительном падеже               |
+------------------------+--------------+----------------------------------+
| getWeekDayName         | number       | Получение названия дня недели по |
|                        |              | номеру                           |
+------------------------+--------------+----------------------------------+
| getWeekDayShortName    | number       | Получение сокращенного названия  |
|                        |              | дня недели по номеру             |
+------------------------+--------------+----------------------------------+

#### Утилиты для работы с компонентами {#integration.methods.form_scripting.component_utils}

Методы AS.FORMS.ComponentUtils:

+-----------------+--------------------------+------------------------------------------+
| Наименование    | Аргумент                 | Описание                                 |
+=================+==========================+==========================================+
| createModel     | Asfproperty, playerModel | Создание модели компонента               |
+-----------------+--------------------------+------------------------------------------+
| createView      | Model, playerView,       | Создание отображения компонента          |
|                 | editable                 |                                          |
+-----------------+--------------------------+------------------------------------------+
| createContainer |                          | Создание контейнера компонента           |
+-----------------+--------------------------+------------------------------------------+
| makeBus         | object                   | Делает из любого переданного             |
|                 |                          | объекта шину событий, добавляет          |
|                 |                          | методы:                                  |
|                 |                          |                                          |
|                 |                          | * `trigger(event, [аргументы ивента])` - |
|                 |                          |   вызвать событие                        |
|                 |                          | * `on(event, handler)` - подписаться на  |
|                 |                          |   событие                                |
|                 |                          | * `off(event, handler)` - отписаться от  |
|                 |                          |   события                                |
+-----------------+--------------------------+------------------------------------------+
| createFunction  | Code - код, prefixCode - | Создание функции из строк кода           |
|                 | код приставка            |                                          |
+-----------------+--------------------------+------------------------------------------+

<#include "integration/how_to_create_user_component.md">
