Verbessertes Fehlermanagement in 4D Code

Das Augeben von Fehlern in Ihrem 4D Code ist nun ab v20R2 möglich.

Diese Fehler verhalten sich wie alle 4D Fehler: Sie lösen einen Fehlerdialog aus oder können in einer ON ERR CALL Methode behandelt werden.

Diese Funktion wird Ihnen das Leben erleichtern, da Sie die Qualität Ihres Codes verbessern können, indem Sie Fehler proaktiv erkennen, sobald sie auftreten. Außerdem können Sie eine bessere Fehlerprotokollierung vornehmen.

Bevor wir ins Detail gehen, ist es wichtig zu wissen, dass diese Funktion der erste Schritt zu einem robusten Fehlermanagement ist.

Kommen wir nun zu den Details!

Diese Funktion basiert auf einem neuen Befehl throw. Dieser Befehl kann auf verschiedene Weise verwendet werden, die im Folgenden und in der HDI beschrieben werden.

HDI_THROW_ERRORS

Wie man Fehler auslöst und behandelt

Die Fehler, die mit dem Befehl throw ausgelöst werden, verhalten sich wie alle anderen 4D Fehler. Im folgenden Beispiel ist keine ON ERR CALL-Methode eingerichtet worden.

Ein Fehler wird mit einem Code und einer Beschreibung ausgelöst und löst einen Fehlerdialog aus.

throw(1; "Dies ist ein Fehler")

In diesem anderen Beispiel wurde eine ON ERR CALL-Methode eingerichtet, und der ausgelöste Fehler kann mit dem Befehl Last errors abgefragt werden.

ON ERR CALL("handleErrors")
throw (1; "Dies ist ein Fehler")

 

blank

 

Der throw-Befehl im Detail

Dieser neue Befehl kann je nach Bedarf auf unterschiedliche Weise aufgerufen werden.

Vordefinierte Fehler auslösen.

Sie können vordefinierte Fehler auslösen, die in Ihren Projekt-XLF-Dateien eingerichtet sind. Übergeben Sie dazu ein Objekt als Parameter an den Befehl throw. Dieses Objekt muss die folgenden Eigenschaften enthalten:

  • componentSignature: den Komponentencode, der den Fehler auslöst
  • errCode: den Fehlercode

 

Eine Fehlermeldung, die dem Resname ERR_componentSignature_errCode entspricht, wird in den XLF-Dateien Ihres Projekts gesucht und der Fehler wird ausgelöst.

Die Fehlermeldung kann dynamische Platzhalterwerte verwenden. In Ihrer XLF-Datei geben Sie den Platzhalternamen in geschweiften Klammern {} an. Fügen Sie dann im Fehlerobjekt eine Eigenschaft hinzu, deren Name der Name des Platzhalters ist und geben Sie dessen Wert an.

Beispiel:

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 

Hier ist ein Beispiel für die französisch übersetzte Datei 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>

Die Methode ON ERR CALL kann mit dem Fehler fortfahren:

blank

 

Verwenden Sie den aufgeschobenen Modus

Die Verwendung der booleschen Eigenschaft deferred im Objektparameter können Sie ausgelöste Fehler stapeln und später global bearbeiten. In der folgenden Methode wird die Methode ON ERR CALL am Ende der aktuellen Methodenausführung aufgerufen. Sie fährt mit den gestapelten Fehlern fort, die vom Befehl Last errors zurückgegeben werden.

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 

Hier ist ein Beispiel für die französisch übersetzte Datei 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>
<trans-unit id="2" resname="ERR_HDI1_2">
<source>Try another file name</source>
<target>Essayez avec un autre fichier</target>
</trans-unit>

Die Methode handleErrors wird einmal aufgerufen und kann dank des Befehls Last errors die gestapelten Fehler abrufen:

blank

Eine Variante des verzögerten Modus besteht darin, den Befehl throw ohne Parameter aufzurufen. Dies ist in einer ON ERR CALL-Methode nützlich.

Es stapelt die aktuellen Fehler, bis die aktuelle Methode endet. Dann wird die Methode ON ERR CALL aufgerufen, um mit den gestapelten Fehlern fortzufahren.

Sie finden dies in dem konkreten Beispiel des HDI.

Laden Sie den HDI herunter, um mehr darüber zu erfahren, wie Fehler behandelt werden können, um dem Benutzer eine angemessene Rückmeldung zu geben.

 

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert ist seit 2017 als Product Owner im 4D Produktteam tätig. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Marie-Sophie ist Absolventin der ESIGELEC Ingenieurschule und begann ihre Karriere als Ingenieurin bei IBM im Jahr 1995. Sie nahm an verschiedenen Projekten teil (Wartungs- oder Build-Projekte) und arbeitete als Cobol-Entwicklerin. Dann arbeitete sie als UML-Designerin und Java-Entwicklerin. In letzter Zeit bestand ihre Hauptaufgabe darin, funktionale Anforderungen zu analysieren und zu schreiben sowie Geschäfts- und Entwicklungsteams zu koordinieren.