Dotazovací jazyk REST API systému ABRA Gen
Zde jsou uvedeny možnosti dotazování v ABRA API.
Dotazování (také dotazovací jazyk nebo BO Query) v REST API ABRA Gen slouží k efektivnímu výběru dat ze systému ABRA Gen.
Dotaz lze specifikovat ve dvou formách:
V základní variantě se dotaz zapisuje ve formě query parametrů URL HTTP požadavku. Výběr je v základní variantě vždy uskutečňován nad kolekcí BO nebo importním manažerem.
Pro url zakódování/dekódování řetězců lze využít různé on-line nástroje typu URL decoder/encoder. (Zdroj pro download si naleznete na webu.)
V rozšířené variantě se dotaz zapisuje ve formě JSON dokumentu, který je zasílán v těle HTTP požadavku (je používána HTTP metoda POST).
Výběr je v rozšířené variantě uskutečňován:
- nad resourcem query podřízeným kolekci BO (např.
/{spojení}/{kolekce BO}/query
) - pak se v JSON dotazu neuvádí vlastnost class - nad obecným resourcem pro rozšířené dotazování s názvem query (
/{spojení}/query)
- pak se v JSON dotazu uvádí vlastnost class
Při výběru dat z kolekce BO nejsou ve výchozím stavu zahrnuty uživatelské ani nepersistentní položky.
Parametr /query
provádí dotaz na základě práv uživatele v závislosti na třídě (class), nad kterou dotaz běží.
- Třída s BO kontrolerem - Práva se vyhodnocují podle kontroleru spojeného s touto třídou (např. issuedinvoices).
- Třída bez BO kontroleru - Práva se ověřují na základě zpřístupnění položek pro API. Pokud nelze nastavit oprávnění ke spuštění dotazu, dotaz nebude proveden.
Uživatelé mají právo spouštět dotazy (opRun) na vybrané položky. Přístup k dalším položkám se nastavuje v agendě Zpřístupnění položek pro API.
Výraz je v dotazovacím jazyce sekvence jednoho nebo více operandů (operandem je field BO nebo výraz), v případné kombinaci s operátory (spojování řetězců, matematické operace atd.), který je možné vyhodnotit jako jednu hodnotu.
Příklad výrazu pro spojení polí Code a Name: Code || Name
Při použití výrazu v klauzuli SELECT dotazu je do názvu výsledného fieldu dosazen celý výraz. K jeho přejmenování slouží v základní variantě dotazování operátor as, v rozšířené variantě je nutné field specifikovat jako výrazový objekt (JSON objekt obsahující alias fieldu a výraz dosazovaný do jeho hodnoty).
Ve výrazech lze používat několik druhů operátorů:
- Řetězcové a aritmetické - jejich popis naleznete v tabulce na konci této kapitoly.
- Porovnávací - viz popis klauzule where v kapitole Příklady základního dotazování REST API ABRA Gen.
- Logické - viz sekce o kombinování výrazů ve stejné kapitole.
Operátory lze řetězit, vyhodnocovány jsou vždy zleva doprava, v případě aritmetických operátorů je patřičně aplikována přednost. Pořadí vykonávání výrazů lze ovlivňovat pomocí závorek.
Kromě operátorů je ve výrazech možné používat také obecné funkce.
Funkce | |||
---|---|---|---|
Funkce | Význam | Příklad použití | Popis příkladu |
Řetězcové funkce | |||
Převede řetězec na velká písmena |
|
Omezí výběr na objekty, jejichž název (Name) po převedení na velká písmena obsahuje řetězec ABRA. Tuto funkci, stejně jako její obdobu lower(), je možné používat i na jiných místech, např. v klauzuli orderby:
Bez použití funkcí upper() nebo lower() zohledňuje dotazování na řetězce a jejich části prostřednictvím Web API velikost písmen (je case sensitive Je-li nějaká položka case insensitive, znamená to, že není citlivá na velká a malá písmena, neboli nerozlišuje velká a malá písmena. Tzn., že není rozdíl, je-li napsáno např. "Abc" nebo "abc". Opak je case sensitive.), tj. pokud je v databázi firma uložená pod názvem "ABRA Software", následující dotaz vrátí prázdnou odpověď:
Je zapotřebí se dotázat takto:
|
|
Převede řetězec na malá písmena |
|
Omezí výběr na objekty, jejichž název (Name) po převedení na malá písmena obsahuje řetězec abra. |
Při zadání SQL příkazu a použití podmínky, v níž je textový sloupec (memo), se jeho porovnání vyhodnocuje jako case case insensitive Je-li nějaká položka case insensitive, znamená to, že není citlivá na velká a malá písmena, neboli nerozlišuje velká a malá písmena. Tzn., že není rozdíl, je-li napsáno např. "Abc" nebo "abc". Opak je case sensitive..
Příklad použití podmínky:SELECT ID FROM RestrictionDefinitions T_1 WHERE T_1.Note COLLATE UNICODE_LOCALE_CI like '%inTer%'
Z důvodu, že databázový server Oracle nepodporuje možnost nastavení COLLATE na těchto sloupcích, je výsledek dotazování vyhodnocovaný jako case sensitive Je-li nějaká položka case insensitive, znamená to, že není citlivá na velká a malá písmena, neboli nerozlišuje velká a malá písmena. Tzn., že není rozdíl, je-li napsáno např. "Abc" nebo "abc". Opak je case sensitive..