Sintaxe do filtro

Esta página explica a sintaxe que você precisa usar para filtrar contas.

Sintaxe

Todos os valores, exceto os inteiros, precisam estar entre aspas duplas ("). Para saber quais valores um campo específico aceita, consulte a documentação de referência desse campo.

É possível usar AND para filtrar vários campos na mesma consulta. Você também pode usar AND para combinar vários filtros relationship(...) e service(...). Veja um exemplo que combina vários filtros relationship(...) e service(...):

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

Neste exemplo, retornamos as seguintes contas:

  • Todas as contas com uma relação de gerenciamento com outra conta e outro relacionamento com aceitação pendente.

  • Todas as contas com o nome de exibição "store", que têm relacionamentos com outras contas.

Não é possível usar AND para filtrar vários valores no mesmo campo. Por exemplo, não é possível usar accountName = "*A*" AND accountName = "*B*".

É possível usar OR para filtrar dois campos na mesma consulta. Coloque os critérios de filtro em cada lado do operador OR entre parênteses. Por exemplo, (accountName = "storeA") OR (accountName = "storeB").

Só é possível usar OR para combinar dois campos. Por exemplo, não é possível usar (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC").

Parênteses não são permitidos com exceção dos operadores AND e OR e das invocações de função, como relationship(...) e service(...).

Para campos de string, como accountName e accountIdAlias, é possível filtrar por valores que contêm uma determinada palavra ou sequência de caracteres colocando a sequência em asteriscos (*). Por exemplo, accountName = "*foo*" retorna todas as contas com um accountName contendo foo, como "storeFoo".

É possível filtrar por valores que não contêm uma determinada sequência usando != e *. Por exemplo, accountName != "*foo*" retorna todas as contas com um accountName que não contém foo.

Os espaços em branco extras são ignorados. Por exemplo, foo AND bar é igual a foo AND bar.

Especificação

Os filtros seguem um subconjunto da especificação filtro AIP e a gramática EBNF formal (links em inglês):

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