api.filters Работа со скриптами фильтрации

api.filters позволяет обращаться напрямую к СУБД во время генерации элементов фильтруемого списка.

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

Равенство свойств определенным значениям

  • api.filters.eq(objs)

    api.filters.eq(objs, attrs)

    Фильтрация объектов по нескольким атрибутам.

    Пример:

    def author = ...
    def service = ..
    api.filters.eq('serviceCall', ["author" : author, "service" : service])

Получение объекта фильтра

  • api.filters.none()

    Фильтр, удаляющий все результаты из списка:

  • api.filters.not(filter)

    Фильтр-отрицание.

    Параметр метода:

    • filter — заданный фильтр. IFilter
  • api.filters.all()

    Используется отдельно от других фильтров!

    Скрипт должен возвращать или этот фильтр, или какие-то другие. Без И, ИЛИ, НЕ .

    Возвращает объект фильтра для контроля прав в списках, означающий, что фильтрацию применять не надо

  • api.filters.and(filters)

    Объединение нескольких условий фильтрации по И.

    Параметр метода:

    • filters — набор фильтров. IFilter
  • api.filters.or(filters)

    Объединение нескольких условий фильтрации по ИЛИ.

    Параметр метода:

    • filters — набор фильтров. IFilter
  • api.filters.except( object)

    Получение всех объектов, кроме заданного.

    Параметр метода:

    • object — объект, который надо исключить из результата. IUUIDIdentifiable
  • api.filters.except(uuid)

    Получение всех объектов, кроме объекта с заданным uuid.

    Параметр метода:

    • uuid — uuid объекта, который надо исключить из результата. String
  • api.filters.attrContains(name, value, ignoreCase, revert)

    Получение объектов, значение указанного атрибута которых содержит значение фильтра (или наоборот, значение фильтра содержит значение атрибута).

    Параметры метода:

    • name — код атрибута. String;
    • value — значение для сравнения. Object;
    • ignoreCase — признак сравнения строк без учета регистра. Boolean;
    • revert — признак инвертирования сравнения (атрибут содержит заданное значение или наоборот). Boolean.
  • api.filters.attrsInequality(attrCode1, op, attrCode2)

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

    Параметры метода:

    • attrCode1 — код первого атрибута. String;
    • op — символ отношения ("<", "<=", ">", ">="). String;
    • attrCode2 — код второго атрибута. String
  • api.filters.inequality(attrCode, sign, value)

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

    Параметры метода:

    • attrCode — код атрибута. String;
    • sign — код неравенства ("<", "<=", ">", ">="). String;
    • value — значение для сравнения. Object.
  • api.filters.attrValueEq(attrCode, value)

    Получение объектов, значение указанного атрибута которых равно значению фильтра:

    Параметры метода:

    • attrCode — код атрибута. String
    • value — значение. Object
  • api.filters.attrValueIn(attrCode, value, not)

    Получение объектов, значение указанного атрибута которых содержится в заданной коллекции:

    Параметры метода:

    • attrCode — код атрибута. String
    • value — коллекция значений. Collection<Object>
    • not = true (значение атрибута не должно содержаться в заданной коллекции). Boolean
  • api.filters.hasAnyFile(attributeFqn)

    Получение объектов, у которых есть хотя бы один файл.

    Параметр метода:

    • attributeFqn — идентификатор связи файла и объекта. IAttributeFqn
  • api.filters.inAttributesChainOfObject(attrChain)

    Получение объектов, которые содержатся в значении указанной цепочки атрибутов заданного объекта:

    Параметр метода:

    • attrChain — цепочка атрибутов, последовательных ссылок с одного метакласса на другой. List<IAttrReference>

    Возвращает объект фильтра типа InAttributesChainFilter

    см. api.filters Работа со скриптами фильтрации

  • api.filters.inAttrValueOf(objectId, attribute, not)

    Получение объектов, которые содержатся в значении указанного атрибута заданного объекта (или наоборот, не содержатся).

    Параметры метода:

    • objectId — uuid объекта. String
    • attribute — код атрибута объекта. String
    • not:

      • true — объекты содержатся в значении указанного атрибута заданного объекта;
      • false — объекты не содержатся в значении указанного атрибута заданного объекта.
  • api.filters.inCases(caseIds)

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

    Параметр метода:

    • caseIds — коллекция кодов типов объектов. Collection<String>
  • api.filters.stateTitleEq(fqns, stateTitle)

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

    Параметры метода:

    • fqns — набор типов объектов. Iterable<IClassFqn>
    • stateTitle — название статуса. String
  • api.filters.stateTitleLike(fqns, stateTitle)

    Получение объектов заданных типов, название статуса которых содержит заданную подстроку.

    Параметры метода:

    • fqns — набор типов объектов. Iterable<IClassFqn>
    • stateTitle — название статуса. String
  • api.filters.inDirectAndBackLink(objectId, attrCode, showRelatedWithNested, linkAttrFqn, hierarchyAttrFqn)

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

    Параметры метода:

    • objectId — uuid объекта. String
    • attrCode — код ссылочного атрибута на бизнес-объект того же класса. String
    • showRelatedWithNested — true (отображать связанные со вложенными). Boolean
    • linkAttrFqn — fqn атрибута, после которого строится иерархия. Имеет смысл только когда showRelatedWithNested = true. Если linkAttrFqn.getCode == "currentObject", то иерархия строится от исходного объекта. IAttributeFqn
    • hierarchyAttrFqn — код атрибута, по которому строится иерархия. Имеет смысл только когда showRelatedWithNested = true. String
  • api.filters.children()

    Получение объектов, которые вложены в объект, определяемый некоторым условием.

    Возвращает объект фильтра типа ParentFilter, см. api.filters Работа со скриптами фильтрации

  • api.filters.aggregateAttrTitleNotContains(name, value, ignoreCase)

    Получение объектов, у которых значение агрегирующего атрибута не содержит объект с заданным названием.

    Параметры метода:

    • name — код агрегирующего атрибута. String
    • value — значение атрибута. String
    • ignoreCase — признак сравнения строк без учета регистра. Boolean
  • api.filters.stringAttrValueEq(attrCode, value, ignoreCase)

    Получение объектов, у которых значение указанного атрибута типа "Строка" или "Текст" равно значению фильтра.

    Параметры метода:

    • attrCode — код атрибута. String
    • value — значение. Object
    • ignoreCase — признак сравнения строк без учета регистра. Boolean
  • api.filters.backLinkAttrContains(directLinkAttrCode, objectId, dtObjects, contains)

    Получение объектов, у которых значение атрибута типа "Обратная ссылка" содержит хотя бы один из заданных объектов (или не содержит ни одного).

    Параметры метода:

    • directLinkAttrCode — код атрибута прямой ссылки. String
    • objectId — идентификатор метакласса объекта, на который ссылается обратная ссылка. String
    • dtObjects — набор объектов, на которые должна ссылаться обратная ссылка (хотя бы на один). ArrayList<String>
    • contains = true (в значении обратной ссылки должен быть хотя бы один объект из dtObject)
    • contains = false (не должно быть ни одного)
  • api.filters.backLinkAttrTitleContains(directLinkAttrCode, objectId, titleValue, contains)

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

    Параметры метода:

    • directLinkAttrCode — код атрибута прямой ссылки. String
    • objectId — идентификатор метакласса объекта, на который ссылается обратная ссылка. String
    • titleValue — наименование объектов, на которые должна ссылаться обратная ссылка (поиск по подстроке). String
    • contains = true (в значении обратной ссылки должен быть хотя бы один объект с названием titleValue)
    • contains =false (не должно быть ни одного)
  • api.filters.dateAttrInInterval(attrCode, sdate, edate, compareAsLong)

    Получение объектов, у которых значение указанного атрибута которых типа "Дата" или "Дата/время" лежит в заданном интервале.

    Параметры метода:

    • attrCode — код атрибута. String;
    • sdate — начальная дата. Date;
    • edate — конечная дата. Date;
    • compareAsLong — признак сравнивать даты как даты или преобразовывать в миллисекунды. Boolean
  • api.filters.lastNDays(attrCode, days)

    Получение объектов, у которых значение атрибута типа "Дата" или "Дата/время" отстоит от текущей даты не более чем на заданное количество дней.

    Параметры метода:

    • attrCode — код атрибута. String
    • days — количество дней, диапазон интервала для сравнения даты. Long
  • api.filters.fqnAttrIsDescendantOf(attrCode, ancestorClassFqn, includeAncestor)

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

    Параметры метода:

    • attrCode — код атрибута. String;
    • ancestorClassFqn — FQN метакласса-родителя. IClassFqn;
    • includeAncestor — признак, надо ли учитывать сам ancestorClassFqn в условии. Boolean.
  • api.filters.inDisconnectingStates(masterSlaveFqn)

    Получение объектов класса "Запрос" (serviceCall), которые находятся в статусе разрыва связи.

    Параметр метода:

    • masterSlaveFqn — fqn ведущего (ведомого) запроса. IClassFqn

    Возвращает офильтра типа InAttributesChainFilter, см. api.filters Работа со скриптами фильтрации

  • api.filters.searchableAttributesContainString(searchString, fqn)

    Получение объектов определенного метакласса, значения атрибутов, разрешенных для поиска, которых содержат в себе заданную строку (используется в контенте Массовые запросы).

    Параметры метода:

    • searchString — строка для поиска. String
    • fqn — fqn типа или класса. IClassFqn

Методы создаваемого объекта фильтра ParentFilter

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

    • filter.setChildrenParentEq(String childrenFqn, String parentUuid)

      Задает условие, что дочерние объекты типа childrenFqn вложены в родительский объект с parentUuid (классический вариант использования фильтра).

    • filter.setChildren(String childrenFqn, IObjectFilter... childrenFilters)

      Задает условие, что дочерние объекты типа childrenFqn задаются набором фильтров childrenFilters, объединяемыми по И (например, когда дочерние объекты должны быть вложены в родительский + еще что-нибудь).

    • filter.setNestedInNested()

      Устанавливает признак выборки вложенных во вложенные.

    • filter.setParents(String parentsFqn, IObjectFilter... parentFilters)

      Дополнительное ограничение, накладываемое на родительские объекты при выборке вложенных во вложенные. Например, ограничение на типы метаклассов родительских объектов.

    • filter.setParentUuid(String parentsFqn, String parentUuid)

      Условие, что родительский объект — это бизнес-объект типа parentsFqn с uuid parentUuid при выборке вложенных во вложенные.

    Если nestedInNested = false, то при работе фильтра учитываются только фильтры на дочерние объекты. Если nestedInNested = true, то появляется дополнительный слой родительских объектов.

    Пример 1. Найти всех сотрудников, вложенных в отдел с uuid = UUID:

    return api.filters.children().setParents('ou').setChildrenParentEq('employee', UUID);

    Пример 2. Найти всех сотрудников, вложенных во вложенные в отдел с uuid = UUID:

    return api.filters.children().setParentUuid('ou', UUID).setChildren('employee').setNestedInNested();

    Пример 3. Найти все отделы, вложенные во вложенные в отделы, где сотрудник с uuid = UUID является руководителем:

    return api.filters.children().setParents('ou', api.filters.attrValueEq('head', UUID)).setChildren('employee').setNestedInNested();

Методы создаваемого объекта фильтра InAttributeChainFilter

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

    • filter.setEqUuid(String uuid)

      Накладывает на конец или начало цепочки фильтр по uuid (классический вариант использования фильтра).

    • filter.setEndOfChainFilters(IObjectFilter... filters)

      Накладывает на конец цепочки набор заданных фильтров.

    • filter.setStartOfChainFilters(IObjectFilter... filters)

      Накладывает на начало цепочки набор заданных фильтров.

    • filter.setRelationWithNested(IAttributeFqn linkAttrFqn, String hierarchyAttrFqn)

      Устанавливает режим выборки связанных со вложенными:

      • linkAttrFqn FQN атрибута, после которого строится иерархия. Если linkAttrFqn.getCode == "currentObject", то иерархия строится от исходного объекта
      • hierarchyAttrFqn код атрибута, по которому строится иерархия.

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

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

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

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

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

    def attrChainTeamMembers = [
        api.types.newAttrReference('slmService', 'agreements'),
        api.types.newAttrReference('agreement', 'supplierTeam'),
        api.types.newAttrReference('team', 'members')];
    def teamFilter = api.filters.inAttributesChainAreObjects(attrChainTeamMembers).setEqUuid(user.UUID);
    def attrChainEmps = [
        api.types.newAttrReference('slmService', 'agreements'),
        api.types.newAttrReference('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));