Filtersyntax

Auf dieser Seite wird die Syntax zum Filtern von Konten erläutert.

Syntax

Alle Werte außer Ganzzahlen müssen in doppelte Anführungszeichen (") gesetzt werden. Informationen dazu, welche Werte ein bestimmtes Feld akzeptiert, finden Sie in der Referenzdokumentation zum jeweiligen Feld.

Sie können AND verwenden, um nach mehreren Feldern in derselben Abfrage zu filtern. Sie können auch AND verwenden, um mehrere relationship(...)- und service(...)-Filter zu kombinieren. Im folgenden Beispiel werden mehrere relationship(...)- und service(...)-Filter kombiniert:

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

In diesem Beispiel werden die folgenden Konten zurückgegeben:

  • Alle Konten, bei denen eine Beziehung zur Kontoverwaltung zu einem anderen Konto besteht, und eine zusätzliche Beziehung, deren Annahme noch aussteht.

  • Alle Konten mit dem Anzeigenamen "store", die Beziehungen zu anderen Konten haben.

Sie können AND nicht verwenden, um nach mehreren Werten im selben Feld zu filtern. Sie können beispielsweise nicht accountName = "*A*" AND accountName = "*B*" verwenden.

Sie können OR verwenden, um nach zwei Feldern in derselben Abfrage zu filtern. Setzen Sie die Filterkriterien auf jeder Seite des Operators OR in Klammern. Beispiel: (accountName = "storeA") OR (accountName = "storeB").

Du kannst nur OR verwenden, um zwei Felder zu kombinieren. Sie können beispielsweise nicht (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC") verwenden.

Klammern sind nur in den Operatoren AND und OR sowie in Funktionsaufrufen wie relationship(...) und service(...) zulässig.

Bei Stringfeldern wie accountName und accountIdAlias können Sie nach Werten filtern, die ein bestimmtes Wort oder eine bestimmte Zeichenfolge enthalten, indem Sie die Sequenz in Sternchen (*) einschließen. Beispiel: accountName = "*foo*" gibt alle Konten mit einer accountName zurück, die foo enthält, z. B. „storeFoo“.

Mit != und * können Sie nach Werten filtern, die eine bestimmte Sequenz nicht enthalten. accountName != "*foo*" gibt beispielsweise alle Konten mit einer accountName zurück, die foo nicht enthält.

Zusätzliche Leerzeichen werden ignoriert. Beispielsweise ist foo AND bar mit foo AND bar identisch.

Spezifikation

Die Filter folgen einer Teilmenge der AIP-Filterspezifikation und ihrer formalen EBNF-Grammatik:

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