Sintassi filtro

Questa pagina spiega la sintassi da utilizzare per filtrare gli account.

Sintassi

Tutti i valori, eccetto i numeri interi, devono essere racchiusi tra virgolette doppie ("). A sapere quali valori accetta uno specifico campo, consulta il riferimento documentazione per quel campo.

Puoi utilizzare AND per filtrare in base a più campi nella stessa query. Puoi anche utilizza AND per combinare più filtri relationship(...) e service(...). Ecco un esempio che combina più relationship(...) e service(...) filtri:

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

Questo esempio restituisce i seguenti account:

  • Tutti gli account con una relazione di gestione dell'account a un altro account. e una relazione aggiuntiva in attesa di accettazione.

  • Tutti gli account con il nome visualizzato "store" che hanno relazioni con altri account.

Non puoi utilizzare AND per filtrare in base a più valori nello stesso campo. Per Ad esempio, non puoi utilizzare accountName = "*A*" AND accountName = "*B*".

Puoi utilizzare OR per filtrare in base a due campi nella stessa query. Racchiudi il filtro su ciascun lato dell'operatore OR tra parentesi. Ad esempio: (accountName = "storeA") OR (accountName = "storeB").

Puoi utilizzare solo OR per combinare due campi. Ad esempio, non puoi utilizzare (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC").

Le parentesi sono consentite solo con gli operatori AND e OR e in chiamate di funzione, come relationship(...) e service(...).

Per campi stringa come accountName e accountIdAlias, puoi applicare un filtro per che contengono una determinata parola o sequenza di caratteri racchiudendo la sequenza di asterischi (*). Ad esempio, accountName = "*foo*" restituisce tutti account con un accountName contenente foo, come "storeFoo".

Puoi filtrare i valori che non contengono una determinata sequenza utilizzando != e *. Ad esempio, accountName != "*foo*" restituisce tutti gli account con un accountName che non contiene foo.

Gli spazi bianchi aggiuntivi vengono ignorati. Ad esempio, foo AND bar è uguale a foo AND bar.

Specifica

I filtri seguono un sottoinsieme del filtro AIP. e la sua formale EBNF grammatica:

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