Filtersyntax

Auf dieser Seite wird die Syntax erläutert, die Sie zum Filtern von Konten verwenden müssen.

Syntax

Alle Werte, die keine Ganzzahlen sind, müssen in doppelten Anführungszeichen (") stehen. 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 AND auch 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(...))

Dieses Beispiel gibt die folgenden Konten zurück:

  • 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.

Mit AND können Sie nicht nach mehreren Werten im selben Feld filtern. Beispielsweise ist accountName = "*A*" AND accountName = "*B*" nicht zulässig.

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").

Mit OR können Sie nur zwei Felder kombinieren. Beispielsweise ist (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC") nicht zulässig.

Klammern sind nur mit den Operatoren AND und OR sowie in Funktionsaufrufen wie relationship(...) und service(...) zulässig.

Bei Stringfeldern wie accountName und accountIdAlias können Sie nach Werten filtern, die ein bestimmtes Wort oder eine bestimmte Zeichenfolge enthalten. Dazu setzen Sie die Zeichenfolge in Sternchen (*). Beispiel: accountName = "*foo*" gibt alle Konten mit einem accountName zurück, der foo enthält, z. B. „storeFoo“.

Sie können nach Werten filtern, die eine bestimmte Zeichenfolge nicht enthalten, indem Sie != und * verwenden. Beispiel: accountName != "*foo*" gibt alle Konten mit einem accountName zurück, der foo nicht enthält.

Zusätzliche Leerzeichen werden ignoriert. Beispiel: foo AND bar ist dasselbe wie foo AND bar.

Hier einige Beispiele für das Filtern von Konten mit der account.list:

"* Alle Unterkonten von Multi-Client-Konten, die „Store“ enthalten

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 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 google.shopping.merchant.accounts.v1.ListAccountsRequest Methode, 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-Filter Spezifikation 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"
    | "WAITING"
    | "ESTABLISHED"
    | "REJECTED"
    ;
serviceType
    : "ACCOUNT_AGGREGATION"
    | "ACCOUNT_MANAGEMENT"
    ;

comparator
    : " = " | " != "
    ;