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

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

ไวยากรณ์

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

คุณใช้ 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
    : " = " | " != "
    ;