本頁說明篩選帳戶時必須使用的語法。
語法
除了整數以外的所有值都必須以雙引號 () 括住。如要瞭解特定欄位接受的值,請參閱該欄位的參考說明文件。
您可以使用 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")
。
AND
和 OR
運算子,以及函式叫用 (例如 relationship(...)
和 service(...)
) 不得使用括號。
對於 accountName
和 accountIdAlias
等字串欄位,您可以在用星號 (*
) 括住序列,篩選出包含特定字詞或字元序列的值。舉例來說,accountName = "*foo*"
會傳回 accountName
包含 foo
(例如「storeFoo」) 的所有帳戶。
您可以使用 !=
和 *
篩選不含特定序列的值。舉例來說,accountName != "*foo*"
會傳回 accountName
不含 foo
的所有帳戶。
系統會忽略多餘的空格。舉例來說,foo AND bar
和 foo
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
: " = " | " != "
;