2. August 2010 15:38
IF GenJnlLine.Fehler > 0 THEN
FIELDERROR(Fehler,Text50000);
IF GenJnlLine.Fehler > 0 THEN BEGIN
ParamVerw.HoleInteger(LfdNr);
ParamVerw.HoleBoolean(AutoStapel);
IF AutoStapel THEN BEGIN
BelStapeleingelesen.GET(LfdNr);
BelStapeleingelesen.Fehler := TRUE;
BelStapeleingelesen.Fehlertext := FORMAT(Fehler) + Text50000;
BelStapeleingelesen.MODIFY(TRUE);
EXIT;
END ELSE
FIELDERROR(Fehler,Text50000);
END;
2. August 2010 15:42
2. August 2010 15:45
2. August 2010 15:49
RunCheck(Rec,TempJnlLineDim);
IF NOT RunCheck(Rec,TempJnlLineDim) THEN
EXIT;
WITH GenJnlLine DO BEGIN
2. August 2010 16:03
Herdi hat geschrieben:edit:
Allerdings ist um meinen Code noch ein
- Code:
WITH GenJnlLine DO BEGIN
gebaut. Wirkt sich das Exit nur auf diese Schleife aus?
An EXIT statement is used to interrupt the execution of a C/AL trigger. The interruption takes place even when the code is executed inside a loop or a similar structure. The EXIT statement is also used when a local function should return a value.
2. August 2010 16:16
Herdi hat geschrieben:Ich möchte den FIELDERROR nun abfangen, mir die Fehlermeldung in einer Tabelle merken und das verbuchen beenden wie es der FIELDERROR tut.
Allerdings klappt dies nicht mit EXIT.
IF GenJnlLine.Fehler > 0 THEN BEGIN
ParamVerw.HoleInteger(LfdNr);
ParamVerw.HoleBoolean(AutoStapel);
IF AutoStapel THEN BEGIN
BelStapeleingelesen.GET(LfdNr);
BelStapeleingelesen.Fehler := TRUE;
BelStapeleingelesen.Fehlertext := FORMAT(Fehler) + Text50000;
BelStapeleingelesen.MODIFY(TRUE);
COMMIT; // siehe Bemerkung unten!
END;
FIELDERROR(Fehler,Text50000);
END;
2. August 2010 19:18
Oftmals benötigt man für (automtische) Verarbeitungen ein Log in dem fehlerhafte Aufrufe dokumentiert sind. Oftmals begibt man sich aber auch mit der von Natalie - aufgrund des benötigten Rückgabewertes völlig korrekten COMMIT - in eine Hölle aus der es kein Entkommen mehr gibt :)Natalie hat geschrieben:
- Code:
IF GenJnlLine.Fehler > 0 THEN BEGIN
ParamVerw.HoleInteger(LfdNr);
ParamVerw.HoleBoolean(AutoStapel);
IF AutoStapel THEN BEGIN
BelStapeleingelesen.GET(LfdNr);
BelStapeleingelesen.Fehler := TRUE;
BelStapeleingelesen.Fehlertext := FORMAT(Fehler) + Text50000;
BelStapeleingelesen.MODIFY(TRUE);
COMMIT; // siehe Bemerkung unten!
END;
FIELDERROR(Fehler,Text50000);
END;
Denn FIELDERROR soll deiner obigen Beschreibung nach in jedem Fall weiter ausgeführt werden.
Nur: Nach dem FIELDERROR wird die Änderung in Record BelStapeleingelesen verworfen. Von daher könntest du ein COMMIT nach dem MODIFY ausführen.
Aber wofür nun das Ganze ...?
5. August 2010 11:04
SilverX hat geschrieben:Oftmals benötigt man für (automtische) Verarbeitungen ein Log in dem fehlerhafte Aufrufe dokumentiert sind. Oftmals begibt man sich aber auch mit der von Natalie - aufgrund des benötigten Rückgabewertes völlig korrekten COMMIT - in eine Hölle aus der es kein Entkommen mehr gibt :)
SilverX hat geschrieben:Ich bin mir bewusst, dass dieser Post unter NAV 4.x abgelegt ist, aber ich empfehle bei einer solchen Anforderung mindestens ein (technisches) Update auf NAV 5.0 SP1 (Update 2). In der Version gibt es die zwei Befehle GETLASTERRORTEXT und CLEARLASTERROR mit denen man in einem CODEUNIT.RUN-Konstrukt super Fehler abfangen und auch protokollieren kann.
Natalie hat geschrieben:Denn FIELDERROR soll deiner obigen Beschreibung nach in jedem Fall weiter ausgeführt werden.
Nur: Nach dem FIELDERROR wird die Änderung in Record BelStapeleingelesen verworfen. Von daher könntest du ein COMMIT nach dem MODIFY ausführen.
Aber wofür nun das Ganze ...?
20. September 2010 13:45