Operátory v akcích a přehledech

Upravit obsah stránky

V rámci nastavování podmínek v přehledech, tedy potažmo SQL dotazech a podmínek v akcích, tedy potažmo v XPath dotazech Flexideo nabízí různé možnosti srovnávání hodnot (viz. výčet níže).
Zatímco v přehledech slouží srovnávací operátory pro filtrování potřebných dat pomocí jednotlivých výrazů případně řazených do větších, logických celků, v akcích většinou slouží buď pro dodatečné filtrování zdrojových dat nebo pro řízení logiky akcí. XPath a nabízené operátory pak vedle akcí slouží ještě také k přepočtu hodnot vracených z databáze.

Běžné operátory
Pro srovnání celých hodnot textových a především číselných akce a přehledy disponují těmito srovnávacími operátory.

    bullet

    = (rovná se)

    bullet

    <> (nerovná se)

    bullet

    > (větší než)

    bullet

    >= (větší než nebo rovno)

    bullet

    < (menší než)

    bullet

    <= (menší než nebo rovno)


Specifické operátory
Následující sada má více odlišností v závislosti na použití buď v tabulkách nebo v akcích a zatímco běžné operátory jsou dostupné v obojím a až na mírné odlišnosti více méně fungují stejně jak v akcích tak tabulkách, následující sada je výrazně specifičtější:

    bullet

    jako (LIKE) - výhradně pro tabulky (SQL)

    bullet

    je (zadáno) - jak pro tabulky tak i akce (s výhradami viz níže)

    bullet

    není (zadáno) - jak pro tabulky tak i akce (s výhradami viz níže)

    bullet

    začíná s (starts-with) - výhradně pro akce (XPath)

    bullet

    obsahuje (contains) - výhradně pro akce (XPath)

    bullet

    je (údaj) - specifický pro akce (kombinace XPath)

    bullet

    není (údaj) - specifický pro akce (kombinace XPath)

    bullet

    je ve (IN (...) ) - výhradně pro tabulky (SQL)

    bullet

    není ve (NOT IN (...) ) - výhradně pro tabulky (SQL)

    bullet

    je ano (logická hodnota) - specifický pro akce (kombinace XPath)

    bullet

    není ano (logická hodnota) - specifický pro akce (kombinace XPath)

    bullet

    je ne (logická hodnota) - specifický pro akce (kombinace XPath)


Pokud je nějaký operátor uveden pro akce, je možné jej většinou použít i v rámci dopočítávaných hodnot nad daty vracenými v tabulce z SQL databáze či akční tabulky.

Nyní se podíváme na specifika jednotlivých operátorů.

Běžné operátory

První sada operátorů, nazývaných jako běžné, je k dispozici jak v tabulkách tak také akcích (a úpravách hodnot nad tabulkami) nabízí základní sadu pro porovnání jak hodnot textových, tak také číselných a logických.
Případná specifika chování se pak řídí specifikami dle specifik buď SQL (tabulky) nebo XPath (akce a úpravy hodnot). Například výraz s operátorem = (rovná se), kde na levé straně i pravé straně je řetězec, tedy sada znaků textu, funguje v obou prostředích stejně (pokud na obou stranách jsou texty). Pokud hodnota na jedné straně chybí (není zadána) pak už se obě prostředí mírně odlišují, například prázdný řetězec se nebude rovnat neuvedenému výrazu (null) v databázi, ale může se za jistých okolností rovnat neuvedené hodnotě, chybějcícímu uzlu v XPath a pod.
Stejně tak například operátory > (věší než) a < (menší než) se mohou mírně odlišovat při srovnávání řetězců nebo při porovnávání čísla a řetězce, kdy dochází ke snaze o převod hodnoty na číslo či z čísla na řetězec.
Obecně pro běžné operátory platí, že fungují dobře a transparentně, pokud máme jednak zajištěnu existenci hodnot na obou stranách a také typ těchto hodnot na obou stranách. Ve většině ostatních případů se pak chovají dle obecných zvyklostí.
Pro běžné operátory také platí, že se při jejich využití pracuje s celou hodnotou na obou stranách.

Operátory jako, obsahuje, začíná s...

Operátor jako je operátor databázový, který aplikuje SQL operátor LIKE dle pravidel databáze (viz. např. zde). Zejména pak je využíván například v hledáčcích, kdy můžeme ve spojení s tzv. dodatečným zadáním používat buď výchozí nastavení např.
    bullet

    kontakt.jmeno LIKE 'novák%'

který najde jak pana Novák, tak také paní Novákovou s tím, že při dodatečném zadání se do dotazu zástupný znak % (procenta) doplňuje obslužným skriptem automaticky.
Tento příklad funguje vlastně stejně, jako operátor začíná s, která pro akce a úpravy hodnot může zajistit vyhledání či ověření faktu, že určitý řetězec, jako třeba "Nováková" začíná s hodnotou "Novák".

Je třeba však dát pozor na některá specifika, jako například citlivost na malé a velké znaky, kdy v rámci XML standardu a tedy i XPath je pevně dána citlivost na malé / velké znaky, takže "Nováková" NEzačíná řetězcem "novák", ale řetězcem znaků "Novák". Oproti tomu, většina databází je case IN sensitive, tedy velikost znaků nerozlišuje, ale především je to dáno nastavením té, které databáze. Pro je ale možné toto chování v rámci jednoho výrazu ve Flexideo tabulkách upravit.

Obdobně se chová operátor obsahuje (contains), který je opět citlivý na velikost znaků, ale jinak plní v akcích a úpravách hodnot obdobně jako tabulkový výraz
    bullet

    kontakt.jmeno LIKE '%ovák%'

Zjišťuje tedy, zda řetězec znaků na levé straně obsahuje řetězec znaků na straně pravé. Na úrovni databáze takto fungují (ne příliš efektivně) výrazy pro tzv. fulltextové vyhledávání.

Operátory je - není (zadáno)

Výrazy je (zadáno) a není (zadáno) na úrovní SQL databáze jsou vlastně logickou negací IS (NOT) NULL, tedy
    bullet

    je zadáno  odpovídá  SQL zápisu IS NOT NULL, zatímco

    bullet

    není (zadáno)  odpovídá SQL zápisu IS NULL;


V prostředí akcí jsou tyto operátory převáděny na kontrolu existence uzlů, tedy se ptáme, zda určitý atribut či element ve zdroji dat existuje (je) či nikoli (není), tedy:
    bullet

    je zadáno  odpovídá  EXISTENCI uzlu bez ohledu na jeho obsah,

    bullet

    není (zadáno)  odpovídá NEEXISTENCI uzlu ve zdroji.


Často bývá, že zdrojem dat pro určitou část akce jsou tabulková data, kde například u některých záznamů chybí data (tj. např. datum narození). Tuto skutečnost jsme stejným operátorem je či není schopni v akcích ověřovat stejně, jako toho jsme schopni v databázi. Tedy můžeme například v tabulce chtít jen záznamy, kde platí že  datum narození je zadáno. A pokud to neuděláme v tabulce (přičemž pokud to dává jen trochu smysl, je lépe dělat takovou filtraci již přímo v tabulce, protože pak není třeba pracovat s větším objemem dat), pokud tedy máme v akci tabulková data s datem narození i bez něj, tak jsme schopni stejně zadaným výrazem provést identickou filtraci zdroje až dodatečně v akci.

Operátory je údaj - není údaj

Naproti tomu operátory je údaj a není údaj jsou použitelné jen v rámci akcí a úprav hodnot. Na rozdíl od prostého je / není zadáno jde o kombinovaný test. Takže operátor je údaj testuje nejen existenci uzlu, ale také to, zda textový obsah tohoto uzlu obsahuje hodnotu a operátor není údaj naproti tomu vylučuje existenci hodnoty bez ohledu na to, zda uzel existuje či nikoli. Tohoto výsledku je dosahováno kombinovaným XPath výrazem (na rozdíl od prostého je / není zadáno), ale jeho využitelnost je výrazně komfortnější a spolehlivější, jelikož se výsledek takového výrazu soustředí na to zda máme či nemáme hodnotu bez ohledu na "technikálii" existence uzlu.

Co ale znamená ÚDAJ?

U různých datových typů se za existenci údaje považuje:
    bullet

    řetězec, který není prázdný (tj. obsahuje alespoň jeden znak, vč. mezery);

    bullet

    číslo či klíč, který obsahuje nenulovou hodnotu, tedy kladné či záporné číslo;

    bullet

    logická hodnota TRUE (FALSE tedy není brána jako hodnota!).


Data a časy se chovají stejně jako řetězce, je-li tedy datum, např. 1.1.1900, jde o výskyt údaje

Operátory je ve - není ve

Zde jde opět čistě SQL výraz, který implementuje množinový srovnávací výraz IN (...), příp. NOT IN (...), přičemž uvnitř závorek se má vyskytovat množina hodnot (minimálně alespoň 1) a na levé straně výrazu pak jedna hodnota určitého datového typu, jejíž výskyt v množině se testuje.

V akcích takovýto množinový výraz k dispozici není, ale je možné jej nahradit custom šablonou.

Operátory je ano, je ne, není ano

Tyto operátory jsou, podobně jako operátory pro testování údaje, realizovány kombinací možností XPath, jen s tím rozdílem, že se zaměřují na logické hodnoty. Je tedy možné je použít pouze v akcích. Předností jejich využití je schopnost v různých datových zdrojích, kdy někde je za logické ano považováno klíčové slovo true jinde je za logické ano dosazena číslice 1 nebo totéž pro logické ne je schopnost abstrahovat od konkrétní reprezentace logického ano a logického ne.

Explicitně jsou testovány testovány na výskyt je ano a je ne, je testováno chybějící není ano, ale není k dispozici explicitní test na není ne.