Esta página explica a sintaxe que você precisa usar para filtrar contas.
Sintaxe
Todos os valores que não forem números inteiros precisam estar entre aspas duplas ("). Para saber quais valores um campo específico aceita, consulte a referência documentação desse campo.
É possível usar AND para filtrar vários campos na mesma consulta. Também é possível usar AND para combinar vários filtros relationship(...) e service(...).
Confira um exemplo que combina vários filtros relationship(...) e service(...):
(relationship(service(type = "ACCOUNT_MANAGEMENT") AND service(handshakeState = "PENDING"))) OR (accountName = "store" AND relationship(...))
Este exemplo retorna as seguintes contas:
Todas as contas com um relacionamento de gerenciamento de contas com outra conta e um relacionamento adicional que está pendente de aceitação.
Todas as contas com o nome de exibição
"store"que têm relacionamentos com outras contas.
Não é possível usar AND para filtrar vários valores no mesmo campo. Por
exemplo, não é possível usar accountName = "*A*" AND accountName = "*B*".
É possível usar OR para filtrar dois campos na mesma consulta. Coloque os critérios de filtro de cada lado do operador OR entre parênteses. Por exemplo,
(accountName = "storeA") OR (accountName = "storeB").
Só é possível usar OR para combinar dois campos. Por exemplo, não é possível usar
(accountName = "storeA") OR (accountName = "storeB") OR (accountName =
"storeC").
Os parênteses não são permitidos, exceto com os operadores AND e OR e em invocações de função, como relationship(...) e service(...).
Para campos de string, como accountName e accountIdAlias, é possível filtrar
valores que contêm uma determinada palavra ou sequência de caracteres, colocando a
sequência entre asteriscos (*). Por exemplo, accountName = "*foo*" retorna todas as
contas com um accountName que contém foo, como "storeFoo".
É possível filtrar valores que não contêm uma determinada sequência usando != e *. Por exemplo, accountName != "*foo*" retorna todas as contas com um
accountName que não contém foo.
Os espaços em branco extras são ignorados. Por exemplo, foo AND bar é o mesmo que foo
AND bar.
Confira alguns exemplos de filtragem de contas usando o account.list:
"* Todas as subcontas de uma conta avançada que contém "Store"
accountName = "*store*" AND relationship(service(type = "ACCOUNT_AGGREGATION"))
- Todas as contas gerenciadas pelo provedor 123456
relationship(service(type = "ACCOUNT_MANAGEMENT") AND providerId = 123456)
- Todas as contas que enviaram um convite para o provedor 123456 ou precisam aceitar um convite desse provedor
relationship(service(handshakeState = "PENDING" AND type ="ACCOUNT_MANAGEMENT")
AND providerId = 123456)
Para filtrar as contas que o usuário que está fazendo a solicitação pode acessar, use o
google.shopping.merchant.accounts.v1.ListAccountsRequest método, conforme mostrado no exemplo a seguir.
Java
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.Account;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient.ListAccountsPagedResponse;
import com.google.shopping.merchant.accounts.v1.AccountsServiceSettings;
import com.google.shopping.merchant.accounts.v1.ListAccountsRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/** This class demonstrates how to filter the accounts the user making the request has access to. */
public class FilterAccountsSample {
public static void filterAccounts(Config config) throws Exception {
// Obtains OAuth token based on the user's configuration.
GoogleCredentials credential = new Authenticator().authenticate();
// Creates service settings using the credentials retrieved above.
AccountsServiceSettings accountsServiceSettings =
AccountsServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Calls the API and catches and prints any network failures/errors.
try (AccountsServiceClient accountsServiceClient =
AccountsServiceClient.create(accountsServiceSettings)) {
// Filter for accounts with display names containing "store" and a provider with the ID "123":
String filter = "accountName = \"*store*\" AND relationship(providerId = 123)";
// Filter for all subaccounts of account "123":
// String filter2 = "relationship(providerId = 123 AND service(type =
// \"ACCOUNT_AGGREGATION\"))";
// String filter3 = "relationship(service(handshakeState = \"APPROVED\" AND type =
// \"ACCOUNT_MANAGEMENT\") AND providerId = 123)";
ListAccountsRequest request = ListAccountsRequest.newBuilder().setFilter(filter).build();
System.out.println("Sending list accounts request with filter:");
ListAccountsPagedResponse response = accountsServiceClient.listAccounts(request);
int count = 0;
// Iterates over all rows in all pages and prints the sub-account
// in each row.
// `response.iterateAll()` automatically uses the `nextPageToken` and recalls the
// request to fetch all pages of data.
for (Account account : response.iterateAll()) {
System.out.println(account);
count++;
}
System.out.print("The following count of elements were returned: ");
System.out.println(count);
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) throws Exception {
Config config = Config.load();
filterAccounts(config);
}
}
Especificação
Os filtros seguem um subconjunto da especificação de filtro da AIP e a gramática EBNF formal:
filter
: accountFilterDisj
| accountFilterConj
accountFilterDisj
: "(" accountFilterConj " OR " accountFilterConj ")"
;
accountFilterConj
: accountFilter {" AND " accountFilter}
;
accountFilter
: accountNameFilter | capabilityFilter | relationshipFn
;
accountNameFilter
: "accountName" comparator value
;
capabilityFilter
: "capabilities:" capabilityValue
| "-capabilities:" capabilityValue
| "NOT capabilities:" capabilityValue
;
capabilityValue
: "CAN_UPLOAD_PRODUCTS"
;
relationshipFn
: "relationship(" relationshipConj ")"
;
relationshipConj
: relationshipFilter {" AND " relationshipFilter}
;
relationshipFilter
: "providerId = " numValue
| "accountIdAlias" comparator value
| serviceFn
;
serviceFn
: "service(" serviceConj ")"
;
serviceConj
: serviceFilter {" AND " serviceFilter}
;
serviceFilter
: "externalAccountId" comparator value
| "handshakeState = " handshakeState
| "type = " serviceType
;
handshakeState
: "PENDING"
| "WAITING"
| "ESTABLISHED"
| "REJECTED"
;
serviceType
: "ACCOUNT_AGGREGATION"
| "ACCOUNT_MANAGEMENT"
;
comparator
: " = " | " != "
;