Filtre söz dizimi

Bu sayfada, hesapları filtrelemek için kullanmanız gereken söz dizimi açıklanmaktadır.

Söz dizimi

Tam sayılar dışındaki tüm değerler çift tırnak (") içine alınmalıdır. Belirli bir alanın hangi değerleri kabul ettiğini öğrenmek için ilgili alanın referans belgelerine bakın.

Aynı sorgudaki birden çok alanı filtrelemek için AND kullanabilirsiniz. Birden fazla relationship(...) ve service(...) filtresini birleştirmek için AND kullanabilirsiniz. Birden çok relationship(...) ve service(...) filtresinin bir arada kullanıldığı bir örneği aşağıda bulabilirsiniz:

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

Bu örnek aşağıdaki hesapları döndürür:

  • Başka bir hesapla hesap yönetimi ilişkisi bulunan tüm hesaplar ve kabul edilmeyi bekleyen ek bir ilişki var.

  • "store" görünen adına sahip ve diğer hesaplarla ilişkisi olan tüm hesaplar.

Aynı alanda birden çok değeri filtrelemek için AND kullanamazsınız. Örneğin, accountName = "*A*" AND accountName = "*B*" kullanamazsınız.

Aynı sorgudaki iki alanı filtrelemek için OR kullanabilirsiniz. OR operatörünün her iki tarafındaki filtre ölçütlerini parantez içine alın. Örneğin, (accountName = "storeA") OR (accountName = "storeB").

İki alanı birleştirmek için yalnızca OR kullanabilirsiniz. Örneğin, (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC") kullanamazsınız.

AND ile OR operatörleri ve relationship(...) ile service(...) gibi işlev içi çağrılar dışında parantezlere izin verilmez.

accountName ve accountIdAlias gibi dize alanları için belirli bir kelimeyi veya karakter dizisini içeren değerleri yıldız işareti (*) içine alarak değerleri filtreleyebilirsiniz. Örneğin accountName = "*foo*", "storeFoo" gibi foo içeren bir accountName içeren tüm hesapları döndürür.

!= ve * kullanarak belirli bir sırayı içermeyen değerleri filtreleyebilirsiniz. Örneğin, accountName != "*foo*", foo içermeyen accountName içeren tüm hesapları döndürür.

Fazladan boşluklar yok sayılır. Örneğin, foo AND bar, foo AND bar ile aynıdır.

Spesifikasyon

Filtreler, AIP filtresi spesifikasyonunun ve resmi EBNF dil bilgisinin bir alt kümesine uyar:

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