Скрипт настройки ограничения фильтрации для атрибута

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

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

Скрипт предназначен для ограничения списка значений атрибута при настройке фильтрации в списках объектов в интерфейсе оператора.

Настраивается для атрибутов типа: "Ссылка на бизнес-объект", "Набор ссылок на бизнес-объекты", "Обратная ссылка", "Агрегирующий атрибут", "Лицензия", "Элемент справочника", "Набор элементов справочника", "Статус", "Набор типов класса" и "Тип объекта".

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

Контенты "Список вложенных объектов", "Список объектов", "Список связанных объектов", форма "Изменение ограничения фильтрации" (стратегия "Ограничение скриптом"), см. Настройка ограничений фильтрации списка объектов.

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

  • При выборе атрибута, для которого указана стратегия ограничения фильтрации "Ограничение скриптом", на форме настройки фильтрации в списке объектов.

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

В интерфейсе оператора:

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

    Пусто означает отсутствие значений, доступных для выбора.

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

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

  • user — пользователь, инициализировавший событие. Является объектом класса "Сотрудник" (employee).

    Если событие инициализировал суперпользователь, то user=null.

    Если событие инициализировано скриптом (скриптовое действие по событию, скрипт на вход в статус), то переменная user берется из контекста инициировавшего его скрипта.

    Пример: пользователь выполнил изменение атрибута → произошло изменение статуса объекта (действие по событию) → произошло изменение ответственного (действие на вход в статус) → произошло оповещение (действие по событию) .Во всех скриптах этой цепочки переменная user должна содержать сотрудника, выполнившего первоначальное изменение атрибута.

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

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

  • attrCode — код атрибута, для которого производится фильтрация значений.
  • subject — владелец атрибута. Переменная может использоваться во всех скриптах фильтрации.
  • permittedFqns — список разрешенных типов объектов.

    В атрибутах типа "Ссылка на бизнес-объект" и "Набор ссылок на бизнес-объекты" можно ограничить список возможных значений по типам (с помощью параметра "Типы объектов"). В этом случае целесообразно использование переменной permittedFqns.

    Переменная хранит "ClassFqn" для типов, выбранных в параметре "Типы объектов", и позволяет фильтровать объекты только указанных типов, что повышает производительность системы.

    Если выбран класс, то переменная хранит пустую коллекцию. Если переменная не используется, то ограничения по типам не нарушаются.

  • cardObject — объект, из карточки которого было инициировано действие.

    Если действие инициировано НЕ из карточки объекта, то cardObject = null.

  • origin — тип месторасположения.

    Переменная не поддерживается в мобильном приложении.

    Возможные значения:

    • readForm (форма для чтения) — скрипт вычисляется на карточке объекта, на сложной форме добавления и редактирования связей (расширенная форма редактирования), в списке по ссылке на отдельной странице, в списке на странице результатов поиска, при нажатии на кнопку вызова действий в строке списка;
    • addForm — скрипт вычисляется на форме добавления, на быстрой форме добавления;
    • editForm — скрипт вычисляется на форме редактирования объекта, на форме редактирования атрибутов, вызванной из контента "Параметры объекта", на форме редактирования в ячейке списка, на форме быстрого редактирования, на форме массового редактирования, на форме смены типа; на форме смены ответственного, на форме смены привязки (переклассификации), на форме работы с массовостью (управление массовостью запроса), на форме смены статуса, на форме перемещения (смены родителя);
    • addFormComment/editFormComment — скрипт вычисляется на форме добавления/редактирования комментария;
    • addFormFile/editFormFile — скрипт вычисляется на форме добавления/редактирования файла.

Особенности использования переменных в списках на форме добавления и форме редактирования:

  • oldSubject — объект до выполнения редактирования (переменная доступна, если список расположен на форме редактирования).

    При использовании переменной oldSubject значение атрибутов типа "Обратная ссылка" всегда будет null.

  • cardObject — объект, с карточки которого вызвана форма добавления или форма редактирования. Если форма открыта из верхнего/ левого меню, то cardObject = карточка объекта, которая была открыта в момент вызова формы.
  • origin — тип месторасположения.

    На форме добавления origin принимает значение addForm.

    На форме редактирования origin принимает значение editForm.

Рекомендации

Для получения FQN класса (типа) объекта рекомендуется использовать метод .getMetainfo(). Для сравнения его со строкой необходимо выполнить явное преобразование с помощью метода .toString().

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

1. Скрипт фильтрации ссылочного атрибута (поле выбора значения фильтра раскрывающийся список):

//ОСНОВНОЙ БЛОК--------------------------------------------------------
// список отделов без фильтрации
objects = api.utils.find("ou", [:])
return objects

2. Скрипт фильтрации ссылочного атрибута (поле выбора значения фильтра дерево).

Скрипт возвращает все отделы, вложенные в ou$1234:

//ПАРАМЕТРЫ------------------------------------------------------------
//UUID отдела, список вложенных отделов которого, необходимо получить
def PARENT_OU_UUID = 'ou$1234'; 
//ОСНОВНОЙ БЛОК--------------------------------------------------------
def objects = []
objects = api.ou.listNestedOUs(PARENT_OU_UUID)
return objects

3. Скрипт фильтрации агрегирующих атрибутов:

return [
// значением атрибута является только сотрудник, в рамках его отдела и команд, в которых он является участником
'employee$2241',
//значением атрибута является только команда
'team$2104',
//значением атрибута является только отдел
'ou$1901',
//значением атрибута являются сотрудники — участники команды
['team$2107': ['employee$2213', 'employee$2214']],
//значением атрибута являются сотрудники отдела
['ou$1902': ['employee$2203', 'employee$2209']]
]