Záznamy v ABRA Flexi je možné filtrovať. Hodnoty vo filtroch môžu byť buď priamo – podporované typy premenných, identifikátory záznamov alebo zástupné (napr. now() či me()).
Zoznam podporovaných atribútov a ich hodnoty (podľa typu) je možné získať pri každej evidencii v zozname políčok.
Podporované operátory
Operátor | Názov | Popis | Ukážka |
| Rovnosť | Operátor sa rovná hodnote |
|
| Nerovnosť | Operátor sa nerovná hodnote |
|
| Menší |
|
|
| Menší alebo rovný |
|
|
| Väčší |
|
|
| Väčší alebo rovný |
|
|
| Obsahuje | Záznam obsahuje reťazec |
|
| Obsahuje bez ohľadu na diakritiku | Záznam obsahuje reťazec bez ohľadu na diakritiku |
|
| Je v rozsahu |
|
|
| Začína na |
|
|
| Začína na bez ohľadu na diakritiku |
|
|
| Končí na |
|
|
| Je prvkom výčtu |
|
|
| Patrí do podstromu | (pozri nižšie) |
|
| Porovnanie logických hodnôt |
|
|
| Je (nie je) vyplnené |
|
|
| Je (nie je) prázdne | nie je vyplnené alebo je nula/false/prázdny reťazec |
|
📝 Operátory zo skupiny similar fungujú správne iba na ABRA Flexi s databázou PostgreSQL 9.0 alebo novšou. So staršou verziou databázy tieto operátory diakritiku rozlišujú, čiže sa správajú rovnako ako operátory bez kľúčového slova similar.
Operátor | Názov | Popis | Ukážka |
| Logický operátor and | Umožňuje kombinovať podmienky |
|
| Logický operátor or | Umožňuje kombinovať podmienky |
|
| Logický operátor not | Negácia podmienky |
|
| Zátvorky |
|
|
Operátory majú obvyklú prioritu: základné operátory v prvej tabuľke najvyššiu, potom not, and a najnižšiu prioritu má operátor or. Pokiaľ si nie ste istí, použite zátvorky.
ℹ️ Negáciu je možné zapísať dvoma spôsobmi a oba vracajú rovnaký výsledok — buď negatívnym operátorom, alebo obalením podmienky do not(...):
/faktura-vydana/(typDokl.typDoklK not like 'typDokladu.dobropis')
/faktura-vydana/(not(typDokl.typDoklK eq 'typDokladu.dobropis'))
Premenná | Názov | Popis | Ukážka |
| Aktuálny dátum a čas | Umožňuje zobrazovať záznamy s ohľadom na aktuálny dátum. |
|
| Aktuálny rok | Umožňuje zobrazovať záznamy s ohľadom na aktuálny rok. |
|
| Meno prihláseného používateľa | Umožňuje zobrazovať záznamy s ohľadom na aktuálne prihláseného používateľa. |
|
Filtre musia byť v URL správne zakódované. Pri ručnej tvorbe filtra ho stačí napísať nezakódovaný v prehliadači Firefox. Keď ho potom skopírujete do schránky, Firefox ho prekóduje.
Zápis hodnôt
Vo výrazoch ako a = 1 je možné zadať čísla, textové reťazce, logické hodnoty, dátum a dátum+čas. Okrem toho je možné použiť funkcie uvedené v tabuľke vyššie.
Čísla môžu byť celé, -1 alebo 10, a desatinné, 5.8 alebo -10.0.
Textové reťazce môžu byť uvedené v úvodzovkách, "abc", alebo apostrofoch, 'abc'.
Logické hodnoty sú iba true a false.
Dátum sa zadáva v tvare YYYY-MM-DD, napr. 2011-11-01, dátum a čas v tvare YYYY-MM-DD'T'HH:MM:SS[.sss], napr. 2011-11-01T12:30:00. Nie sú povolené všetky spôsoby zápisu podľa ISO 8601, iba tieto dva (resp. tri) tu uvedené.
Keď sa uvádza väzba na objekt, je možné použiť ľubovoľný identifikátor. Interné ID sa zapisujú ako čísla (firma = 1), ostatné identifikátory ako reťazce (firma = 'code:ABC').
Filtrácia podľa vnorených hodnôt
Niektoré atribúty, podľa ktorých sa filtruje, sú v skutočnosti väzby. Napr. vydané faktúry je možné filtrovať podľa odberateľa takto:
firma = 'code:FIRMA'
V prípade týchto väzieb je možné bodkovou notáciou filtrovať aj podľa ich atribútov; napr. je možné filtrovať vydané faktúry podľa skupiny odberateľa:
firma.skupFir = 'code:ODBĚRATEL-STANDARD'
Hĺbka zanorenia nie je obmedzená.
⚠️ Negatívne operátory (napr. <>, !=) pri vnorených hodnotách je možné použiť, ale majú jedno obmedzenie: filtru vyhovejú iba záznamy, ktoré majú väzobnú vlastnosť vyplnenú. Napríklad pri filtri /faktura-vydana/(typDokl.radaPrijem.kod!='FAKTURA-STANDARD') je rad nepovinný — vyberú sa teda záznamy, ktoré rad vyplnený majú, ale hodnota kódu sa líši.
Filtrácia podľa štítkov
Okrem atribútov je možné rovnakým spôsobom filtrovať aj podľa štítkov (pokiaľ sú štítky v danej evidencii podporované). Napr. ak chcete vyhľadať všetky cenníkové položky so štítkom VIP, bude filter:
stitky='code:VIP'
a celá URL potom
/c/firma/cenik/(stitky='code:VIP').xml
Alebo ak chcete všetky so štítkami VIP alebo DULEZITE, použijete:
stitky='code:VIP' or stitky='code:DULEZITE'
resp.
/c/firma/cenik/(stitky='code:VIP' or stitky='code:DULEZITE').xml
Rovnako je možné použiť aj operátor and.
Filtrácia podľa príslušnosti do podstromu
Položky cenníka sú zaradené do stromovej štruktúry (je možné, že v budúcnosti pôjde do stromovej štruktúry zaraďovať aj v iných evidenciách) a podľa tohto zaradenia je možné aj filtrovať. Uvažujme tento strom cenníka:
Strom cenníka
Pripojené položky
(id = 2)Kategória 1
(id = 3)Kategória 1.1
(id = 4)Kategória 1.2
(id = 5)Kategória 1.2.1
(id = 6)
Kategória 2
(id = 7)Kategória 2.1
(id = 8)Kategória 2.2
(id = 9)
Nepripojené položky (virtuálny uzol, pod ktorým sa v aplikácii zobrazujú položky, ktoré do stromu nie sú zaradené; v ňom filtrovať nie je možné)
Takto sa strom zobrazuje v aplikácii, avšak na účely stromovej kategorizácie položiek považujeme za koreň až Pripojené položky. Uvedené ID sú len ilustračné; ak pracujete so stromom cez REST API, odporúča sa použiť externé identifikátory.
Nad cenníkom (/c/firma/cenik) je možné zapísať filter pre získanie všetkých položiek z Kategórie 1 a všetkých podkategórií (teda z uzlov Kategória 1, Kategória 1.1, Kategória 1.2 a Kategória 1.2.1) takto:
in subtree 3
čo je vlastne skrátený zápis pre
id in subtree 3
Celá URL by vyzerala takto:
/c/firma/cenik/(in subtree 3)
Ak je potrebné získať položky len z daného uzla a nie z celého podstromu, je možné použiť modifikátor nonrecursive; napr. pre získanie položiek len z Kategórie 2, ale nie už z Kategórie 2.1 a Kategórie 2.2, je možné písať
in subtree 7 nonrecursive
/c/firma/cenik/(in subtree 7 nonrecursive)
Vyššie bolo uvedené, že zápis in subtree 3 je skratkou pre id in subtree 3, čo je dôležité vo chvíli, keď je potrebné podľa zaradenia cenníka do podstromu filtrovať iné evidencie. Je možné napr. vyfiltrovať všetky skladové karty pre cenníkové položky z určitého podstromu, takto:
cenik in subtree 3
/c/firma/skladova-karta/(cenik in subtree 3)
Filtrácia cez relačné vlastnosti
Filter dovoľuje ľubovoľnú hĺbku zanorenia s výnimkou vlastností, ktoré nemajú jednoznačnú evidenciu. Inými slovami, filtrovať je možné iba v prípade relácie 1:1.
/udalost/(zakazka.mistUrc.mesto = 'Praha')
V prípade potreby filtrovať v položkách dokladu je nutné filtrovať priamo v evidencii položiek:
/faktura-vydana-polozka/(doklFak=123 and cenik ="code:AUTO")
Predvolený filter platnosti
Všetky evidencie, ktoré majú properties platiOd a platiDo, sú v predvolenom stave filtrované podľa aktuálneho účtovného obdobia. Ak máme napr. u niektorého z cenníkov nastavené platiDo na hodnotu 2020, tak sa tento cenník nezobrazí v evidencii cenik, ak je aktuálne účtovné obdobie 2021. Toto správanie je možné potlačiť pomocou parametra filtrovat-platnost nastaveného na hodnotu false.
Nasledujúci príklad ukazuje, ako je možné v aktuálnom účtovnom období získať cenníky platné do roku 2020.
/c/firma/cenik/(platiDo = 2020).xml?filtrovat-platnost=false
Používateľské filtre
Na uloženie filtra slúži evidencia Používateľské filtre. Na vytvorenie filtra je potrebné pracovať s poľami evidencie /filtr.
Ukážka vytvorenia filtra 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ážka filtrácie evidencie s použitím uloženého filtra:
/c/firma/cenik/(filter:2)
ℹ️ Pri uloženom filtri je nutné použiť interné ID.
