Domino 9 und frühere Versionen > ND6: Entwicklung
Sub Terminate wird nicht abgearbeitet
cubetoon:
Hallo liebe Leidensgenossen :-)
Ich bin gerade einmal wieder beim debuggen der IBM Standard-Templates. Im speziellen dem Newsletter-Agent des R6 Teamrooms.
Mein Problem ist hier, dass dieses (soweit habe ich es nun schon herausgefunden) den Sub Terminate nicht ausführt, was zur Ffolge hat, das alle Dokumente aus sicht des Agents weiterhin unprocessed sind und somit beim nächsten Agentlauf wieder alle Dokumente als neue Dokumente vermailt.
Nun habe ich (testweise) in einer Datenbank die dafür verantwortliche Funktion an das Ende der Sub Initialize gestellt - ab dem Moment funktioniert das ohne Probleme.
Welche Gründe kann es geben, dass der Sub Terminate gar nicht angetriggert wird? Hier geht es wie gesagt um den ganz normalen Newsletter-Agent im Teamroom, da ist nichts customized.
Vielen Dank,
Christian
PS: für diejenigen, die die Prozedur nicht auswendig kennen:
--- Code: ---Sub Terminate
If Not (failed) Then
Set collection = db.UnprocessedDocuments
For n = 1 To collection.Count
Set note = collection.GetNthDocument(n)
Call s.UpdateProcessedDoc(note)
Next
End If
End Sub
--- Ende Code ---
Failed wird im Fehlerfall (onError) auf True gesetzt ansonsten ist es immer False
koehlerbv:
Dem Terminate-Event traue ich auch nicht über den Weg, ich muss aber ehrlich sagen, dass ich das schlicht nicht brauche, sondern alles gezielt im eigentlichen Code abfackle.
Was Dein Problem angeht: Warum die Aufgabe denn nicht wirklich im Terminate abhandeln ? Und: Wird Terminate überhaupt nicht angesprungen (oder mag da der Debugger - eben wegen dem Terminate - nur nicht mehr ?) Was sagt eine Messagebox an der Stelle ? Wie ist Failed wirklich belegt ?
Wegen des Codes an sich: Du erreichst das Ziel wesentlich performanter mit NotesDocumentCollection.UpdateAll als über eine Schleife.
An Deinen weiteren erfahrungen bin ich sehr interessiert - wie gesagt, Terminate ignoriere ich für gewöhnlich ... (was ggf. sträflich ist)
Bernhard
cubetoon:
Hallo Bernhard,
ich glaube ich schließe den Test mit der Erfahrung ab, dass ich den Sub Terminate niemals verwenden werden.
Was habe ich also rausgefunden:
1. Sub Terminate wird abgearbeitet
2. failed = false - die Schleife wird also begonnen
3. dann scheint es jedoch so als ob die collection nichts vernüftiges zurück gibt bzw. leer ist.
4. Auch die nochmalige Variablendeklaration innerhalb des Terminate-Sub hilft da nicht weiter
Vernüftiges Debugging scheint hier leider nicht möglich. Nur Prompt und Messagebox.
Daher bleibe ich bei meinem einleitenden Satz und vergesse, dass es den Sub Terminate überhaupt gibt - es sei denn jemand weiß noch einen Grund.
Christian
koehlerbv:
Jetzt sehe ich erst, wo der Hund begraben liegt: In einem Agent kannst Du eine NotesDocumentCollection über UnprocessedDocuments nur einmal bilden - danach sind sie für den Agent nicht mehr Unprocessed.
Ich sehe allerdings nach wie vor keinen Grund, für das UpdateAll das Terminate-Event herzunehmen. Wenn Du das doch machen willst / musst, dann deklariere die Collection für den Agent global und instantiiere sie im Initialize.
HTH,
Bernhard
cubetoon:
das klingt logisch - wie eingangs erwähnt ist der Mist ja nicht mal bei mir entstanden. Der Script ist im Original Teamroom Template der Version 6 so enthalten und die User beschweren sich eben, dass sie täglich über alle - und nicht nur die neuen Dokumente informiert werden. Dem wollte ich dann mal auf den Grund gehen.
Insofern habe ich nun aber generelle bedenken über die Funktionalität des Agents. Denn dort wird pro Newsletter - Abonement eine neue Suche innerhalb der UnprocessedDocuments durchgeführt - demzufolge bekommt nur der erste überhaupt eine Mail ...
Interessant, hat das IBM getestet. No Matter - wir nutzen die Funktion nicht wirklich, war nur interessehalber. Dennoch gut zu wissen!
Christian
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln