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) možno získať pri každej evidencii v zozname polí.
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 správajú sa 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ávorky |
|
|
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. Ak si nie ste istí, použite závorky.
Nie je podporovaná varianta, ktorá skladá is not null or ... napríklad:
/faktura-vydana/(typDokl.typDoklK not like 'typDokladu.dobropis')
Je nutné použiť túto variantu, ktorá vracia požadovaný výsledok:
/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čnom vytváraní filtra stačí napísať ho 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 možno zadať čísla, textové reťazce, logické hodnoty, dátum a dátum+čas. Okrem toho možno 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, možno 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 možno filtrovať podľa odberateľa takto:
firma = 'code:FIRMA'
V prípade týchto väzieb možno bodkovou notáciou filtrovať aj podľa ich atribútov; napr. možno filtrovať vydané faktúry podľa skupiny odberateľa:
firma.skupFir = 'code:ODBĚRATEL-STANDARD'
Hĺbka zanorenia nie je obmedzená.
Pozor: z technických dôvodov nie je možné používať negatívne operátory (napr. <>). V takom prípade dostanete chybové hlásenie OR logical subselect filter not supported.
Filtrácia podľa štítkov
Okrem atribútov možno rovnakým spôsobom filtrovať aj podľa štítkov (ak sú štítky v danej evidencii podporované). Napr. ak chcete vyhľadať všetky cenníkové položky so štítkom VIP, filter bude:
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 možno použiť aj operátor and.
Filtrácia podľa príslušnosti do podstromu
Položky cenníka sú radené do stromovej štruktúry (je možné, že v budúcnosti pôjde do stromovej štruktúry radiť aj v iných evidenciách) a podľa tohto zaradenia možno 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é nie sú zaradené do stromu; v ňom filtrovať nemožno)
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) možno zapísať filter na 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 vyzeralo takto:
/c/firma/cenik/(in subtree 3)
Ak je potrebné získať položky iba z daného uzla a nie z celého podstromu, možno použiť modifikátor nonrecursive; napr. na získanie položiek iba z Kategórie 2, ale nie z Kategórie 2.1 a Kategórie 2.2, možno 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é v momente, keď je potrebné filtrovať iné evidencie podľa zaradenia cenníka do podstromu. Možno 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 umožňuje ľubovoľnú hĺbku zanorenia s výnimkou vlastností, ktoré nemajú jednoznačnú evidenciu. Inými slovami, filtrovať možno 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. pri niektorom 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 možno potlačiť pomocou parametra filtrovat-platnost nastaveného na hodnotu false.
Nasledujúci príklad ukazuje, ako možno 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)
Pozn.: Je nutné použiť interné ID.
