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 dokümanlarına bakın.

Aynı sorgudaki birden fazla alanı filtrelemek için AND kullanabilirsiniz. Birden fazla relationship(...) ve service(...) filtresini birleştirmek için AND simgesini de kullanabilirsiniz. Birden fazla relationship(...) ve service(...) filtresini birleştiren bir örnek aşağıda 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 ve kabul edilmeyi bekleyen ek bir ilişkisi olan tüm hesaplar.

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

Aynı alanda birden fazla değere göre filtrelemek için AND kullanamazsınız. Örneğin, accountName = "*A*" AND accountName = "*B*" kullanamazsınız.

Aynı sorgudaki iki alanı filtrelemek için OR kullanabilirsiniz. Filtre ölçütlerini OR operatörünün her iki tarafına da parantezle alın. Örneğin, (accountName = "storeA") OR (accountName = "storeB").

OR yalnızca iki alanı birleştirmek için kullanılabilir. Örneğin, (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC") kullanamazsınız.

AND ve OR operatörleri ile relationship(...) ve service(...) gibi işlev çağrılarında dışında paranteze izin verilmez.

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

!= ve * kullanarak belirli bir sıra içermeyen değerlere göre filtre uygulayabilirsiniz. Örneğin, accountName != "*foo*", foo içermeyen bir accountName içeren tüm hesapları döndürür.

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

account.list yöntemini kullanarak hesapları filtrelemeye ilişkin birkaç örnek aşağıda verilmiştir:

"* "Store" 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 sağlayıcısına davetiye gönderen veya bu sağlayıcıdan gelen bir daveti kabul etmesi gereken tüm hesaplar
relationship(service(handshakeState = "PENDING" AND type ="ACCOUNT_MANAGEMENT")
AND providerId = 123456)

İstekte bulunan kullanıcının erişebileceği hesapları filtrelemek için aşağıdaki örnekte gösterildiği gibi google.shopping.merchant.accounts.v1beta.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.v1beta.Account;
import com.google.shopping.merchant.accounts.v1beta.AccountsServiceClient;
import com.google.shopping.merchant.accounts.v1beta.AccountsServiceClient.ListAccountsPagedResponse;
import com.google.shopping.merchant.accounts.v1beta.AccountsServiceSettings;
import com.google.shopping.merchant.accounts.v1beta.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 dil bilgisini izler:

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