Domino 9 und frühere Versionen > ND6: Entwicklung
While Schleife auf Server wird nicht ausgeführt
TomLudwig:
Hallo zusammen,
ich habe einen periodischen Agenten, der unter anderen folgenden Code ausführt:
...
Set ViewQMSResponses = CurrDb.GetView ("(LuQMSEntryResponses)")
ViewQMSResponses.Refresh
Set xDoc = ViewQMSResponses.GetFirstDocument
While Not (xDoc Is Nothing)
...
Starte ich den Agenten manuell wird der Teil in der While-Schleife ausgeführt. Läuft der Agent periodisch wird alles in der While-Schleife nicht ausgeführt.
Dokumente sind in beiden Fällen vorhanden. Ich habe es getestet indem ich direkt nach dem Anfang der While-Schleife mir etwas in ein Dokument schreiben habe lassen.
Nun weiß ich nicht warum der Server den Code in der While-Schleife ignoriert...
Kann mir jemand helfen ?!?
Danke, Tom
Marinero Atlántico:
Das Problem liegt sicher woanders.
2 Fragen:
1. Hast du errorhandling in dem Agent. Dann könnte man das Problem leichter eingrenzen.
2. Es gibt zwar seit 6 wohl Möglichkeiten serverseitige Agenten zu debuggen. Für mich hat aber bei solchen Problemen immer Logging ausgereicht. NotesLog-Klasse. Benutzt du sowas?
Ansonsten ist jede Antwort ein Blindflug. D.h. das eigentliche Problem ist, dass du die zur Verfügung stehenden Werkzeuge des Bugtracking wie Errorhandling oder Logging nicht richtig einsetzt.
(nicht persönlich gemeint)
Gruß Axel
TomLudwig:
Ich glaube nicht, dass das Problem wo anders liegt.
Weil alles was nach der While-Schleife steht wieder richtig ausgeführt wird.
Die NotesLog Klasse hab ich mir angeschaut. Da kann ich ja nur selbst Werte rein schreiben.
Mit Error-Handling kenn ich mir leider nicht so genau aus. Aber da der Rest des Codes ausgefürht wird, denke ich nicht, dass ein Fehler auftritt.
Axel:
Hi,
ich denke auch, dass das Problem wo anders liegt. Da wäre das erste Mal, dass eine Schleife nicht läuft, nur weil der Agent auf dem Server läuft.
Wenn dir das mit der NotesLog - Klasse zu aufwändig ist, dann füge doch mal an den relevanten Stellen im Code Print-Anweisungen ein. Die Meldungen siehst du dann in der log.nsf des Servers unter der Ansicht "Verschiedene Ereignisse".
Ich würde hier z.B. mal eine Print-Anweidung einbauen, um zu sehen, ob xDoc gefüllt ist.
Set ViewQMSResponses = CurrDb.GetView ("(LuQMSEntryResponses)")
ViewQMSResponses.Refresh
Set xDoc = ViewQMSResponses.GetFirstDocument
If xDoc Is Nothing Then
Print "Agent xy: xDoc nicht initialisiert"
Else
Print "Agent xy: xDoc initialisiert"
End If
While Not (xDoc Is Nothing)
...
Damit sollte nach dem der Agent gelaufen ist eine entsprechende Ausgabe in der log.nsf vorhanden sein.
Bei periodischen Agenten sollte eine saubere Fehlerbehandlung Pflicht sein. Sonst kann das zu unvorhergesehenen Ergebnissen führen.
Näheres zur Fehlerbehandlung findest du hier: Best Practices: Error Handling in Lotus Script
Axel
Marinero Atlántico:
Logging ist für diese Problemstellung mit großer Sicherheit das beste Arbeitsmittel.
Vielleicht sind in den Dokumenten Leser-Felder und der Agent ist mit einer ID unterzeichnet, die eben diese Leserberechtigung nicht hat.
Mit ErrorHandling solltest du dich auf jeden Fall auseinandersetzen.
Das gehört einfach zu den qualitätssichernden Maßnahmen. Genauso wie Logging. Eindeutig eine Verantwortlichkeit des Entwicklers.
Gruß Axel
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln