Vylepšená správa chyb v kódu 4D

Automaticky přeloženo z Deepl

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.

HDI_THROW_ERRORS

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")

blank

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 &quot;{name}&quot; is not found in {path}.</source>
<target>Le fichier &quot;{name}&quot; est introuvable dans {path}.</target>
</trans-unit>

Metoda ON ERR CALL může pokračovat v práci s chybou:

blank

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 &quot;{name}&quot; is not found in {path}.</source>
<target>Le fichier &quot;{name}&quot; 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:

blank

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.

Avatar
• Product Owner • Marie-Sophie Landrieu-Yvert se připojila k programovému týmu 4D jako Product Owner v roce 2017. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací. Její úlohou je také zajistit, aby implementovaná funkce odpovídala potřebám zákazníka. Marie-Sophie vystudovala inženýrskou školu ESIGELEC a svou kariéru zahájila jako inženýrka v IBM v roce 1995. Podílela se na různých projektech (projekty údržby nebo výstavby) a pracovala jako vývojářka Cobol. Poté pracovala jako UML designer a Java developer. V poslední době byly jejími hlavními rolí analyzovat a psát funkčních požadavky a koordinovat obchodní a vývojové týmy.