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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 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']]
]