Správa chyb je často omezující součástí vývoje ve všech jazycích. Pokud ve 4D zapomenete zavolat metodu pro ošetření chyb v novém procesu/pracovníkovi nebo použijete komponenty, které chyby neošetřují, může se koncovému uživateli zobrazit vestavěný dialog 4D pro ošetření chyb. Vývojáři 4D by rádi zachytili všechny chyby ve všech kontextech, aby se zabránilo zobrazení tohoto vestavěného dialogového okna 4D pro chyby.
Podívejme se, jak můžeme toto chování zvládnout pomocí 4D v19 R8.
Globální obsluha chyb
Doposud bylo nejlepším postupem pro ošetření chyb v kontextu provádění použití tzv. ON ERR CALL příkaz a jako parametr předat obsluhu metody. Tato chybová metoda však byla volána pouze v aktuálním kontextu procesu.
Od verze 4D v19 R8 můžete definovat také globální obsluhu chyb, která bude účinná pro všechny kontexty provádění. Pokud byste zapomněli definovat lokální obsluhu chyby v novém procesu/pracovním procesu, byla by automaticky vyvolána globální obsluha chyby. Chcete-li tedy aplikaci ušetřit, můžete globální obsluhu chyb definovat například v databázové metodě On Startup.
ON ERR CALL("myGlobalErrorHandler"; ek global)
Předání metody pro zpracování chyb, která se má zavolat v aktuálním procesu, je stále efektivní. Přejmenovali jsme ji na lokální obsluhu chyb.
ON ERR CALL("myLocalErrorHandler")
// equivalent to:
ON ERR CALL("myLocalErrorHandler"; ek local)
Všimněte si, že lokální obsluha chyb je stále volána, pokud je definována, i když je definována globální obsluha chyb, takže vámi definované lokální obsluhy chyb se budou spouštět jako obvykle. Globální obsluha chyb je vyvolána pouze tehdy, pokud v aktuálním kontextu provádění není definována žádná lokální obsluha chyb.
Funkce ORDA a vypočtené atributy na serveru 4D Server
Jak možná víte, když je v klientské aplikaci použita funkce ORDA nebo vypočtený atribut, je provedena na straně 4D Serveru. Pokud tedy tyto funkce nebo vypočtené atributy nedefinují lokální obsluhu chyb a vyhodí chybu, zobrazí se na serveru 4D Server vestavěný dialog pro chyby, pokud nejsou spuštěny bezhlavě.
Abyste tomu předešli, můžete nyní definovat globální obsluhu chyb na straně serveru v databázové metodě On Server Startup per example:
ON ERR CALL("myServerGlobalErrorHandler"; ek global)
Komponenty
Jako vývojáři komponent nyní můžete snadněji zpracovávat chyby. Stačí definovat globální obsluhu chyb v databázové metodě On Host Database Event (např. v události On before host database startup ), abyste zajistili, že se při žádné chybě nezobrazí vestavěný dialog 4D error v hostitelské databázi! Tímto postupem budou všechny chyby generované komponentou volat globální obsluhu chyb komponenty bez jakýchkoli vedlejších účinků na hostitelskou databázi.
Jako uživatel komponenty můžete zvýšit bezpečnost své aplikace tím, že budete zpracovávat chyby komponenty, které nebyly zachyceny v kontextu provádění komponenty. Tímto způsobem můžete v případě, že používáte komponenty, které nezvládají správně své vlastní chyby, tyto chyby zvládnout a již se nebude zobrazovat vestavěný dialog pro chyby 4D. Chcete-li nainstalovat metodu obsluhy chyb komponenty, stačí použít příslušný parametr takto:
ON ERR CALL("myComponentErrorHandler"; ek errors from components)
Jedná se také o globální obsluhu chyb, ale určenou pro chyby nezachycené komponentami, takže pro ně můžete vyvinout specifické věci. Jen si všimněte, že systémové proměnné chyb(chyba, metoda chyby, řádek chyby a vzorec chyby) nejsou v této obsluze chyb komponenty k dispozici, protože chyby se stávají z jiného kontextu provádění. Zásobník chyb je však stále k dispozici.
SPOLEČNÉ CHOVÁNÍ
Zásobník chyb
Zavedli jsme také nový příkaz pro získání celého zásobníku chyb: Last errors. Tento příkaz vrací kolekci, kde každá položka je chybou celého zásobníku, přičemž každá chyba obsahuje informace o čísle chyby, zprávě a signatuře vnitřní komponenty.
Získání aktuální obsluhy chyby
Příkaz Method called on the error nyní připouští nepovinný parametr pro získání globálního obslužného programu pro chyby a obslužného programu pro chyby komponenty, jako v této ukázce:
$localHandler:=Method called on error
$globalHandler:=Method called on error(ek global)
$componentHandler:=Method called on error(ek errors from component)
Přerušení chyby
Nezáleží na tom, který obslužný program je spuštěn, ale ABORT je vždy praktický a umožňuje přerušit kód jako obvykle.
Všechna tato nová chování si můžete vyzkoušet pomocí výše uvedeného HDI.