نحو فیلتر

این صفحه نحوی را که باید برای فیلتر کردن حساب‌ها استفاده کنید توضیح می‌دهد.

نحو

همه مقادیر به غیر از اعداد صحیح باید در دو گیومه (") محصور شوند. برای اینکه بدانید یک فیلد خاص چه مقادیری را می پذیرد، به مستندات مرجع آن فیلد مراجعه کنید.

می‌توانید از AND برای فیلتر کردن چندین فیلد در یک کوئری استفاده کنید. همچنین می توانید از AND برای ترکیب چندین فیلتر relationship(...) و service(...) استفاده کنید. در اینجا مثالی آورده شده است که چندین فیلتر relationship(...) و service(...) را ترکیب می کند:

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

این مثال حساب های زیر را برمی گرداند:

  • همه حساب‌های دارای رابطه مدیریت حساب با حساب دیگری، و یک رابطه اضافی که در انتظار پذیرش است.

  • همه حساب‌های با نام نمایشی "store" که با حساب‌های دیگر ارتباط دارند.

شما نمی توانید از AND برای فیلتر کردن چندین مقدار در یک فیلد استفاده کنید. برای مثال، نمی‌توانید از accountName = "*A*" AND accountName = "*B*" استفاده کنید.

می توانید از OR برای فیلتر کردن دو فیلد در یک پرس و جو استفاده کنید. معیارهای فیلتر را در هر طرف عملگر OR با پرانتز قرار دهید. به عنوان مثال، (accountName = "storeA") OR (accountName = "storeB") .

شما فقط می توانید از OR برای ترکیب دو فیلد استفاده کنید. برای مثال، نمی‌توانید (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC") استفاده کنید.

پرانتز غیر از عملگرهای AND و OR ، و در فراخوانی‌های تابع، مانند relationship(...) و service(...) مجاز نیست.

برای فیلدهای رشته‌ای مانند accountName و accountIdAlias ، می‌توانید مقادیری را که حاوی کلمه یا دنباله خاصی از کاراکترها هستند با قرار دادن دنباله در ستاره ( * ) فیلتر کنید. برای مثال، accountName = "*foo*" همه حساب‌های دارای accountName حاوی foo را برمی‌گرداند، مانند "storeFoo".

با استفاده از != و * می توانید مقادیری را که حاوی دنباله خاصی نیستند فیلتر کنید. به عنوان مثال، accountName != "*foo*" همه حساب‌های دارای accountName که حاوی foo نیست برمی‌گرداند.

فضاهای سفید اضافی نادیده گرفته می شوند. برای مثال، foo AND bar همان foo AND bar است.

در اینجا چند نمونه از فیلتر کردن حساب ها با استفاده از روش account.list آورده شده است:

"* همه حساب های فرعی MCA حاوی "Store"

accountName = "*store*" AND relationship(service(type = "ACCOUNT_AGGREGATION"))
  • همه حساب هایی که توسط ارائه دهنده 123456 مدیریت می شوند
relationship(service(type = "ACCOUNT_MANAGEMENT") AND providerId = 123456)
  • همه حساب هایی که دعوت نامه ای برای ارائه دهنده 123456 ارسال کرده اند یا نیاز به پذیرش دعوت نامه از این ارائه دهنده دارند.
relationship(service(handshakeState = "PENDING" AND type ="ACCOUNT_MANAGEMENT")
AND providerId = 123456)

برای فیلتر کردن حساب‌هایی که کاربر درخواست کننده می‌تواند به آن دسترسی داشته باشد، از روش google.shopping.merchant.accounts.v1.ListAccountsRequest استفاده کنید، همانطور که در نمونه زیر نشان داده شده است.

جاوا

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

مشخصات

فیلترها زیر مجموعه ای از مشخصات فیلتر AIP و دستور زبان رسمی EBNF آن را دنبال می کنند:

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