Auf dieser Seite wird die Syntax beschrieben, die Sie zum Filtern von Konten verwenden müssen.
Syntax
Alle Werte, die keine Ganzzahlen sind, müssen in doppelte Anführungszeichen (") eingeschlossen werden. Welche Werte für ein bestimmtes Feld akzeptiert werden, erfahren Sie in der Referenzdokumentation für dieses Feld.
Mit AND
können Sie in derselben Abfrage nach mehreren Feldern filtern. Sie können auch AND
verwenden, um mehrere relationship(...)
- und service(...)
-Filter zu kombinieren.
Hier ein Beispiel, in dem mehrere relationship(...)
- und service(...)
-Filter kombiniert werden:
(relationship(service(type = "ACCOUNT_MANAGEMENT") AND service(handshakeState = "PENDING"))) OR (accountName = "store" AND relationship(...))
In diesem Beispiel werden die folgenden Konten zurückgegeben:
Alle Konten mit einer Kontoverwaltungsbeziehung zu einem anderen Konto und einer zusätzlichen Beziehung, die noch nicht akzeptiert wurde.
Alle Konten mit dem Anzeigenamen
"store"
, die Beziehungen zu anderen Konten haben.
Sie können AND
nicht verwenden, um nach mehreren Werten im selben Feld zu filtern. Sie können beispielsweise nicht accountName = "*A*" AND accountName = "*B*"
verwenden.
Mit OR
können Sie in derselben Abfrage nach zwei Feldern filtern. Setzen Sie die Filterkriterien auf beiden Seiten des OR
-Operators in Klammern. Beispiel: (accountName = "storeA") OR (accountName = "storeB")
.
Sie können OR
nur verwenden, um zwei Felder zu kombinieren. Sie können beispielsweise nicht (accountName = "storeA") OR (accountName = "storeB") OR (accountName =
"storeC")
verwenden.
Klammern sind nur bei den Operatoren AND
und OR
sowie bei Funktionsaufrufen wie relationship(...)
und service(...)
zulässig.
Bei String-Feldern wie accountName
und accountIdAlias
können Sie nach Werten filtern, die ein bestimmtes Wort oder eine bestimmte Zeichenfolge enthalten. Dazu schließen Sie die Zeichenfolge in Sternchen (*
) ein. Mit accountName = "*foo*"
werden beispielsweise alle Konten mit einem accountName
zurückgegeben, das foo
enthält, z. B. „storeFoo“.
Mit !=
und *
können Sie nach Werten filtern, die eine bestimmte Sequenz nicht enthalten. Beispiel: accountName != "*foo*"
gibt alle Konten mit einem accountName
zurück, das foo
nicht enthält.
Zusätzliche Leerzeichen werden ignoriert. foo AND bar
entspricht beispielsweise foo
AND bar
.
Hier sind einige Beispiele für das Filtern von Konten mit der Methode account.list:
„* Alle MCA-Unterkonten mit ‚Store‘“
accountName = "*store*" AND relationship(service(type = "ACCOUNT_AGGREGATION"))
- Alle Konten, die von Anbieter 123456 verwaltet werden
relationship(service(type = "ACCOUNT_MANAGEMENT") AND providerId = 123456)
- Alle Konten, die eine Einladung an den Anbieter 123456 gesendet haben oder eine Einladung von diesem Anbieter annehmen müssen
relationship(service(handshakeState = "PENDING" AND type ="ACCOUNT_MANAGEMENT")
AND providerId = 123456)
Wenn Sie nach den Konten filtern möchten, auf die der Nutzer, der die Anfrage stellt, zugreifen kann, verwenden Sie die Methode google.shopping.merchant.accounts.v1.ListAccountsRequest
, wie im folgenden Beispiel gezeigt.
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);
}
}
Spezifikation
Die Filter folgen einer Teilmenge der AIP-Filterspezifikation und ihrer formalen EBNF-Grammatik:
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"
| "APPROVED"
| "REJECTED"
;
serviceType
: "ACCOUNT_AGGREGATION"
| "ACCOUNT_MANAGEMENT"
;
comparator
: " = " | " != "
;