Autor Thema: While Schleife auf Server wird nicht ausgeführt  (Gelesen 6059 mal)

TomLudwig

  • Gast
While Schleife auf Server wird nicht ausgeführt
« am: 10.01.05 - 12:27:12 »
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

  • Gast
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #1 am: 10.01.05 - 12:54:04 »
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

  • Gast
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #2 am: 10.01.05 - 13:18:39 »
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.

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: While Schleife auf Server wird nicht ausgeführt
« Antwort #3 am: 10.01.05 - 13:41:14 »
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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Marinero Atlántico

  • Gast
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #4 am: 10.01.05 - 13:56:50 »
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
« Letzte Änderung: 10.01.05 - 13:58:33 von Marinero Atlántico »

TomLudwig

  • Gast
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #5 am: 10.01.05 - 14:08:05 »
Der Agent läuft ja, da bin ich mir sicher.
Er erstellt ja ein Log-Dokument in der er verschiedene Sachen schreibt.
Nur der Teil in der While Schleife wird nicht abgearbeitet.

Ich hab den Teil von Axel kurz eingefügt und bekomme auch zurück, dass das Dokument nicht vorhanden ist.

Jetzt ist mir aber noch eine weitere Meldung am Server aufgefallen:
10.01.2005 14:05:56,73 [0981:000C-0AF4] Web Auth> User ... found in group Cache

Diese Meldung kommt 5 Mal hintereinander.  Dann die Meldung das der Agent fertig ist...

Leider habe ich noch nix über diese Meldung gefunden. Kennt sie jemand von euch?

Driri

  • Gast
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #6 am: 10.01.05 - 14:25:53 »
Ist die View denn überhaupt auf dem Server verfügbar ? Mit welcher ID läuft der Agent denn, wenn Du ihn periodisch ausführst ?

Der Hinweis von Axel bezüglich Leserfeldern könnte auch das Problem verursachen.

Marinero Atlántico

  • Gast
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #7 am: 10.01.05 - 14:40:06 »
@Diri: Ich glaube, dass der Agent unmittelbar mit einem Fehler terminieren würde, wenn die View nicht auf dem Server vorhanden.
Mit einer "Object Variable not Set" und zwar genau dann, wenn view.getFirstDocument aufgerufen wird.
So etwas gibt es in jeder objektbasierten Programmiersprache. In Java z.B. mein "Freund" NullPointerException.
Da der Agent weiterläuft, ist es sehr wahrscheinlich, dass es an Leserberechtigungen liegt.

Gruß Axel

Driri

  • Gast
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #8 am: 10.01.05 - 14:53:18 »
Da hast Du auch wieder Recht. Nicht richtig nachgedacht.  ::)

Leserfelder bleibt aber als mögliches Problem.

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: While Schleife auf Server wird nicht ausgeführt
« Antwort #9 am: 10.01.05 - 14:54:02 »
@Diri: Ich glaube, dass der Agent unmittelbar mit einem Fehler terminieren würde, wenn die View nicht auf dem Server vorhanden.
Mit einer "Object Variable not Set" und zwar genau dann, wenn view.getFirstDocument aufgerufen wird.

Hi,

das glaube ich eher weniger, denn die Variable view ist nicht abhängig von Leserfeldern. Die Meldung kommt dann eher wenn du auf xDoc zugreifst und die ist nicht initialisiert.

Ich bin mir eigentlich auch sicher, dass es an so was liegen wird.

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

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #10 am: 10.01.05 - 14:58:12 »
Hi

evtl. stört ja der refresh?

gruss
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Marinero Atlántico

  • Gast
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #11 am: 10.01.05 - 15:07:22 »
warum sollte der refresh "stören" ???
Leert ein refresh vielleicht eine Ansicht?

@Axel:
geposteter code:
Code
Set ViewQMSResponses = CurrDb.GetView ("(LuQMSEntryResponses)")
ViewQMSResponses.Refresh
Set xDoc = ViewQMSResponses.GetFirstDocument
While Not (xDoc Is  Nothing)

Agent von mir, der jeder in seine Datenbank werfen kann:
Code
Sub Initialize
	Dim s As New Notessession
	Dim db As NotesDatabase
	Dim vw As Notesview
	
	Set db = s.currentDatabase
	Set vw = db.getView("aaaaaa")  ' eine view, die nicht existiert. 
	Set doc = vw.getFirstDocument
End Sub

Dies erzeugt ein Object Variable not set. Wenn die View auf dem Server nicht vorhanden wäre, würde der Agent in genau ViewQMSResponses.GetFirstDocument terminieren.
 
Axel

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #12 am: 10.01.05 - 15:20:41 »
Hi TOM
Die View ist keine Private View?

gruss
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

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: While Schleife auf Server wird nicht ausgeführt
« Antwort #13 am: 10.01.05 - 15:25:02 »
@Marinero Atlántico

Wenn die View nicht exisitert dann kommt es zu besagter Fehlermeldung. Da geb' ich dir uneingeschränkt recht.

Hier war die Rede von Leserfeldern und ausserdem läuft der Agent ja. Und wenn hier wirklich Leserfelder zuschlagen, ist zumindest die Variable view initialisiert.


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

TomLudwig

  • Gast
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #14 am: 10.01.05 - 16:31:13 »
Vielen Dank für die vielen Beiträge.

Das Problem ist gelöst !!!

Es lag an den Leser und Autorenfelder, die im Dokument hinterlegt waren.
Da der Server einfach umbenannt wurde, war er nicht mehr in den Feldern vorhanden und konnte somit auch nicht mehr auf die Dokumente zugreifen....


Vielen DANK noch einmal....


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #15 am: 10.01.05 - 16:38:38 »
An den Autorenfeldern lag es aber nicht, Tom. Dann hättest Du innerhalb der Schleife eine andere Fehlermeldung bekommen, wenn Du versucht hättest, ein Dokument zu speichern. Es waren - genau wie Axel gesagt hat - die Leserfelder.

Bernhard

Marinero Atlántico

  • Gast
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #16 am: 11.01.05 - 09:59:32 »
Trotzdem ist es aus meiner Sicht sehr sinnvoll, dass man sich für serverseitige Agenten ein auf NotesLog bestehendes Framework schafft.
Man braucht sich auch selbst keine eigene Logging Infrastruktur (eigene LogView, LogDokumente etc.) zu schaffen, weil mit dem aLog4.ntf in den erweiterten Schablonen schon alles vorhanden ist.
Dieses kann man dann prima mit der Klasse NotesLog ansprechen.
Um den Zugriff noch einfacher zu machen kann man sich ein eigenes Framework in Form von Klassen oder Scriptlibraries zu schaffen.
Das mit den print-Statements ist nicht so gut, weil die Einträge in der Log.nsf etwas später sichtbar sind gegenüber der Erzeugung und man nicht immer Zugriff auf die Life-Konsole hat, die überdies ziemlich ressourcenhungrig ist.
Ein wichtigeres Problem von log.nsf ist, dass da auf Produktivservern oft einfach viel zu viel drinsteht. U.a. weil Entwickler vergessen ihre debug-print statements da rauszunehmen, was wiederum die Administratoren verärgert.
Ich habe auch einen Kunden, wo ich garnicht in die Log.nsf auf Produktivservern sehen darf. Aus Sicherheitsgründen.
 
Gerade für serverseitige Agenten, gibt es mit NotesLog Möglichkeiten, die ich noch nicht ausprobiert habe aber bei Log4J in Java genauso laufen. Man kann das Logging zwischendurch ausschalten und es im Problemfall mit einer minimalen Code bzw. Config-Dok Änderung wieder einschalten (s. Methode LogEvent) zum Tracen.
Warum zwischendurch ausschalten? Bessere Performance.

Es geht hier um nicht-funktionale Requirements. Also Dinge, die der User nicht direkt als Feature bemerkt, die aber insgesamt die Total Costs of Ownership der gesamten Notes-Umgebung senken, weil z.B. hier eben Fehler leichter zu tracen sind.

Notes bietet hier seit R4 eine standardisierte, sinnvolle und gut-durchdachte Lösung. Oder gibt es da irgendwelche Gegenmeinungen  ???
Diese wird imho nicht ausreichend genutzt. Natürlich kann man sein eigenes unperformanteres und schlechteres Logging Framework schreiben. Dann braucht man das Notes-Standard-Logging nicht zu lernen. Der nächste Entwickler muss dann aber wieder dein Logging verstehen.

Oder wie der großartige Java-Satiriker Hani Suleiman nicht müde wird zu sagen:
Zitat
So please, please, stop hurting us poor users*. There's enough other stuff that defecates on us from great enough heights that this last touch seems just a bit excessive

* wenn ich eine bestehende Anwendung "repariere" bin ich erstmal ein User dieser Anwendung, weil ich den most brilliant code der Vorgänger erstmal verstehen muss.

Gruß Axel

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #17 am: 11.01.05 - 10:17:08 »
Oder man verwendet das OpenLog von www.openntf.org, da hats ein sehr schönes Log inkl. LS und JAVA klassen fürs logging und debugging.
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Marinero Atlántico

  • Gast
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #18 am: 11.01.05 - 10:30:34 »
@Umi: Was sind die konkreten Vorteile des Logging von diesen open sores gegenüber des bereits in Notes vorhandenen???
Oder wollen die vielleicht nur auch mal ein me-to Logging erstellen und ein bischen rumprangern ???

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: While Schleife auf Server wird nicht ausgeführt
« Antwort #19 am: 11.01.05 - 11:28:22 »
@Marinero
Dazu kann ich nicht viel sagen, da ich die NotesLog Umgebung nicht gut genug kenne.

+Das Openlog bietet schon eine einfache Klasse an, die mir die meisten Log fragen löst. Einfach einzubinden (scriptlib) einfach aufzurufen (call logerror)

+Ausserdem bietet es die Möglichkeit Alarme zu definieren auf das Logfile 'Wenn Fehler XYZ dann Meldung an bla@bluh"

+sieht besser aus als das noteslog :-)

+Loggt mit einem aufruf folgende infos:
Event type
Event time
Error number
Error line number
Error message
Agent/script language
Server name
Database name
Agent name
User Name
Effective User Name
User ACL access and roles for the current database
Client version in use on the workstation or server
Erroring function/sub/method name
Error stack trace (for all Java agents and LotusScript agents running on a release 6 or higher server)


Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz