Omezení načítání velkého počtu datových řádků
Velký počet uživatelsky načítaných datových řádků je nejčastější příčinou zpomalení odezvy aplikací ESO9. Protože se nelze spoléhat, že uživatelé budou vyplňovat „rozumné“ filtrovací podmínky, existuje několik možností, které umožňují správci aplikace (resp. implementátorovi) k tomu uživatele donutit.
Povinný STARTFILTER do stránky
Nejsnazší metodou je přidání povinného StartFiltru do stránky nebo na odkaz (StartFilter=2). Bez zadání filtrovacích podmínek pak nelze vstoupit do formuláře. Nevýhodou tohoto řešení je jeho snadné obcházení, tj. zadání velmi obecných filtrovacích podmínek (účetní období ~ 2, název subjektu ~ % apod.).
Parametr MAXDATAROWS do stránky
Parametr umožní omezení datového zdroje na definovaný počet řádků uvedený v hodnotě parametru (MaxDataRows=5000). V záhlaví formuláře se přitom uživateli objeví upozornění, že bylo načtení prvních X řádků.
Oba předchozí parametry lze vložit do stránky napevno nebo pomocí dynamických uživatelských akcí (viz Dynamické uživatelské akce). Použití uživatelských akcí je přitom vhodnější, protože se jednak uplatní pouze vybraným uživatelům (tj. těm, s nimiž se nelze domluvit jinak) a jednak není nutné kvůli jedné drobné úpravě kopírovat formulář do aplikačního webu (zůstává tedy startkový).
Příklad:
<input type="hidden" name="MaxDataRows" value="5000">
Parametr MAXDATAROWS pro uživatele
Parametr MaxDataRows lze zadávat buď selektivně do vybraných formulářů, nebo jej lze zadat centrálně do tabulky uživatelů. Takto zadané omezení se bude týkat všech uživatelem otvíraných datových zdrojů. Parametr se vyhodnocuje vzhledem ke kalendáři pracovních, mimopracovních a volných (soboty, neděle) hodin, tj. lze nastavit větší restrikce v pracovní dobu a menší mimo ni. Podrobnější popis viz Popis novinek verze 5.0.
Parametr MAXDATAROWSALLOW
Oba předchozí parametry mají jeden společný neduh: data se načtou dle uživatelem zadaných filtrovacích podmínek a podle počtu řádků potom zabírají určité množství paměti aplikačního serveru.
Parametr MAXDATAROWSALLOW umožňuje podmíněné načtení datového zdroje. Pokud by datový zdroj četl větší počet řádků, než je povoleno, nespustí se se a uživatel je upozorněn, že musí zpřesnit filtrovací podmínky tak, aby datový zdroj vracel menší počet řádků. V takovém případě se žádná data nenačtou a znovu se zobrazí filtrovací stránka. Pokud uživatel zadá dostatečně přesné filtrovací podmínky, data se načtou stejně jako v případě, že není použita žádná restrikce (tj. uživatel se o ní ani nedozví).
Parametr MAXDATAROWSALLOW udává maximální počet řádků, které smí daný datový zdroj vrátit. Parametr může být uveden buď přímo ve formě (viz příklad níže), nebo jej lze zadat v aplikačních parametrech; v takovém případě platí pro celou aplikaci.
Příklad:
<input type="hidden" name="MaxDataRowsAllow" value="5000">
Parametr ALLOWALLROWS
V odůvodněných případech je třeba načítat všechny věty bez omezení daného parametrem MAXDATAROWSALLOW . K tomu účelu slouží parametr formy AllowAllRows (s hodnotou 1). Je-li ve formě uveden, neuplatní se při čtení dat omezení dané hodnotou parametru MaxDataRowsAllow a data se načtou všechna.
Příklad:
<input type="hidden" name="AllowAllRows" value="1">)
Parametr ROWSCOUNTQUERY
Pokud je v aplikaci nebo ve formuláři použit parametr MAXDATAROWSALLOW pro kontrolu počtu uživatelem načítaných řádků, sestavuje si aplikační server SQL dotaz pro zjištění tohoto počtu. Použije pro to jednoduchý mechanismus, kdy rozparsuje výchozí SQL datový zdroj, určí části FROM a WHERE a sestaví nový SQL dotaz ve struktuře SELECT Count(ID sloupec) FROM tabulka WHERE podmínka(-y).
Pokud je datový zdroj formuláře komplikovanější, nemusí se vždy rozparsovat korektně. Pokud se nepodaří sestavit korektní SQL dotaz pro zjištění počtu načítaných řádků, restrikce se na daný formulář neuplatní (tj. je povoleno načtení libovolného počtu vět).
Pro tyto případy existuje parametr ROWSCOUNTQUERY, kterým lze zadat SQL dotaz pro zjištění počtu načítaných řádků, tedy „napovědět“ aplikačnímu serveru jak správně zjistit počet řádků. Dotaz musí obsahovat pouze část SELECT a FROM, část WHERE se doplní automaticky jako kombinace podmínek z původního datového zdroje formuláře a filtrovacích podmínek zadaných uživatelem nebo z konfigurace. Dotaz musí vracet celočíselnou skalární hodnotu (tj. jedno číslo). Např. SELECT Count(IDZBOZI) FROM QMAJETEK.
Parametry lze vložit do stránky napevno nebo pomocí dynamických uživatelských akcí (viz Dynamické uživatelské akce).
Podrobnější popis všech uvedených parametrů nejdete v dokumentu Pravidla ESOForm.