Синтаксис фильтра

На этой странице объясняется синтаксис, который необходимо использовать для фильтрации учетных записей .

Синтаксис

Все значения, кроме целых чисел, должны быть заключены в двойные кавычки ("). Чтобы узнать, какие значения принимает определенное поле, см. справочную документацию для этого поля.

Вы можете использовать AND для фильтрации нескольких полей в одном запросе. Вы также можете использовать AND для объединения нескольких фильтров relationship(...) и service(...) . Вот пример, который объединяет несколько фильтров relationship(...) и service(...) :

(relationship(service(type = "ACCOUNT_MANAGEMENT") AND service(handshakeState = "PENDING"))) OR (accountName = "store" AND relationship(...))

Этот пример возвращает следующие учетные записи:

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

  • Все учетные записи с отображаемым именем "store" , имеющие отношения к другим учетным записям.

Вы не можете использовать AND для фильтрации нескольких значений в одном поле. Например, вы не можете использовать accountName = "*A*" AND accountName = "*B*" .

Вы можете использовать OR для фильтрации двух полей в одном запросе. Заключите критерии фильтра с каждой стороны оператора OR в круглые скобки. Например, (accountName = "storeA") OR (accountName = "storeB") .

Вы можете использовать только OR для объединения двух полей. Например, вы не можете использовать (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC") .

Круглые скобки не допускаются, кроме как с операторами AND и OR , а также при вызовах функций, таких как relationship(...) и service(...) .

Для строковых полей, таких как accountName и accountIdAlias , вы можете фильтровать значения, содержащие определенное слово или последовательность символов, заключая последовательность в звездочки ( * ). Например, accountName = "*foo*" возвращает все учетные записи, accountName которых содержит foo , например "storeFoo".

Вы можете фильтровать значения, которые не содержат определенной последовательности, используя != и * . Например, accountName != "*foo*" возвращает все учетные записи, accountName которых не содержит foo .

Лишние пробелы игнорируются. Например, foo AND bar — это то же самое, что foo AND bar .

Спецификация

Фильтры соответствуют подмножеству спецификации фильтра AIP и его формальной грамматике EBNF :

filter
    : accountFilterDisj
    | accountFilterConj
    ;
accountFilterDisj
    : "(" accountFilterConj " OR " accountFilterConj ")"
    ;
accountFilterConj
    : accountFilter {" AND " accountFilter}
    ;
accountFilter
    : displayNameFilter | relationshipFn
    ;
displayNameFilter
    : "displayName" comparator value
    ;
relationshipFn
    : "relationship(" relationshipConj ")"
    ;
relationshipConj
    : relationshipFilter {" AND " relationshipFilter}
    ;
relationshipFilter
    : "providerId = " numValue
    | "callerHasAccessToProviderFilter()"
    | "externalAccountId" comparator value
    | "accountIdAlias" comparator value
    | serviceFn
    ;
serviceFn
    : "service(" serviceConj ")"
    ;
serviceConj
    : serviceFilter {" AND " serviceFilter}
    ;
serviceFilter
    : handshakeStateFilter
    | typeFilter
    ;
handshakeStateFilter
    : "handshakeState = " value
    ;
typeFilter
    : "type = " value
    ;
comparator
    : " = " | " != "
    ;