بنية الفلتر

توضّح هذه الصفحة البنية التي يجب استخدامها من أجل فلترة الحسابات.

البنية

يجب وضع جميع القيم باستثناء الأعداد الصحيحة بين علامتَي اقتباس مزدوجتَين ("). ولمعرفة القيم التي يقبلها حقل معيّن، يُرجى الاطّلاع على الوثائق المرجعية لذلك الحقل.

يمكنك استخدام 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.

المواصفات

تتّبع الفلاتر مجموعة فرعية من مواصفات فلتر AIP، وقاعدة EBNF الرسمية:

filter
    : accountFilterDisj
    | accountFilterConj
    ;
accountFilterDisj
    : "(" accountFilterConj " OR " accountFilterConj ")"
    ;
accountFilterConj
    : accountFilter {" AND " accountFilter}
    ;
accountFilter
    : displayNameFilter | relationshipFn
    ;
displayNameFilter
    : "displayName" comparator value
    ;
relationshipFn
    : "relationship(" relationshipConj ")"
    ;
relationshipConj
    : relationshipFilter {" AND " relationshipFilter}
    ;
relationshipFilter
    : "providerId = " numValue
    | "callerHasAccessToProviderFilter()"
    | "externalAccountId" comparator value
    | "accountIdAlias" comparator value
    | serviceFn
    ;
serviceFn
    : "service(" serviceConj ")"
    ;
serviceConj
    : serviceFilter {" AND " serviceFilter}
    ;
serviceFilter
    : handshakeStateFilter
    | typeFilter
    ;
handshakeStateFilter
    : "handshakeState = " value
    ;
typeFilter
    : "type = " value
    ;
comparator
    : " = " | " != "
    ;