本页介绍了过滤帐号时必须使用的语法。
语法
整数以外的所有值都必须用英文双引号 (") 括起来。如需了解特定字段接受哪些值,请参阅该字段的参考文档。
您可以使用 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
: " = " | " != "
;