Скрипт определения условий отбора объектов, доступных обладателю роли при упоминании

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

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

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

Форма добавления роли пользователей или форма редактирования роли, см. Роли пользователей.

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

При упоминании объектов через префикс или через форму упоминания объекта.

При условии, что включен механизм контроля прав пользователей на объекты, доступные для упоминания (страница "Упоминание объектов"), см. Контроль прав при упоминаниях.

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

Возвращает объект фильтра — результат вызова какого-либо из методов api.filters.

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

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

  • 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.

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

  • subject — объект, в котором в атрибуте типа "Текст в формате RTF" добавляется упоминание. Например, добавление упоминания при редактировании контента "Параметры объекта".

    Если упоминание добавляется:

    • в комментарии, то переменная содержит объект комментария;
    • в связанном объекте, то переменная содержит связанный объект.
  • cardObject — объект, из карточки которого было инициировано действие. Если действие инициировано не из карточки объекта, то cardObject = null.

  • origin — место вызова упоминания.

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

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

    Пример использования: sourceForm.title.

  • permittedFqns — список классов и типов, объекты которых могут быть упомянуты.

    Переменная содержит "ClassFqn" для классов и типов, выбранных в поле "Объекты" упоминания.

  • attrCode — код атрибута, в рамках которого добавляется упоминание.

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

1. Вывести объекты, в атрибуте 'attr' которых лежит текущий сотрудник.

return api.filters.attrValueEq('attr', user)

2. Вывести объекты типа 'objType', привязанные к услугам через атрибут 'services', получателем которых является отдел текущего пользователя.

def attrChain = [
api.types.newAttrReference(api.types.newClassFqn('objType'), 'services'),
api.types.newAttrReference(api.types.newClassFqn('slmService'), 'agreements'),
api.types.newAttrReference(api.types.newClassFqn('agreement'), 'recipientsOU')]
return api.filters.inAttributesChainAreObjects(attrChain).setEqUuid(user.parent.UUID)

3. Вывести услуги, связанные с соглашениями, поставщиком которых является текущий сотрудник или команда текущего сотрудника (если поле "Поставщик (сотрудник)" пусто).

def attrChainTeamMembers = [
api.types.newAttrReference(api.types.newClassFqn('slmService'), 'agreements'),
api.types.newAttrReference(api.types.newClassFqn('agreement'), 'supplierTeam'),
api.types.newAttrReference(api.types.newClassFqn('team'), 'members')]
def teamFilter = api.filters.inAttributesChainAreObjects(attrChainTeamMembers).setEqUuid(user.UUID)
def attrChainEmps = [
api.types.newAttrReference(api.types.newClassFqn('slmService'), 'agreements'),
api.types.newAttrReference(api.types.newClassFqn('agreement'), 'supplierEmployee')]
def empFilter = api.filters.inAttributesChainAreObjects(attrChainEmps).setEqUuid(user.UUID)
def noEmpFilter = api.filters.inAttributesChainAreObjects(attrChainEmps).setEqUuid(null)
return api.filters.or(empFilter, api.filters.and(noEmpFilter, teamFilter))