1. Domů
  2. Dokumentace
  3. API
  4. Filtrování

Filtrování

Obecný formát dotazu s filtry

Sestavení requestu s filtrem na řádky i sloupce (obecná syntaxe):

GET http(s)://[adresa API]/[Endpoint]?FILTER_CLAUSE&SELECT_CLAUSE

České znaky

Pokud hodnota (textové) property použitá v podmínce filtru obsahuje české znaky (obecně jakékoli znaky s diakritikou), je nutno takovouto hodnotu enkódovat dle následující tabulky (sloupec v UTF-8).

Operátory

Každý z operátorů je funkční jen pro atributy určitých datových typů – viz následující tabulka (ozn. x).

OperátorREST API v1.0REST API v2.0GraphQLTextová hodnotaČíselná hodnotaLogická hodnotaDatum
rovná seEqualeqeqxxxx
nerovná seNotEqualnenexxxx
méně nežLessltltxx
méně než / rovnoLessEquallteltexx
větší nežGreatergtgtxx
větší než / rovnoGreaterEqualgtegtexx
začíná naStartWithswswx
obsahujeContainsctctx
končí naEndWithewewx

Vlastnosti typu enum je možné filtrovat i na základě textové hodnoty,
např.: movementType~eq~Received je ekvivalentní s movementType~eq~1

Třídění

(REST) API v1.0

GET http(s)://[adresa API]/Company?order.OrderProperties[0].PropertyName=ObchNazev&order.OrderProperties[0].Direction=asc

            GET http://demo.moneys5.cz:81/Company?order.OrderProperties[0].PropertyName=ObchNazev&order.OrderProperties[0].Direction=asc
        
(REST) API v2.0

GET http(s)://[adresa API]/v2.0/Company?order=ObchNazev~asc

Směr třídění

asc                                       vzestupně
desc                                     sestupně

            GET http://demo.moneys5.cz:81/v2.0/Company?order=ObchNazev~asc
        

Filtrování řádků (WHERE) – FILTER_CLAUSE

(REST) API v1.0

Jednoduchý filtr:

GET http(s)://[adresa API]/ReceivedOrder?filter.PropertyName=SumaCelkemCM&filter.Operation=Equal&filter.ExpectedValue=6037,90

            GET http://demo.moneys5.cz:81/ReceivedOrder?filter.PropertyName=SumaCelkemCM&filter.Operation=Equal&filter.ExpectedValue=6037,90
        

Kombinovaný filtr (pole jednoduchých filtrů):

GET http(s)://[adresa API]/ReceivedOrder?filter.Filters[0].PropertyName=SumaCelkemCM&filter.Filters[0].Operation=GreaterEqual&filter.Filters[0].ExpectedValue=1000&filter.LogicOperator=AND&filter.Filters[1].PropertyName=SumaCelkemCM&filter.Filters[1].Operation=LessEqual&filter.Filters[1].ExpectedValue=4000

            GET http://demo.moneys5.cz:81/ReceivedOrder?filter.Filters[0].PropertyName=SumaCelkemCM&filter.Filters[0].Operation=GreaterEqual&filter.Filters[0].ExpectedValue=1000&filter.LogicOperator=AND&filter.Filters[1].PropertyName=SumaCelkemCM&filter.Filters[1].Operation=LessEqual&filter.Filters[1].ExpectedValue=4000
        

Složený filtr (pole jednoduchých a kombinovaných filtrů):

GET http(s)://[adresa API]/ReceivedOrder?filter.Filters[0].PropertyName=Faze&filter.Filters[0].Operation=Equal&filter.Filters[0].ExpectedValue=1&filter.LogicOperator=AND&filter.InnerLogics[0].Filters[0].PropertyName=Zakazka_ID&filter.InnerLogics[0].Filters[0].Operation=Equal&filter.InnerLogics[0].Filters[0].ExpectedValue=af2b8c86-1fce-4816-a93e-2a7201a73df3&filter.InnerLogics[0].Filters[1].PropertyName=Zakazka_ID&filter.InnerLogics[0].Filters[1].Operation=Equal&filter.InnerLogics[0].Filters[1].ExpectedValue=9c06a988-9345-44a2-9e5e-e46a828d3cd7&filter.InnerLogics[0].LogicOperator=OR

            GET http://demo.moneys5.cz:81/ReceivedOrder?filter.Filters[0].PropertyName=Faze&filter.Filters[0].Operation=Equal&filter.Filters[0].ExpectedValue=1&filter.LogicOperator=AND&filter.InnerLogics[0].Filters[0].PropertyName=Zakazka_ID&filter.InnerLogics[0].Filters[0].Operation=Equal&filter.InnerLogics[0].Filters[0].ExpectedValue=af2b8c86-1fce-4816-a93e-2a7201a73df3&filter.InnerLogics[0].Filters[1].PropertyName=Zakazka_ID&filter.InnerLogics[0].Filters[1].Operation=Equal&filter.InnerLogics[0].Filters[1].ExpectedValue=9c06a988-9345-44a2-9e5e-e46a828d3cd7&filter.InnerLogics[0].LogicOperator=OR
        
(REST) API v2.0

Jednoduchý filtr:
GET http(s)://[adresa API]/v2.0/Company?filter=ID~eq~d86fffe9-b2c6-4089-910c-17aba0952290

            GET http://demo.moneys5.cz:81/v2.0/Company?filter=ID~eq~d86fffe9-b2c6-4089-910c-17aba0952290
        

Jednoduchý filtr (filtrovaná hodnota obsahuje mezery):
GET http(s)://[adresa API]/v2.0/Company?filter=Nazev~eq~Byznys%20software,%20s.r.o.

            GET http://demo.moneys5.cz:81/v2.0/Company?filter=Nazev~eq~Byznys%20software,%20s.r.o.
        

Jednoduchý filtr (filtrování dle atributu typu datum):
GET http(s)://[adresa API]/v2.0/JobOrder?filter=DatumPlanovanehoZahajeni~eq~2022-02-22

            GET http://demo.moneys5.cz:81/v2.0/JobOrder?filter=DatumPlanovanehoZahajeni~eq~2022-02-22
        

Kombinovaný filtr (pole jednoduchých filtrů) [operátor AND]:
GET http(s)://[adresa API]/v2.0/ReceivedOrder?filter=SumaCelkemCM~gte~1000#SumaCelkemCM~lte~4000

            GET http://demo.moneys5.cz:81/v2.0/ReceivedOrder?filter=SumaCelkemCM~gte~1000#SumaCelkemCM~lte~4000
        

Kombinovaný filtr (pole jednoduchých filtrů) [operátor OR]:
GET http(s)://[adresa API]/v2.0/ReceivedOrder?filter=SumaCelkemCM~lte~1000|SumaCelkemCM~gte~4000

            GET http(s)://[adresa API]/v2.0/ReceivedOrder?filter=SumaCelkemCM~lte~1000|SumaCelkemCM~gte~4000
        

Filtrování sloupců (SELECT) – SELECT_CLAUSE

(REST) API v1.0

Úplná syntaxe:
GET http(s)://[adresa API]/IssuedInvoice?select.Properties[0]=ID&select.Properties[1]=CisloDokladu&select.Properties[2]=Nazev

Zkrácená syntaxe:
GET http(s)://[adresa API]/IssuedInvoice?select.Properties=ID,CisloDokladu,Nazev

            GET http://demo.moneys5.cz:81/IssuedInvoice?select.Properties=ID,CisloDokladu,Nazev
        
(REST) API v2.0

GET http(s)://[adresa API]/v2.0/IssuedInvoice?select=ID,CisloDokladu,Nazev

            GET http://demo.moneys5.cz:81/v2.0/IssuedInvoice?select=ID,CisloDokladu,Nazev
        

Filtrování sloupců je funkční i pro metody (endpointy) s omezeným počtem záznamů:

GET http(s)://[adresa API]/v2.0/IssuedInvoice/0/100?select=ID,CisloDokladu,Nazev

            GET http://demo.moneys5.cz:81/v2.0/IssuedInvoice/0/100?select=ID,CisloDokladu,Nazev
        

Filtrování sloupců není funkční pro metody (endpointy) pro konkrétní záznam (/{id}) => řeší se to zasláním dotazu na obecný endpoint s aplikovaným filtrem na pole ID:

GET http(s)://[adresa API]/v2.0/IssuedInvoice?filter=ID~eq~c47ac22e-38fb-48d8-ae30-47b39290d49e&select=ID,CisloDokladu,Nazev

            GET http://demo.moneys5.cz:81/v2.0/IssuedInvoice?filter=ID~eq~c47ac22e-38fb-48d8-ae30-47b39290d49e&select=ID,CisloDokladu,Nazev
        

Vrácené záznamy

(REST) API v1.0
Filtr na existující hodnotu dané property

GET http(s)://[adresa API]/Article/0/1000?select.Properties=Nazev,Kod,Katalog,TypArtiklu,Zaruka_Typ,Zaruka_Doba,DodaciLhuta_Typ,DodaciLhuta_Doba,ID&filter.PropertyName=ID&filter.Operation=Equal&filter.ExpectedValue=3466d27d-7381-4464-a97b-d49e1c355465

            GET http://demo.moneys5.cz:81/Article/0/1000?select.Properties=Nazev,Kod,Katalog,TypArtiklu,Zaruka_Typ, Zaruka_Doba,DodaciLhuta_Typ,DodaciLhuta_Doba,ID&filter.PropertyName=ID&filter.Operation=Equal&filter.ExpectedValue=3466d27d-7381-4464-a97b-d49e1c355465
        

API vrátí pouze daný záznam:

Filtr na neexistující hodnotu dané property

GET http(s)://[adresa API]/Article?select.Properties=Nazev,Kod,Katalog&filter.PropertyName=ID&filter.Operation=Equal&filter.ExpectedValue=efa349d7-bccd-4d2a-8dc8-60d3cba72984

            GET http://demo.moneys5.cz:81/Article?select.Properties=Nazev,Kod,Katalog&filter.PropertyName=ID&filter.Operation=Equal&filter.ExpectedValue=efa349d7-bccd-4d2a-8dc8-60d3cba72984
        
API nevrátí žádný záznam (prázdná množina):
Filtr na nevalidní hodnotu dané property

GET http(s)://[adresa API]/Article?select.Properties=ID,Nazev,Kod,Katalog&filter.PropertyName=ID&filter.Operation=Equal&filter.ExpectedValue=Autobus

Pozn. očekávanou hodnotu (ExpectedValue) nelze implicitně převést na požadovaný datový typ

API vrátí všechny záznamy, protože požadovaný filtr nelze korektně sestavit, tzn. provede se select dat bez aplikovaného filtru.

            GET http://demo.moneys5.cz:81/Article?select.Properties=ID,Nazev,Kod,Katalog&filter.PropertyName=ID&filter.Operation=Equal&filter.ExpectedValue=Autobus
        
Filtr na prázdnou (neuvedenou) hodnotu dané property

GET http(s)://[adresa API]/Article?select.Properties=ID,Nazev,Kod,Katalog&filter.PropertyName=ID&filter.Operation=Equal&filter.ExpectedValue=

API vrátí záznamy vyhovující podmínce [PropertyName] IS NULL.

            GET http://demo.moneys5.cz:81/Article?select.Properties=ID,Nazev,Kod,Katalog&filter.PropertyName=ID&filter.Operation=Equal&filter.ExpectedValue=
        
Filtr na neexistující property

GET http(s)://[adresa API]/Article?select.Properties=ID,Nazev,Kod,Katalog&filter.PropertyName=Akce&filter.Operation=Equal&filter.ExpectedValue=1

Pozn. daný objekt neobsahuje property (PropertyName), přes kterou se provádí filtrování

API vrátí všechny záznamy, protož požadovaný filtr nelze korektně sestavit, tzn. provede se select dat bez aplikovaného filtru.

            GET http://demo.moneys5.cz:81/Article?select.Properties=ID,Nazev,Kod,Katalog&filter.PropertyName=Akce&filter.Operation=Equal&filter.ExpectedValue=1
        

Omezení délky (složitosti) filtru

Maximální délka URL adresy i maximální délka parametrů dotazu (path) jsou na straně IIS omezeny. Pokud je použitý filtr složený z mnoha podmínek, může se stát, že jeho délka překročí dané omezení a takovýto request skončí chybou, např. 414 URI Too Long.

Toto nastavení lze v IIS upravit: Weby -> [web API] -> Filtrování požadavků -> Upravit nastavení funkcí

Swagger dokumentace z našeho demo serveru je dostupná na http://demo.moneys5.cz:81/swaggerDoc/. Pro údaje ClientID a ClientSecret si zažádejte pomocí formuláře.

Filtrování
Pomohl Vám tento článek? Ano 1 Ne

Jak Vám můžeme pomoci?