Autor Thema: 2 Frage zur Fehlerbehandlung  (Gelesen 2548 mal)

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
2 Frage zur Fehlerbehandlung
« am: 19.01.09 - 13:12:26 »
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
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: 2 Frage zur Fehlerbehandlung
« Antwort #1 am: 19.01.09 - 13:33:28 »
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:
.....
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: 2 Frage zur Fehlerbehandlung
« Antwort #2 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.#

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.
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
Re: 2 Frage zur Fehlerbehandlung
« Antwort #3 am: 19.01.09 - 15:03:30 »
Zum Bleistift so ....
If Kriterium = "" then
Error 32199, "Fehlertext Bla bla bla bla ...."
end if

[...]

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

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

Gruß
Jens
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
Re: 2 Frage zur Fehlerbehandlung
« Antwort #4 am: 19.01.09 - 15:12:18 »
Hallo

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

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

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

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.

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

Gruß
Jens
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: 2 Frage zur Fehlerbehandlung
« Antwort #5 am: 19.01.09 - 15:19:27 »
Wenn du deinen Error Handler richtig programmierst, dann fängt er die auch alle ab.
Error IrgendeineNummer, Irgendeine Meldung
wobei die  Nummer jenseits der 32000 liegt, führt ganz einfach zu dem gleichen Verhalten wie zum Beispiel ein "Object Variable not set" oder jeder beliebige andere System Fehler. Wenn man keinen ErrorHandler schreibt, bricht das System an dieser Stelle einfach ab.

Du solltest dir die Kapitel über Error Handling in der Online Hilfe wirklich mal ganz genau vornehmen.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
Re: 2 Frage zur Fehlerbehandlung
« Antwort #6 am: 19.01.09 - 19:01:22 »
Wenn du deinen Error Handler richtig programmierst, dann fängt er die auch alle ab.
[...]

Also so wie oben oder nicht? Jeder Fehler landet an der Sprunkmarke, wird aufgeschlüsselt und geloggt.
Ist das sauber oder nicht?

[...]
Du solltest dir die Kapitel über Error Handling in der Online Hilfe wirklich mal ganz genau vornehmen.

Habe ich wohl gelesen - aber nicht so recht verstanden. Sonst würd ich nämlich nicht fragen....  :-\
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: 2 Frage zur Fehlerbehandlung
« Antwort #7 am: 19.01.09 - 19:50:00 »
So wie ich Deine Frage verstanden habe, möchtest Du, wenn in einer Mail das Subject nicht bestimmten Konventionen entspricht einen Log-Eintrag vornehmen. Und wie es in jeder ordentlichen Funktion gemacht wird, möchtest Du auch noch eine entsprechende Fehlerbehandlung einbauen.
Ich würde es in etwa (!!) so machen:

Code
Function processSubject( doc as NotesDocument ) as Boolean
On error goto ERROR_ME
…
if doc.HasItem( "Subject" ) Then
 sSubject = doc.GetItemValue( "Subject" )(0)
End if

if not isSubjectValid( sSubject ) Then
   call printLogEntry( C_NOT_A_VALID_SUBJECT , C_INFO )
End if

processSubject = true
EXIT_ME:
call closeLog

ERROR_ME:
call printLogEntry( C_ERROR_WHILE_VALIDATE_SUBJECT & err & "/" & erl , C_ERROR )
err = 0
Resume EXIT_ME

End Function

..wobei ich  die aufzurufenden Funktionen nicht aufschreibe.
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
Re: 2 Frage zur Fehlerbehandlung
« Antwort #8 am: 20.01.09 - 07:50:58 »
Yepp - so in etwa sieht auch mein Script aus.
Scheint also (da's auch funktioniert...  :D) ganz ok zu sein.

Danke für die Hilfe  :D

Gruß
Jens
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz