Autor Thema: Error Handling  (Gelesen 6060 mal)

Offline michael-r

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.768
Error Handling
« 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

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Error Handling
« Antwort #1 am: 03.04.09 - 16:23:35 »
Ja,
Du kannst auch "on error resume next" machen, das wird dir aber keine empfehlen ;)
 
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Error Handling
« Antwort #2 am: 03.04.09 - 16:34:56 »
Du willst dir das hier: Errorhandling in Lotusscript 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


Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline michael-r

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.768
Re: Error Handling
« Antwort #3 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.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Error Handling
« Antwort #4 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

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Error Handling
« Antwort #5 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.
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline michael-r

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.768
Re: Error Handling
« Antwort #6 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
« Letzte Änderung: 04.04.09 - 12:12:14 von michael-r »

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Error Handling
« Antwort #7 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"?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Error Handling
« Antwort #8 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?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline michael-r

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.768
Re: Error Handling
« Antwort #9 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Error Handling
« Antwort #10 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

Offline michael-r

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.768
Re: Error Handling
« Antwort #11 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

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Error Handling
« Antwort #12 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. 
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline michael-r

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.768
Re: Error Handling
« Antwort #13 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

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Error Handling
« Antwort #14 am: 06.04.09 - 11:23:08 »
Mach am besten eine NotesLog.openAgentLog(), es dürfte deinen Ansprüchen am besten passten.
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline michael-r

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.768
Re: Error Handling
« Antwort #15 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Error Handling
« Antwort #16 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

Offline michael-r

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.768
Re: Error Handling
« Antwort #17 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 :).
« Letzte Änderung: 07.04.09 - 10:09:01 von michael-r »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz