Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet 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
-
Ja,
Du kannst auch "on error resume next" machen, das wird dir aber keine empfehlen ;)
-
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
-
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.
-
"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
-
Dann loggst Du vorher das Dokument mit:
print doc.universalid
und untersuchst das Dokument(e), ist doch die (fast) tägliche Arbeit eines Admins.
-
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
-
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"?
-
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?
-
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
-
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
-
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
-
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.
-
was glaubst du woher ich das habe ::)
Jetzt wollte ich das direkt in eine DB logen, das geht aber auch nicht...
MFG Michael
-
Mach am besten eine NotesLog.openAgentLog(), es dürfte deinen Ansprüchen am besten passten.
-
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
-
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
-
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 :).