Filtre söz dizimi

Bu sayfada, hesapları filtrelemek için kullanmanız gereken söz dizimi açıklanmaktadır.

Söz dizimi

Tam sayılar dışındaki tüm değerler çift tırnak (") içine alınmalıdır. Belirli bir alanın hangi değerleri kabul ettiğini öğrenmek için ilgili alanın referans belgelerine bakın.

Aynı sorgudaki birden fazla alanı filtrelemek için AND simgesini kullanabilirsiniz. Ayrıca, birden fazla relationship(...) ve service(...) filtresini birleştirmek için AND simgesini kullanabilirsiniz. Aşağıda, birden fazla relationship(...) ve service(...) filtresini birleştiren bir örnek verilmiştir:

(relationship(service(type = "ACCOUNT_MANAGEMENT") AND service(handshakeState = "PENDING"))) OR (accountName = "store" AND relationship(...))

Bu örnek aşağıdaki hesapları döndürür:

  • Başka bir hesapla hesap yönetimi ilişkisi olan ve kabul edilmeyi bekleyen ek bir ilişkiye sahip tüm hesaplar.

  • Görünen adı "store" olan ve diğer hesaplarla ilişkisi olan tüm hesaplar.

Aynı alandaki birden fazla değeri filtrelemek için AND kullanamazsınız. Örneğin, accountName = "*A*" AND accountName = "*B*" kullanamazsınız.

Aynı sorguda iki alanı filtrelemek için OR kullanabilirsiniz. OR operatörünün her iki tarafındaki filtre ölçütlerini parantez içine alın. Örneğin, (accountName = "storeA") OR (accountName = "storeB").

İki alanı birleştirmek için yalnızca OR işlecini kullanabilirsiniz. Örneğin, (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC") kullanamazsınız.

Parantezlere yalnızca AND ve OR operatörleriyle birlikte ve relationship(...) ile service(...) gibi işlev çağrılarında izin verilir.

accountName ve accountIdAlias gibi dize alanlarında, belirli bir kelime veya karakter dizisi içeren değerleri filtrelemek için diziyi yıldız işaretleri (*) içine alabilirsiniz. Örneğin, accountName = "*foo*", foo içeren bir accountName ile tüm hesapları (ör. "storeFoo") döndürür.

!= ve * kullanarak belirli bir diziyi içermeyen değerleri filtreleyebilirsiniz. Örneğin, accountName != "*foo*", foo içermeyen bir accountName ile tüm hesapları döndürür.

Fazladan boşluklar yoksayılır. Örneğin, foo AND bar ile foo AND bar aynıdır.

Aşağıda, account.list yöntemini kullanarak hesapları filtrelemeyle ilgili birkaç örnek verilmiştir:

"* "Store" kelimesini içeren tüm MCA alt hesapları

accountName = "*store*" AND relationship(service(type = "ACCOUNT_AGGREGATION"))
  • 123456 sağlayıcısı tarafından yönetilen tüm hesaplar
relationship(service(type = "ACCOUNT_MANAGEMENT") AND providerId = 123456)
  • 123456 numaralı sağlayıcıya davetiye gönderen veya bu sağlayıcıdan gelen davetiyeyi kabul etmesi gereken tüm hesaplar
relationship(service(handshakeState = "PENDING" AND type ="ACCOUNT_MANAGEMENT")
AND providerId = 123456)

İsteği gönderen kullanıcının erişebileceği hesapları filtrelemek için aşağıdaki örnekte gösterildiği gibi google.shopping.merchant.accounts.v1.ListAccountsRequest yöntemini kullanın.

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);
  }
}

Spesifikasyon

Filtreler, AIP filtresi spesifikasyonunun bir alt kümesini ve resmi EBNF gramerini takip eder:

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
    : " = " | " != "
    ;