ফিল্টার সিনট্যাক্স

এই পৃষ্ঠাটি ব্যাখ্যা করে যে সিনট্যাক্সটি আপনাকে অ্যাকাউন্ট ফিল্টার করতে ব্যবহার করতে হবে।

সিনট্যাক্স

পূর্ণসংখ্যা ব্যতীত অন্য সকল মান অবশ্যই ডবল কোট (") এ আবদ্ধ থাকতে হবে। একটি নির্দিষ্ট ক্ষেত্র কোন মানগুলি গ্রহণ করে তা জানতে, সেই ক্ষেত্রের রেফারেন্স ডকুমেন্টেশন দেখুন।

আপনি একই ক্যোয়ারীতে একাধিক ক্ষেত্র ফিল্টার করতে AND ব্যবহার করতে পারেন। আপনি একাধিক relationship(...) এবং service(...) ফিল্টার একত্রিত করতে AND ব্যবহার করতে পারেন। এখানে একটি উদাহরণ রয়েছে যা একাধিক 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*" foo ধারণ করে একটি accountName সহ সমস্ত অ্যাকাউন্ট ফেরত দেয়, যেমন "storeFoo"।

আপনি != এবং * ব্যবহার করে একটি নির্দিষ্ট ক্রম ধারণ করে না এমন মানগুলির জন্য ফিল্টার করতে পারেন। উদাহরণস্বরূপ, accountName != "*foo*" একটি accountName সহ সমস্ত অ্যাকাউন্ট ফেরত দেয় যাতে foo নেই।

অতিরিক্ত সাদা স্থান উপেক্ষা করা হয়. উদাহরণস্বরূপ, foo AND bar foo AND bar মতই।

account.list পদ্ধতি ব্যবহার করে অ্যাকাউন্ট ফিল্টার করার কয়েকটি উদাহরণ এখানে দেওয়া হল:

"* সমস্ত MCA সাব-অ্যাকাউন্ট যেখানে "স্টোর" আছে

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