フィルタの構文

このページでは、アカウントをフィルタするために必要な構文について説明します。

構文

整数以外の値はすべて二重引用符(")で囲む必要があります。宛先 特定のフィールドで受け入れられる値については、リファレンス ドキュメントをご覧ください。

AND を使用すると、同じクエリ内で複数のフィールドをフィルタリングできます。また、 AND を使用して、複数の relationship(...) フィルタと service(...) フィルタを組み合わせる。 複数の relationship(...)service(...) を組み合わせる例を次に示します。 フィルタ:

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

この例では、次のアカウントを返します。

  • 別のアカウントに管理関係があるすべてのアカウント もう 1 つは承認待ちの 関係です

  • 表示名が「"store"」で、他のアカウントと関係があるすべてのアカウント。

AND を使用して、同じフィールド内の複数の値をフィルタリングすることはできません。対象 accountName = "*A*" AND accountName = "*B*" は使用できません。

OR を使用すると、同じクエリで 2 つのフィールドでフィルタリングできます。フィルターを囲む OR 演算子の両側の条件をかっこで囲みます。例: (accountName = "storeA") OR (accountName = "storeB")

OR は 2 つのフィールドを組み合わせるためにのみ使用できます。たとえば、 (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC")

括弧は、AND 演算子と OR 演算子を使用する場合を除いて使用できません。また、 relationship(...)service(...) などの関数呼び出し。

accountNameaccountIdAlias などの文字列フィールドでは、 特定の単語または一連の文字を含む値を アスタリスク付きシーケンス(*)。たとえば、accountName = "*foo*" はすべての accountNamefoo を含むアカウント(「storeFoo」など)

!= を使用すると、特定のシーケンスを含まない値をフィルタできます。 および *。たとえば accountName != "*foo*" は、 foo を含まない accountName

余分な空白文字は無視されます。たとえば、foo AND barfoo AND bar と同じです。

仕様

フィルタは AIP フィルタのサブセットに従います。 およびその正式な 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
    : " = " | " != "
    ;