Filter sintaksis

Halaman ini menjelaskan sintaksis yang harus Anda gunakan untuk memfilter akun.

Sintaksis

Semua nilai selain bilangan bulat harus diapit dalam tanda kutip ganda ("). Untuk mempelajari nilai yang diterima kolom tertentu, lihat dokumentasi referensi untuk kolom tersebut.

Anda dapat menggunakan AND untuk memfilter beberapa kolom dalam kueri yang sama. Anda juga dapat menggunakan AND untuk menggabungkan beberapa filter relationship(...) dan service(...). Berikut adalah contoh yang menggabungkan beberapa filter relationship(...) dan service(...):

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

Contoh ini akan menampilkan akun berikut:

  • Semua akun dengan hubungan pengelolaan akun dengan akun lain, dan hubungan tambahan yang menunggu persetujuan.

  • Semua akun dengan nama tampilan "store", yang memiliki hubungan dengan akun lain.

Anda tidak dapat menggunakan AND untuk memfilter beberapa nilai di kolom yang sama. Misalnya, Anda tidak dapat menggunakan accountName = "*A*" AND accountName = "*B*".

Anda dapat menggunakan OR untuk memfilter dua kolom dalam kueri yang sama. Sertakan kriteria filter di setiap sisi operator OR dengan tanda kurung. Contohnya, (accountName = "storeA") OR (accountName = "storeB").

Anda hanya dapat menggunakan OR untuk menggabungkan dua kolom. Misalnya, Anda tidak dapat menggunakan (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC").

Tanda kurung tidak diizinkan selain dengan operator AND dan OR, dan dalam pemanggilan fungsi, seperti relationship(...) dan service(...).

Untuk kolom string seperti accountName dan accountIdAlias, Anda dapat memfilter nilai yang berisi kata atau urutan karakter tertentu dengan menyertakan urutan tersebut dengan tanda bintang (*). Misalnya, accountName = "*foo*" menampilkan semua akun dengan accountName yang berisi foo, seperti "storeFoo".

Anda dapat memfilter nilai yang tidak berisi urutan tertentu menggunakan != dan *. Misalnya, accountName != "*foo*" menampilkan semua akun dengan accountName yang tidak berisi foo.

Spasi kosong tambahan akan diabaikan. Misalnya, foo AND bar sama dengan foo AND bar.

Spesifikasi

Filter mengikuti subset spesifikasi filter AIP, dan tata bahasa EBNF formalnya:

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