Na tej stronie opisujemy składnię, której należy używać do filtrowania kont.
Składnia
Wszystkie wartości inne niż liczby całkowite muszą być ujęte w cudzysłowy ("). Aby dowiedzieć się, jakie wartości akceptowane są w danym polu, zapoznaj się z jego dokumentacją.
Za pomocą funkcji AND
możesz filtrować wiele pól w jednym zapytaniu. Za pomocą AND
możesz też połączyć kilka filtrów relationship(...)
i service(...)
.
Oto przykład, w którym zastosowano kilka filtrów relationship(...)
i service(...)
:
(relationship(service(type = "ACCOUNT_MANAGEMENT") AND service(handshakeState = "PENDING"))) OR (accountName = "store" AND relationship(...))
W tym przykładzie zwracamy następujące konta:
Wszystkie konta powiązane z innym kontem oraz dodatkową relację, która oczekuje na zatwierdzenie.
Wszystkie konta z wyświetlaną nazwą
"store"
, które są powiązane z innymi kontami.
Za pomocą funkcji AND
nie możesz filtrować według wielu wartości w tym samym polu. Nie możesz na przykład użyć accountName = "*A*" AND accountName = "*B*"
.
Za pomocą funkcji OR
możesz odfiltrować 2 pola w tym samym zapytaniu. Po każdej stronie operatora OR
umieść kryteria filtra w nawiasach. Przykład: (accountName = "storeA") OR (accountName = "storeB")
.
Możesz użyć tylko OR
do połączenia 2 pól. Na przykład nie można użyć właściwości (accountName = "storeA") OR (accountName = "storeB") OR (accountName =
"storeC")
.
Nawiasy można używać tylko z operatorami AND
i OR
oraz w wywołaniach funkcji, np. relationship(...)
i service(...)
.
W przypadku pól ciągu znaków, takich jak accountName
i accountIdAlias
, możesz filtrować wartości, które zawierają określone słowo lub sekwencję znaków, umieszczając ciąg znaków w postaci gwiazdek (*
). Na przykład accountName = "*foo*"
zwraca wszystkie konta, których accountName
zawiera foo
, np. „storeFoo”.
Możesz filtrować wartości, które nie zawierają określonej sekwencji, używając elementów !=
i *
. Na przykład funkcja accountName != "*foo*"
zwraca wszystkie konta z parametrem accountName
, które nie zawiera ciągu foo
.
Dodatkowe spacje są ignorowane. Na przykład pole foo AND bar
jest tym samym co foo
AND bar
.
Specyfikacja
Filtry są zgodne ze specyfikacją filtra AI i jej formalną gramatą 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
: " = " | " != "
;