Domino 9 und frühere Versionen > ND8: Entwicklung
Problem: LotusScript Agent bearbeitet zu viele Dokumente
Peter Klett:
Zum Thema Performancekiller:
So lange man nur das erste Dokument mittels GetNthDocument (1) holt, stellt das keinen Unterschied zu GetFirstDocument dar. Der Performance-Unterschied kommt erst bei höheren Zahlen. Vermutlich arbeitet die Routine intern auch mit Routinen wie GetFirstDocument und GetNextDocument, vielleicht sinngemäß so (nur von der Logik, nicht von der Syntax):
Function GetNthDocument (nr As Long) As NotesDocument
Set doc = view.GetFirstDocument
For i = 1 to nr
Set doc = view.GetNextDocument (doc)
Next i
Set GetNthDocument = doc
End Sub
Dass das nicht schnell gehen kann, ist wohl eindeutig.
Ich hatte vor vielen Jahren mal einen Performancevergleich mit 3.000 Dokumenten gemacht und keinen wesentlichen Unterschied festgestellt. Seither hatte ich intensiv GetNthDocument genutzt. Bis ich mal bei über 50.000 Dokumenten in das totale Performanceloch gefallen bin, daraufhin habe ich GetNthDocument aus meinem Wortschatz gestrichen.
Zu Deiner Lösung:
Du hast eine Ansicht, in der alle zuzustellenden Dokumente sind. Du greifst Dir das erste und prüfst, ob das zugestellt wurde. Falls ja, refreshst Du die Ansicht und holst Dir wieder das erste Dokument, solange, bis Du keines mehr findest.
Wenn man sich ganz viel Mühe gibt, geht das wahrscheinlich auch noch komplizierter.
Warum holst Du Dir nicht alle Dokumente, die nicht gesendet wurden, als NotesDocumentCollection (mittels NotesDatabase.Search) und arbeitest diese Dokumente von oben nach unten ab?
Als Gerüst etwa so
....
Dim col As NotesDocumentCollection
Set col = db.Search (|Form = "DeineForm" & Agent = "NICHT ZUGETEILT"|, Nothing, 0)
Dim doc As NotesDocument
Set doc = col.GetFirstDocument
Do While Not doc Is Nothing
'doc senden, markieren, speichern
Set doc = col.GetNextDocument (doc)
Loop
uka:
--- Zitat von: Peter Klett am 04.07.11 - 11:22:46 ---Dim col As NotesDocumentCollection
Set col = db.Search (|Form = "DeineForm" & Agent = "NICHT ZUGETEILT"|, Nothing, 0)
Dim doc As NotesDocument
Set doc = col.GetFirstDocument
Do While Not doc Is Nothing
'doc senden, markieren, speichern
Set doc = col.GetNextDocument (doc)
Loop
--- Ende Zitat ---
Hallo,
mit diesem Script bleiben weiterhin 2 Probleme bestehen:
- "illegale executable code at the modul level" und daraus resultierende Fehlermeldung
- holt auch dieses Script immer das gleiche Dokument hoch
Es ist angedacht das immer das nachfolgende Dokument hochgeholt wird ( damit eine gleichmäßige Bearbeitung gegeben ist und nicht an einem Tag 2 Kunden abgearbeitet werden und der Rest nicht angefast wird). Bei dem Grund-Script wird dies über die Ansicht gemacht, indem nach dem Änderungsdatum sortiert wird.
Gruß & Dank
Peter Klett:
In welchem Kontext läuft die Routine? Periodischer Agent? Welche Rechte auf die Datenbank hat der Agentenunterzeichner? Welche Rechte hat der Unterzeichner bzgl. periodischer Agentenausführung? An welcher Stelle erfolgt die Fehlermeldung -> Debugger? Wie sieht der komplette Code aus? ...
Meine Glaskugel macht Urlaub im Süden, die hat die Nase voll vom dauernden Regen ...
uka:
--- Zitat von: Peter Klett am 04.07.11 - 11:58:18 ---In welchem Kontext läuft die Routine? Periodischer Agent? Welche Rechte auf die Datenbank hat der Agentenunterzeichner? Welche Rechte hat der Unterzeichner bzgl. periodischer Agentenausführung? An welcher Stelle erfolgt die Fehlermeldung -> Debugger? Wie sieht der komplette Code aus? ...
Meine Glaskugel macht Urlaub im Süden, die hat die Nase voll vom dauernden Regen ...
--- Ende Zitat ---
@Peter Klett
-> Der Agent wird durch den User ausgelöst ( Gemeinsamer Agent ), Signiert ist er von einen Administrator mit Vollzugriff.
-> Die Fehlermeldung kommt direkt sobald man drauf Klickt einmal, dann läuft er jedoch durch ( der Designer meckert ja auch, das hier ein Fehler im Script ist)
Aber:
Manchmal liegt die Lösung vor den Augen und doch so fern .. die Lösung (mit dem alten Script von oben) :
In einem anderen Script-Agenten war eine Schleife enthalten, die solange durchlief bis die Anzahl von zugeteilten Dokumenten des Users 3 war.
(Herausgefunden durch die Umbenennung des Agenten ::) )
Vielen Dank nochmal und Gruß :)
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln