Záznamy v ABRA Flexi je možné filtrovat. Hodnoty ve filtrech mohou být buď přímo – podporované typy proměnných, identifikátory záznamů nebo zástupné (např. now()
či me()
).
Seznam podporovaných atributů a jejich hodnoty (dle typu) lze získat u každé evidence v seznamu políček.
Podporované operátory:
Operátor | Název | Popis | Ukázka |
| Rovnost | Operátor se rovná hodnotě |
|
| Nerovnost | Operátor se nerovná hodnotě |
|
| Menší |
|
|
| Menší nebo rovno |
|
|
| Větší |
|
|
| Větší nebo rovno |
|
|
| Obsahuje | Záznam obsahuje řetězec |
|
| Obsahuje bez ohledu na háčky a čárky | Záznam obsahuje řetězec bez ohledu na háčky a čárky |
|
| Je v rozsahu |
|
|
| Začíná na |
|
|
| Začíná na bez ohledu na háčky a čárky |
|
|
| Končí na |
|
|
| Je prvkem výčtu |
|
|
| Patří do podstromu | (viz níže) |
|
| Porovnání logických hodnot |
|
|
| Je (není) vyplněno |
|
|
| Je (není) prázdné | není vyplněno nebo je nula/false/prázdný řetězec |
|
Operátory ze skupiny similar
fungují správně pouze na ABRA Flexi s databází PostgreSQL 9.0 nebo novější. Se starší verzí databáze tyto operátory háčky a čárky rozlišují, či-li chovají se stejně jako operátory bez klíčového slova similar
.
Operátor | Název | Popis | Ukázka |
| Logický operátor and | Umožňuje kombinovat podmínky |
|
| Logický operátor or | Umožňuje kombinovat podmínky |
|
| Logický operátor not | Negace podmínky |
|
| Závorky |
|
|
Operátory mají obvyklou prioritu: základní operátory v první tabulce nejvyšší, pak not
, and
a nejnižší prioritu má operátor or
. Pokud si nejste jistí, použijte závorky.
Není podporována varianta, která složí is not null or ...
například:
/faktura-vydana/(typDokl.typDoklK not like 'typDokladu.dobropis')
Je nutné použít tuto variantu, která vrací požadovaný výsledek:
/faktura-vydana/(not(typDokl.typDoklK eq 'typDokladu.dobropis'))
Proměnná | Název | Popis | Ukázka |
| Aktuální datum a čas | Umožňuje zobrazovat záznamy s ohledem na aktuální datum. |
|
| Aktuální rok | Umožňuje zobrazovat záznamy s ohledem na aktuální rok. |
|
| Jméno přihlášeného uživatele | Umožňuje zobrazovat záznamy s ohledem na aktuálně přihlášeného uživatele. |
|
Filtry musí být v URL správně zakódovány. Při ruční tvorbě filtru jej stačí napsat nezakódovaný v prohlížeči Firefox. Když jej pak zkopírujete do schránky, Firefox jej překóduje.
Zápis hodnot
Ve výrazech jako a = 1
lze zadat čísla, textové řetězce, logické hodnoty, datum a datum+čas. Kromě toho lze použít funkce uvedené v tabulce výše.
Čísla mohou být celá, -1
nebo 10
, a desetinná, 5.8
nebo -10.0
.
Textové řetězce mohou být uvedeny v uvozovkách, "abc"
, nebo apostrofech, 'abc'
.
Logické hodnoty jsou pouze true
a false
.
Datum se zadává ve tvaru YYYY-MM-DD
, např. 2011-11-01
, datum a čas ve tvaru YYYY-MM-DD'T'HH:MM:SS[.sss]
, např. 2011-11-01T12:30:00
. Nejsou povoleny všechny způsoby zápisu podle ISO 8601, pouze tyto dva (resp. tři) zde uvedené.
Když se uvádí vazba na objekt, lze použít libovolný identifikátor. Interní ID se zapisují jako čísla (firma = 1
), ostatní identifikátory jako řetězce (firma = 'code:ABC'
).
Filtrace podle vnořených hodnot
Některé atributy, podle kterých se filtruje, jsou ve skutečnosti vazby. Např. vydané faktury lze filtrovat podle odběratele takto:
firma = 'code:FIRMA'
V případě těchto vazeb lze tečkovou notací filtrovat i podle jejich atributů; např. lze filtrovat vydané faktury podle skupiny odběratele:
firma.skupFir = 'code:ODBĚRATEL-STANDARD'
Hloubka zanoření není omezena.
Pozor: z technických důvodů nelze používat negativní operátory (např. <>
). V takovém případě dostanete chybové hlášení OR logical subselect filter not supported
.
Filtrace podle štítků
Kromě atributů lze stejným způsobem filtrovat i podle štítků (pokud jsou štítky v dané evidenci podporovány). Např. pokud chcete vyhledat všechny ceníkové položky se štítkem VIP, bude filtr:
stitky='code:VIP'
a celé URL pak
/c/firma/cenik/(stitky='code:VIP').xml
Nebo pokud chcete všechny se štítky VIP nebo DULEZITE, použijete:
stitky='code:VIP' or stitky='code:DULEZITE'
resp.
/c/firma/cenik/(stitky='code:VIP' or stitky='code:DULEZITE').xml
Stejně lze použít i operátor and
.
Filtrace podle příslušnosti do podstromu
Položky ceníku jsou řazeny do stromové struktury (je možné, že v budoucnu půjde do stromové struktury řadit i v jiných evidencích) a podle tohoto zařazení lze také filtrovat. Uvažujme tento strom ceníku:
Strom ceníku
Připojené položky
(id = 2)
Kategorie 1
(id = 3)
Kategorie 1.1
(id = 4)
Kategorie 1.2
(id = 5)
Kategorie 1.2.1
(id = 6
)
Kategorie 2
(id = 7)
Kategorie 2.1
(id = 8)
Kategorie 2.2
(id = 9)
Nepřipojené položky (virtuální uzel, pod kterým se v aplikaci zobrazují položky, které do stromu nejsou zařazeny; v něm filtrovat nelze)
Takto se strom zobrazuje v aplikaci, ovšem pro účely stromové kategorizace položek považujeme za kořen až Připojené položky. Uvedená ID jsou jen ilustrační; pokud pracujete se stromem přes REST API, je doporučeno použít externí identifikátory.
Nad ceníkem (/c/firma/cenik
) lze zapsat filtr pro získání všech položek z Kategorie 1 a všech podkategorií (tedy z uzlů Kategorie 1, Kategorie 1.1, Kategorie 1.2 a Kategorie 1.2.1) takto:
in subtree 3
což je vlastně zkrácený zápis pro
id in subtree 3
Celé URL by vypadalo takto:
/c/firma/cenik/(in subtree 3)
Pokud je potřeba získat položky jen z daného uzlu a ne z celého podstromu, lze použít modifikátor nonrecursive
; např. pro získání položek jen z Kategorie 2, ale ne už z Kategorie 2.1 a Kategorie 2.2, lze psát
in subtree 7 nonrecursive /c/firma/cenik/(in subtree 7 nonrecursive)
Výše bylo uvedeno, že zápis in subtree 3
je zkratkou pro id in subtree 3
, což je důležité ve chvíli, kdy je potřeba podle zařazení ceníku do podstromu filtrovat jiné evidence. Lze např. vyfiltrovat všechny skladové karty pro ceníkové položky z určitého podstromu, takto:
cenik in subtree 3 /c/firma/skladova-karta/(cenik in subtree 3)
Filtrace přes relační vlastnosti
Filtr dovoluje libovolnou hloubku zanoření s výjimkou vlastností, které nemají jednoznačnou evidenci. Jinými slovy, filtrovat lze pouze v případě relace 1:1.
/udalost/(zakazka.mistUrc.mesto = 'Praha')
V případě potřeby filtrovat v položkách dokladu, je nutné filtorvat přímo v evidenci položek:
/faktura-vydana-polozka/(doklFak=123 and cenik ="code:AUTO")
Výchozí filtr platnosti
Všechny evidence, které mají properties platiOd
a platiDo
, jsou ve výchozím stavu filtrovány podle aktuálního účetního období. Pokud máme např. u některého z ceníků nastavené platiDo
na hodnotu 2020, tak se tento ceník nezobrazí v evidenci cenik
, pokud je aktuální účetní období 2021. Toto chování lze potlačit pomocí parametru filtrovat-platnost
nastaveného na hodnotu false
.
Následující příklad ukazuje, jak lze v aktuálním účetním období získat ceníky platné do roku 2020.
/c/firma/cenik/(platiDo = 2020).xml?filtrovat-platnost=false
Uživatelské filtry
Pro uložení filtru slouží evidence Uživatelské filtry. Pro vytvoření filtru je potřeba pracovat s poli evidence /filtr.
Ukázka vytvoření filtru s vybranou hodnotou štítku:
<winstrom version="1.0">
<filtr>
<nazev>Stitky filtr</nazev>
<kod>stitky</kod>
<beanKey>cz.winstrom.vo.cen.Cenik</beanKey>
<obsahFiltru>((stitky = 3))</obsahFiltru>
</filtr>
</winstrom>
Ukázka filtrace evidence s použitím uloženého filtru:
/c/firma/cenik/(filter:2)
Pozn.: Je nutné použít interní ID.