Filtrování záznamů

Záznamy ve FlexiBee 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
= nebo == nebo eq Rovnost Operátor se rovná hodnotě a = 1
<> nebo != nebo ne nebo neq Nerovnost Operátor se nerovná hodnotě a != 1
< nebo lt Menší a < 1
<= nebo lte Menší nebo rovno a <= 1
> nebo gt Větší a > 1
>= nebo gte Větší nebo rovno a >= 1
like Obsahuje Záznam obsahuje řetězec a like 'inStr'
like similar 1) Obsahuje bez ohledu na háčky a čárky Záznam obsahuje řetězec bez ohledu na háčky a čárky a like similar 'inStr'
between Je v rozsahu vek between 18 100
begins Začíná na a begins 'Win'
begins similar 1) Začíná na bez ohledu na háčky a čárky a begins similar 'Win'
ends Končí na a ends 'Strom'
in Je prvkem výčtu a in (1, 2, 3)
in subtree Patří do podstromu (viz níže) in subtree 1
is true/false Porovnání logických hodnot a is true
is [not] null Je (není) vyplněno a is null
is [not] empty Je (není) prázdné není vyplněno nebo je nula/false/prázdný řetězec a is not empty
  1. Operátory ze skupiny similar fungují správně pouze na FlexiBee 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
and Logický operátor and Umožňuje kombinovat podmínky a = 1 and b = 1
or Logický operátor or Umožňuje kombinovat podmínky a = 1 or b = 1
not Logický operátor not Negace podmínky not a = 1
( ) Závorky (a = 1 or b = 1) and (c = 2)

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.

Proměnná Název Popis Ukázka
now() Aktuální datum a čas Umožňuje zobrazovat záznamy s ohledem na aktuální datum. datSplat < now()
currentYear() Aktuální rok Umožňuje zobrazovat záznamy s ohledem na aktuální rok. platiDo <= currentYear()
me() Jméno přihlášeného uživatele Umožňuje zobrazovat záznamy s ohledem na aktuálně přihlášeného uživatele. uzivatel = me()

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)