Składnia filtra

Na tej stronie opisujemy składnię, której należy użyć do filtrowania kont.

Składnia

Wszystkie wartości inne niż liczby całkowite muszą być ujęte w cudzysłów ("). Do akceptowane przez określone pole znajdziesz w dokumentacji dokumentacji dla tego pola.

Za pomocą funkcji AND możesz filtrować wiele pól w ramach tego samego zapytania. Możesz też użyj AND, aby połączyć kilka filtrów relationship(...) i service(...). Oto przykład, który łączy w sobie wartości relationship(...) i service(...) filtry:

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

Ten przykład zwraca te konta:

  • wszystkich kont powiązanych z zarządzaniem innym kontem, i kolejnej relacji, która oczekuje na akceptację.

  • Wszystkie konta o wyświetlanej nazwie "store", które są powiązane z innymi kontami.

Nie możesz używać filtra AND do filtrowania wielu wartości w tym samym polu. Dla: na przykład nie można używać accountName = "*A*" AND accountName = "*B*".

Za pomocą funkcji OR możesz filtrować 2 pola w tym samym zapytaniu. Zamknij filtr po każdej stronie operatora OR za pomocą nawiasów. Przykład: (accountName = "storeA") OR (accountName = "storeB")

Do połączenia 2 pól możesz użyć tylko pola OR. Na przykład nie można użyć atrybutu (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC")

Nawiasy są niedozwolone poza operatorami AND i OR oraz w wywołania funkcji, np. relationship(...) i service(...).

W przypadku pól z ciągami znaków, takich jak accountName i accountIdAlias, możesz filtrować zawierające określone słowo lub sekwencję znaków, umieszczając tag w sekwencji gwiazdek (*). Na przykład accountName = "*foo*" zwraca wszystkie na kontach z wartością accountName zawierającą foo, np. „storeFoo”.

Aby odfiltrować wartości, które nie zawierają określonej sekwencji, możesz użyć funkcji != i *. Na przykład funkcja accountName != "*foo*" zwraca wszystkie konta z parametrem accountName, które nie zawierają foo.

Dodatkowe spacje są ignorowane. Na przykład foo AND bar to to samo co foo AND bar.

Specyfikacja

Filtry są zgodne z podzbiorem filtra AIP. i jej formalnej wartości EBNF gramatyka:

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