ไวยากรณ์ตัวกรอง

หน้านี้อธิบายไวยากรณ์ที่คุณต้องใช้เพื่อกรองบัญชี

ไวยากรณ์

ค่าทั้งหมดที่ไม่ใช่จำนวนเต็มจะต้องอยู่ในเครื่องหมายคำพูด 2 ขีด (") หากต้องการดูว่าช่องใดช่องหนึ่งยอมรับค่าใด โปรดดูเอกสารอ้างอิงของช่องนั้นๆ

คุณใช้ 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 เพื่อกรอง 2 ช่องในการค้นหาเดียวกันได้ ใส่วงเล็บปิดเกณฑ์ตัวกรองในแต่ละด้านของโอเปอเรเตอร์ OR ตัวอย่างเช่น (accountName = "storeA") OR (accountName = "storeB")

คุณสามารถใช้ OR เพื่อรวม 2 ช่องเข้าด้วยกันเท่านั้น ตัวอย่างเช่น คุณจะใช้ (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
    : " = " | " != "
    ;