Vyhazování chyb v kódu 4D je nyní možné od verze v20R2.
Tyto chyby se chovají jako každá jiná chyba 4D: vyvolávají dialogové okno o chybě nebo mohou být zpracovány v metodě ON ERR CALL.
Tato funkce vám usnadní život, protože budete moci zlepšit kvalitu svého kódu proaktivním odhalováním chyb, jakmile se vyskytnou. Můžete také lépe zpracovávat protokolování chyb.
Než se pustíme do podrobností, je důležité poznamenat, že tato funkce je prvním krokem k dosažení robustní správy chyb.
Nyní se pusťme do podrobností!
Tato funkce se opírá o nový příkaz throw. Tento příkaz lze použít různě, podrobněji níže a v HDI.
Jak házet a zpracovávat chyby
Chyby vyhozené příkazem throw se chovají jako všechny ostatní chyby 4D. V níže uvedeném příkladu nebyla nastavena žádná metoda ON ERR CALL.
Chyba je vyhozena s kódem a popisem, což vyvolá dialogové okno o chybě.
throw(1; "Toto je chyba")
V tomto dalším příkladu byla nastavena metoda ON ERR CALL a vyhozenou chybu lze získat příkazem Last errors.
ON ERR CALL("handleErrors")
throw (1; "Toto je chyba")
Příkaz throw v detailech
Tento nový příkaz lze volat různými způsoby podle vašich potřeb.
Vyhazovat předdefinované chyby.
Můžete vyvolat předdefinované chyby nastavené v souborech XLF projektu. Za tímto účelem předejte příkazu throw jako parametr objekt. Tento objekt musí obsahovat vlastnosti:
- componentSignature: kód komponenty vyvolávající chybu
- errCode: kód chyby
V souborech XLF vašeho projektu se vyhledá chybové hlášení odpovídající názvu ERR_componentSignature_errCode a vyhodí se chyba.
Chybová zpráva může používat dynamické hodnoty zástupných znaků. V souboru XLF zadejte název zástupného znaku do závorek {}. Pak v objektu chyby přidejte vlastnost, jejíž jméno je jméno zástupného znaku, a uveďte její hodnotu.
Příklad:
var $file : 4D.File
ON ERR CALL("handleError")
$file:=File("/PROJECT/HDI file")
If (Not($file.exists))
throw({componentSignature: "HDI1"; errCode: 1; name: "HDI file"; path: "/Project"})
End if
Zde je ukázka francouzsky přeloženého souboru Errors.xlf:
<trans-unit id="1" resname="ERR_HDI1_1">
<source>The file "{name}" is not found in {path}.</source>
<target>Le fichier "{name}" est introuvable dans {path}.</target>
</trans-unit>
Metoda ON ERR CALL může pokračovat v práci s chybou:
Použijte odložený režim
Použití vlastnosti boolean deferred v parametru objektu umožňuje stohovat vyhozené chyby a pokračovat s nimi globálně později. V níže uvedené metodě je metoda ON ERR CALL volána na konci provádění aktuální metody. Ta pokračuje s naskládanými chybami vrácenými příkazem Last errors.
var $file : 4D.File
ON ERR CALL("handleError")
$file:=File("/PROJECT/HDI file")
If (Not($file.exists))
throw({componentSignature: "HDI1"; errCode: 1; name: "HDI file"; path: "/Project"; deferred: True})
throw({componentSignature: "HDI1"; errCode: 2; name: "HDI file"; path: "/Project"; deferred: True})
End if
Zde je ukázka souboru Errors.xlf přeloženého do francouzštiny:
<trans-unit id="1" resname="ERR_HDI1_1">
<source>The file "{name}" is not found in {path}.</source>
<target>Le fichier "{name}" est introuvable dans {path}.</target>
</trans-unit>
<trans-unit id="2" resname="ERR_HDI1_2">
<source>Try another file name</source>
<target>Essayez avec un autre fichier</target>
</trans-unit>
Metoda handleErrors je volána jednou a může získat naskládané chyby díky příkazu Last errors:
Variantou odloženého režimu je volání příkazu throw bez parametrů. To je užitečné v metodě ON ERR CALL.
Stohuje aktuální chyby až do ukončení aktuální metody. Pak se zavolá metoda ON ERR CALL, která pokračuje s naskládanými chybami.
Tento postup najdete v konkrétním příkladu HDI.
Stáhněte si HDI a zjistěte více o tom, jak lze s chybami zacházet, abyste uživateli poskytli vhodnou zpětnou vazbu.