篩選器語法

本頁說明篩選帳戶時必須使用的語法。

語法

除了整數以外的所有值都必須以雙引號 () 括住。如要瞭解特定欄位接受的值,請參閱該欄位的參考說明文件

您可以使用 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 篩選同一項查詢中的兩個欄位。請用括號括住 OR 運算子兩邊的篩選器條件。例如:(accountName = "storeA") OR (accountName = "storeB")

您只能使用 OR 合併兩個欄位。例如,您無法使用 (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC")

ANDOR 運算子,以及函式叫用 (例如 relationship(...)service(...)) 不得使用括號。

對於 accountNameaccountIdAlias 等字串欄位,您可以在用星號 (*) 括住序列,篩選出包含特定字詞或字元序列的值。舉例來說,accountName = "*foo*" 會傳回 accountName 包含 foo (例如「storeFoo」) 的所有帳戶。

您可以使用 !=* 篩選不含特定序列的值。舉例來說,accountName != "*foo*" 會傳回 accountName 不含 foo 的所有帳戶。

系統會忽略多餘的空格。舉例來說,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
    : " = " | " != "
    ;