На этой странице объясняется синтаксис, который необходимо использовать для фильтрации учетных записей .
Синтаксис
Все значения, кроме целых чисел, должны быть заключены в двойные кавычки ("). Чтобы узнать, какие значения принимает определенное поле, см. справочную документацию для этого поля.
Вы можете использовать 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
: " = " | " != "
;