フィルタの構文

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

構文

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

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

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

この例では、次のアカウントが返されます。

  • 別のアカウントとアカウント管理関係にあるすべてのアカウントと、承認保留中の追加の関係。

  • 他のアカウントと関係がある、表示名が「"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*" と指定すると、foo を含む accountName を含むすべてのアカウントが返されます(「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
    : " = " | " != "
    ;