Domino 9 und frühere Versionen > ND7: Entwicklung

2 Frage zur Fehlerbehandlung

(1/2) > >>

Jens_1:
Hallo NG,

eine Agent, der nach Eingang neuer Mail getriggert ist, wertet das Subject der eingegangenen Mail aus und nimmt eine entsprechende Funktion vor.
Das Funktioniert soweit auch ganz gut.
Ich möchte jedoch "vernünftig" das Script stoppen (und loggen) wenn das Subject der Mail nicht den erforderlichen Kriterien entspricht.

Frage 1.
Mit "On Error Goto ErrorHandler" und der entsprechenden Sprungmarke habe ich zunächst alle Fehler "eingefangen".
Gleichzeitig logge ich Fehler mit
"Set currentLog = New NotesLog ( "Agentenname" )
 Call currentLog.OpenNotesLog( server, filename )"

Wo muss eigentlich der Befehl "Call currentLog.Close" überall aufgeführt werden?
Ich habe ihn einmal direkt vor der End-Anweisung mit welcher das Script odnungsgemäß beendet wird wenn kein Fehler aufgetreten ist und einmal innerhalb des ErrorHandlers.
Muss man das eigentlich so machen, daß vor jedem "End" auch das Log geschlossen wird?

Frage 2
Wenn das Subject nicht bestimmten Kriterien entspricht möchte ich einen Fehler provozieren und loggen.
Das gelingt mir mit "If Kriterium= "" Then Error 0" - wobei ich diese Zeile intuitiv gesetzt habe. Bei Nichterfüllung der Bedingung springt das Script zum Errorhandler.
Meine Bücher und auch das Forum bzw. der Thread zur Fehlerbehandlung haben micht nicht weitergebracht.
Einfach "then Error" nimmt der Desingener nicht und eine andere Fehlernummer wäre ja in jedem Fall falsch.
Ist Null sowas wie der generelle Fehler?

Ich hoffe ich konnte mich halbwegs verständlich machen...  ;)

Gruß
Jens

Thomas Schulte:
Zum Bleistift so ....
If Kriterium = "" then
Error 32199, "Fehlertext Bla bla bla bla ...."
end if


Aus ....
Managing error number and message: Err and Error statements 

.....
The Error statement
The Error statement creates an error, and optionally specifies an error message associated with that error.
The syntax is:
Error errNumber [ , msgExpr ]
If you do not include the optional msgExpr string in the statement, it creates an error when the script runs. If errNumber is the number of an error that is already defined, then the effect of this statement is the same as if that error occurred when the script executed. For example, LotusScript defines a division-by-zero error with the error number 11. So the following statement has the same effect as an actual error occurring when LotusScript executes a statement that attempts to divide by zero:
.....

dirk_2909:
Hallo

Zu 1.: Das Close musst Du nir aufrufen, wenn Du Dein Script beendest und auch das Log <> null ist.#

Zu 2.: Warum einen Fehler provozieren. Du kannst eine If-Abfrage machen, die, wenn die Bedingung erfüllt ist eine Funktion (z.B. WriteToLog (…) ) aufruft. Die selbe Funktion kannst Du auch im ErrorHandling aufrufen.

Jens_1:

--- Zitat von: Thomas Schulte am 19.01.09 - 13:33:28 ---Zum Bleistift so ....
If Kriterium = "" then
Error 32199, "Fehlertext Bla bla bla bla ...."
end if

[...]

--- Ende Zitat ---

Hallo Thomas,

genau das möchte ich ja nicht - eine Fehlernummer mit angeben da ich alle Fehler mit dem definierten Errorhandler abfackeln will.
Der Handler schreibt mir in's Agentenprotokoll was passiert ist.


--- Code: ---ErrorHandler:
Call currentLog.LogError( 0, "Der Fehler mit der Nummer" & Str(Err) & " und der Meldung " & Chr$(34) & Error$ & Chr$(34) & " ist bei Zeile " & Str(Erl) & " aufgetreten.")
Call currentLog.Close ' Fehlerprotokoll schließen
End ' Script beenden
--- Ende Code ---

Es funktioniert ja auch - ich wüsst nur gern ob's richtig ist...  ;)

Gruß
Jens

Jens_1:

--- Zitat von: dirk_2909 am 19.01.09 - 13:35:37 ---Hallo

Zu 1.: Das Close musst Du nir aufrufen, wenn Du Dein Script beendest und auch das Log <> null ist.#

--- Ende Zitat ---

D.h. in diesen Schnipsel  gehört der Code rein:


--- Code: ---ErrorHandler:
Call currentLog.LogError( 0, "Der Fehler mit der Nummer" & Str(Err) & " und der Meldung " & Chr$(34) & Error$ & Chr$(34) & " ist bei Zeile " & Str(Erl) & " aufgetreten.")
Call currentLog.Close ' Fehlerprotokoll schließen
End ' Script beenden
--- Ende Code ---

Ansonsten gehört die Zeile raus weil bzw. wenn kein Schreibzugriff stattgefunden hat - richtig?


--- Zitat von: dirk_2909 am 19.01.09 - 13:35:37 ---Zu 2.: Warum einen Fehler provozieren. Du kannst eine If-Abfrage machen, die, wenn die Bedingung erfüllt ist eine Funktion (z.B. WriteToLog (…) ) aufruft. Die selbe Funktion kannst Du auch im ErrorHandling aufrufen.

--- Ende Zitat ---

D.h
--- Code: ---If address = "" Then Error 0
--- Ende Code ---
ist Schwachsinn und sollte heißen
--- Code: ---If address = "" then ErrorHandler
--- Ende Code ---
?

Gruß
Jens

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln