Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: michael-r am 03.04.09 - 16:20:05

Titel: Error Handling
Beitrag von: michael-r am 03.04.09 - 16:20:05
Hallo,

ich habe eine Anwendung, die läuft öfters mal auf einen Fehler Entry not found in Index.

Problem ist, der Agent der zu dem Zeitpunkt ausgeführt wird, bricht an der Stelle ab, wie kann ich es anstellen das wenn ein Error kommt einfach weiter gemacht wird?

Das ganze ist in LotusScript geschrieben. On Error Goto ist die einzige Möglichkeit?

MFG Michael
Titel: Re: Error Handling
Beitrag von: jBubbleBoy am 03.04.09 - 16:23:35
Ja,
Du kannst auch "on error resume next" machen, das wird dir aber keine empfehlen ;)
 
Titel: Re: Error Handling
Beitrag von: Axel am 03.04.09 - 16:34:56
Du willst dir das hier: Errorhandling in Lotusscript (http://atnotes.de/index.php/topic,11980.0.html) mal anschauen.

Da findest du alles zum Thema Errorhandling.

Das eine Anwendung öfters mal auf den Fehler "Entry not found in Index" läuft ist m.E. nicht normal. Ich würde zuerst mal hier ansetzen.

Axel


Titel: Re: Error Handling
Beitrag von: michael-r am 03.04.09 - 16:46:38
Ich denke mal der läuft wahrscheinlich auf ein Dokument was Fehler hat, Maske aus anderer Datenbank oder ähnlich, aber Dokumente sind ok. Aber da die DB sehr groß ist wird es sehr schwer sein den Fehler zu finden.

Bei If (doc.rendertortitem(rtitem)) Then then läuft das Script auf den Fehler.

Danke für die Antwort.

MFG Michael

Naja erstmal Wochenende, wünsche ein schönes Wochenende.
Titel: Re: Error Handling
Beitrag von: koehlerbv am 03.04.09 - 16:59:05
"Einfach weitermachen" beim Auftreten eines Laufzeitfehlers ist in 99,9% der Fälle falsch. Das hierzu erforderliche On Error Resume Next schlägt auch zu, wenn der Fehler ein ganz anderer ist als der, der Dir mal aufgefallen ist.

Aus Deiner kurzen Beschreibung kann man gleich mehrere mögliche Fehlerursachen erkennen. Der Hauptfehler liegt aber an Deinem Herangehen (u.a. scheinst Du ja vor dem NotesDocument.RenderToRTItem die möglichen Fehler nicht abzufangen, und "fehlerhafte Dokumente" zu finden ist ausser der Laufzeit bis zum "big bang" ja auch nicht von der Anzahl der Dokumente abhängig.

Wenn Du Näheres ansagst, wird Dir hier aber garantiert geholfen. Auch beim "Prinzipiellen"  ;)

Auch ich wünsche Dir (und allen anderen noch Aktiven ein wunderschönes Wochenende mit mindestens so schönem Wetter wie wir es hier im Chiemgau haben!

Bernhard

PS: Die gefühlten 30 Grad auf dem Balkon sind aber nach dem heurigen Winter auch eine erforderliche ENtschädigung - immerhin tauen bei uns erst jetzt die Wiesen wieder so frei, dass man statt weiss mal endlich wieder was buntes sieht - und sofort schiessen auch die Blumen erleichtert gen Sonne  :D
Titel: Re: Error Handling
Beitrag von: jBubbleBoy am 03.04.09 - 17:02:51
Dann loggst Du vorher das Dokument mit:
print doc.universalid
und untersuchst das Dokument(e), ist doch die (fast) tägliche Arbeit eines Admins.
Titel: Re: Error Handling
Beitrag von: michael-r am 04.04.09 - 12:10:40
Aus Deiner kurzen Beschreibung kann man gleich mehrere mögliche Fehlerursachen erkennen. Der Hauptfehler liegt aber an Deinem Herangehen (u.a. scheinst Du ja vor dem NotesDocument.RenderToRTItem die möglichen Fehler nicht abzufangen, und "fehlerhafte Dokumente" zu finden ist ausser der Laufzeit bis zum "big bang" ja auch nicht von der Anzahl der Dokumente abhängig.

Doch es ist problematisch festzustellen wo das genaue Problem liegt. Ich habe UID und die Datenbank, allerdings gibt es dieses Dokument nicht. Fehlerhafte Dokumente können es nicht sein da ein Fixup problemlos durch lief.
Entry not Index kann auch für erstellte oder gelöschte Dokumente gelten, bei Zugriff auf die DB, aber da die DB in einer Testumgebung(also auch in einer Testumgebung) liegt und keine Zugriff darauf erfolgen kann es daran nicht liegen.

Ich werde am Montag alles nochmal prüfen, nicht das ich doch etwas übersehen habe.

MFG Michael
Titel: Re: Error Handling
Beitrag von: m3 am 04.04.09 - 14:29:59
Ist das doc gespeichtert, bevor Du es in ein RTItem renderst?
Gibt es ev. keine Default View in der DB?
Was ist denn in dem Doc drinnen? Embedded Views, DBLookups die auf eine View gehen, welche im UI ausgewählt werden sollte,  oder andere "Bösartigkeiten"?
Titel: Re: Error Handling
Beitrag von: m3 am 04.04.09 - 14:33:41
Doch es ist problematisch festzustellen wo das genaue Problem liegt. Ich habe UID und die Datenbank, allerdings gibt es dieses Dokument nicht.
Und warum fangst du den Fall nicht mit notesDocument.IsDeleted ab?
Titel: Re: Error Handling
Beitrag von: michael-r am 04.04.09 - 17:18:00
Doch es ist problematisch festzustellen wo das genaue Problem liegt. Ich habe UID und die Datenbank, allerdings gibt es dieses Dokument nicht.
Und warum fangst du den Fall nicht mit notesDocument.IsDeleted ab?

Danke das ist eine sehr gute Idee.
Ich habe leider doch was übersehen, einige Dokumente sind wohl doch gelöscht und ich hatte in der Ansicht die gelöschten Objekte nicht anzeigen lassen.
Ich habe den Vorschlag eingebauen und dann gucken die restlichen fehlerhaften Dokumente entfernen, denn einige verweisen auf Masken aus anderen DBs.

Danke das hilft mir schon sehr weiter.

Also das ist nicht meine Anwendung, ich versuche nur Probleme zu lösen ;).

MFG Michael
Titel: Re: Error Handling
Beitrag von: koehlerbv am 04.04.09 - 17:50:35
Prüfe nach der Property IsDeleted auch noch NotesDocument.Items ab. Wenn das kein Array ergibt, liegt eine andere Leiche vor.

Einen ErrorHandler brauchst Du ja sowieso und immer. Diesen solltest Du so aufbauen, dass Du auf bekannte / erwartete Fehler zielgenau reagierst und für den Rest ein "Stand-Procedere" parat hältst.

Bernhard
Titel: Re: Error Handling
Beitrag von: michael-r am 06.04.09 - 10:29:12
Noch eine Frage, wie stell ich es dass ich die Daten mit fehlerhaften Dokumenten logge?
Ich möchte On error goto nutzen und dann die jeweilige Dokumenten UNID loggen zur Domino Console, in eine Datenbank oder Textdatei?

Call crlog.OpenFileLog("C:\agentlog.txt")
Call  crlog.LogAction(doc.Universalid)
Call crlog.Close

Das geht irgendwie nicht.

MFG Michael
Titel: Re: Error Handling
Beitrag von: jBubbleBoy am 06.04.09 - 10:41:44
Der etwas aufwendigere Weg wäre "OpenLog" --> http://www.openntf.org/projects/pmt.nsf/ProjectLookup/OpenLog

Die einfachste Variante wäre die Benutzung der Klasse "NotesLog", hier musste mal in die Hilfe schauen, da gibt es schön ausformulierte Beispiele. 
Titel: Re: Error Handling
Beitrag von: michael-r am 06.04.09 - 11:17:09
was glaubst du woher ich das habe  ::)

Jetzt wollte ich das direkt in eine DB logen, das geht aber auch nicht...

MFG Michael
Titel: Re: Error Handling
Beitrag von: jBubbleBoy am 06.04.09 - 11:23:08
Mach am besten eine NotesLog.openAgentLog(), es dürfte deinen Ansprüchen am besten passten.
Titel: Re: Error Handling
Beitrag von: michael-r am 06.04.09 - 13:06:25
Dim agentLog As New NotesLog("Agent log")
...
On Error Goto    agentlogX   
....
agentlogx:
         Call agentLog.OpenAgentLog
         Call agentLog.LogAction(doc.Universalid)
         Call agentLog.Close

Das habe ich nun gemacht, taucht ein Error auf soll das in die Actionlog geschrieben werden.

Das Script springt an die entsprechende stelle aber doc ist leer.

Hachja ist das ätzend.

MFG Michael
Titel: Re: Error Handling
Beitrag von: koehlerbv am 06.04.09 - 13:15:08
Dass doc Nothing ist, ist Dir doch bekannt - das hatten wir hier doch die ganze Zeit diskutiert.

Viel interessanter ist der Weg, wie Du versuchst, das NotesDocument zu instantiieren. Das solltest Du uns hier vorstellen anstatt dessen Folgen.

Bernhard
Titel: Re: Error Handling
Beitrag von: michael-r am 06.04.09 - 13:34:11
Wieso ist das Doc leer?

Nehme ich die Fehlerbehandlung raus, erhalte ich auch fehlerhafte Dokumenten, wenn ich dann noch den Debugger einschalte auch die UNID.

Vielleicht funkt da auch eine andere Fehlerroutine zwischen...
Na ich mach erstmal zu Fuss weiter, bevor dafür zuviel Zeit drauf geht, danke :).

MFG Michael

So nun ist wieder alles in Ordnung, die Dokumente haben sich zum Glück in Grenzen gehalten. Danke :).