Składnia filtra

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
    : " = " | " != "
    ;