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