Скрипт вычисления значения по умолчанию для параметра

Категория скрипта "Вычислимые значения по умолчанию параметров событий".

Значения по умолчанию для параметра, кроме значений произвольного справочник

Скрипт вычисляет значение по умолчанию для параметра.

Место настройки скрипта

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

Когда выполняется скрипт

  • непосредственно в момент открытия формы;
  • при открытии формы добавления или редактирования контента со встроенным приложением, для которого запрашиваются дополнительные параметры.

Результат выполнения скрипта

Скрипт возвращает значение параметра по умолчанию. Представление значения по умолчанию зависит от типа параметра.

В случае ошибки при определении или заполнении значения по умолчанию, значение параметра считается неопределенным. Сообщение об ошибке записывается в лог.

Переменные и их значения

Глобальные переменные:

  • user — пользователь, инициализировавший событие. Является объектом класса "Сотрудник" (employee). Если событие инициализировал суперпользователь, то user=null.
  • ip — ip-адрес рабочего места пользователя user. Если действие выполняется автоматически системой (а не пользователем), то переменная не определяется.
  • appVersion — версия приложения.
  • api — используется для обращения к методам api, например api.utils, api.ldap, api.timing, см. Методы API;
  • modules — используется для обращения к скриптовому модулю и конкретному методу, определенному в нем, с помощью конструкции: modules.{код модуля}.{имя метода}({параметры метода}...), см. Скрипт текста модуля;
  • logger — используется для отладки скриптов и позволяет вывести в лог на указанный уровень переданную строку, см. Оформление и отладка скриптов.
  • utils — синоним api.utils.

Переменные контекста:

  • attrCode — код параметра, для которого вычисляется значение по умолчанию.
  • cardObject — объект, из карточки которого было инициировано событие. Переменная доступна, если событие вызвано из карточки объекта.
  • source — пособ вызова события: OBJECT_LIST из списка объектов и OBJECT_CARD из карточки.
  • subjects — объекты, выбранные в списке объектов (если событие вызвано из списка объектов), или текущий объект (если событие вызвано из карточки объекта). Переменная содержит только те объекты, относительно которых у текущего пользователя есть право на выполняемое действие. Если прав нет, то subjects = null.
  • subject — содержит в себе произвольный объект из коллекции subjects (если событие вызвано из списка объектов), или текущий объект (если событие вызвано из карточки объекта). Если у текущего пользователя нет права на выполняемое действие, то subject = null
  • НЕ рекомендуется использовать:

    • subject в качестве результата вычисления значения по умолчанию для ссылочных параметров;
    • subject.UUID для вычисления значения по умолчанию для параметров любого типа.
  • list — все объекты списка. Количество объектов коллекции ограничивается 1000. Переменная доступна, если событие вызвано из списка объектов.

    Метод limitExceeded() возвращает:

    • true, если лимит превышен и часть объектов списка не попали в данную коллекцию.
    • false, если в коллекции 1000 и меньше объектов.
  • params — значения параметров действия по событию, заполняемых в интерфейсе на форме выполнения пользовательского действия по событию, см. Настройка параметров пользовательского действия.

    До версии 4.7 переменная "params" могла использоваться в скриптах для любых целей. С версии 4.7 и старше скрипты с переменной "params" работают по указанной системной логике (обращение к параметрами на форме), другая логика переменной игнорируется.

    Чтобы использовать другую логику переменной params, необходимо заменить в существующих скриптах название своей переменной "params" на какое-то другое.

Контекстные переменные: list, subject, subjects, cardObject, source недоступны при выполнении скрипта в интерфейсе администратора (при открытии формы добавления или редактирования контента со встроенным приложением, для которого запрашиваются дополнительные параметры).

Особенности скрипта

  • В скрипте не должны использоваться методы, направленные на модификацию данных (создание, копирование, удаление и пр.).
  • В скрипте доступно значение агрегирующего параметра, которое соответствует указанному на форме, а значения агрегируемых параметров недоступны (т.е. равны null).

    Пример: для агрегирующего параметра initiator (с агрегируемыми параметрами initiator_em и initiator_ou) в скрипте вычислимого значения по умолчанию какого-либо другого параметра initiator = %значение, выбранное на форме% (т.е. сотрудник или отдел), а initiator_em = null, initiator_ou = null.

  • В скриптах фильтрации к значениям параметров следует обращаться через form.код_параметра.
  • При создании объекта через скрипт и инициализации его атрибутов, значения которых используются при вычислении других атрибутов (вычислимых по умолчанию), следует передавать значения объектами тех типов, которые должны храниться в соответствующих атрибутах.

    Пример: если передать в атрибут типа "Элемент справочника" код элемента справочника как строку, то скрипт вычисления значения по умолчанию, который будет пытаться получить элемент справочника из этого атрибута, получит переданную строку, а не элемент справочника. Чтобы избежать этого, нужно передавать элемент справочника как объект.

    /**
    * Вариант 1 (проблемный)
    */
    utils.create('ou$OU', ['title':'test1', 'catalogAttr':'CatalogElementCode'])
    /**
    * Вариант 2 (работающий)
    */
    def cat = utils.get('catalogCode', ['code':'catalogElementCode'])
    utils.create('ou$OU', ['title':'test2', 'catalogAttr':cat])

Примеры скрипта

1. Скрипт вычисляет часовой пояс по умолчанию для запроса.

//ПАРАМЕТРЫ------------------------------------------------------------
//получаем компанию
def ROOT = utils.get('root', [:]); 
def TIMEZONE = subject?.clientEmployee?.city?.timeZone ?: ROOT.dTimeZone
//ОСНОВНОЙ БЛОК-------------------------------------------------------
return TIMEZONE

2. Скрипт проставляет контрагента связанного запроса в значение по умолчанию.

//ПАРАМЕТРЫ------------------------------------------------------------
//код атрибута, ссылающегося на Запрос
def SERVICE_CALL = 'serviceCall' 
//код атрибута "Контрагент(сотрудник)" класса "Запрос" (serviceCall)
def CLIENT_EMPLOYEE = 'clientEmployee' 
//ОСНОВНОЙ БЛОК--------------------------------------------------------
return subject?.SERVICE_CALL?.CLIENT_EMPLOYEE

Значения произвольного справочника по умолчанию

Скрипт вычисляет значение по умолчанию для параметров типа "элементы произвольного справочника".

Скрипт учитывает скрипты фильтрации и скрипты вычисления элементов произвольного справочника. Если вычисленное значение не содержится в выпадающем списке, то оно должно сбросится.

Когда выполняется скрипт

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

Результат выполнения скрипта

Скрипт возвращает ассоциативный список "ключ–значение" (ключ и значение имеют тип "строка"). В случае ошибки при определении или заполнении значения по умолчанию, значение параметра считается неопределенным.

Переменные и из значения

Глобальные переменные:

  • user — пользователь, инициализировавший событие. Является объектом класса "Сотрудник" (employee). Если событие инициализировал суперпользователь, то user=null.
  • ip — ip-адрес рабочего места пользователя user. Если действие выполняется автоматически системой (а не пользователем), то переменная не определяется.
  • appVersion — версия приложения.
  • api — используется для обращения к методам api, например api.utils, api.ldap, api.timing, см. Методы API;
  • modules — используется для обращения к скриптовому модулю и конкретному методу, определенному в нем, с помощью конструкции: modules.{код модуля}.{имя метода}({параметры метода}...), см. Скрипт текста модуля;
  • logger — используется для отладки скриптов и позволяет вывести в лог на указанный уровень переданную строку, см. Оформление и отладка скриптов.
  • utils — синоним api.utils.

Переменные контекста:

  • attrCode — код параметра, для которого вычисляется значение по умолчанию;
  • source — строка, способ вызова события: OBJECT_LIST из списка объектов и OBJECT_CARD из карточки объекта;
  • cardObject — объект, из карточки которого было инициировано событие. Переменная доступна, если событие вызвано из карточки объекта;
  • subjects — объекты, выбранные в списке объектов (если событие вызвано из списка объектов), или текущий объект (если событие вызвано из карточки объекта);
  • subject — ссылка на объект, к которому применяется действие;
  • list — содержит ассоциативный список, который возвращает скрипт вычисления элементов произвольного справочника этого параметра.

Контекстные переменные: list, subject, subjects, cardObject, source недоступны при выполнении скрипта в интерфейсе администратора (при открытии формы добавления или редактирования контента со встроенным приложением, для которого запрашиваются дополнительные параметры).

Пример скрипта

dictionary = ['1':'один']
return dictionary