Domino 9 und frühere Versionen > ND9: Entwicklung
Ändern des Betreffes ohne "Zerstörung" des NotesDocument
Jens T.:
Hallo zusammen!
Ich habe folgendes Problem:
Ich verwende zur weiteren Verarbeitung der Emails eine DLL, mit der ich eine Benutzeroberfläche aufrufe bei der ich nur Strings übergebe, da ich über Lotus die Email selbst als EML und Anhänge bereits temporär speichere.
Da Lotus scheinbar die verbindung nach einer Zeit zum Dokument verliert hole ich es mir bei der einzelverarbeitung über Session.CurrentDocumentContext wieder. Dies klappt wunderbar bei der Einzelverarbeitung.
Bearbeitung des Betreffs:
Set item =currentdoc2.ReplaceItemValue( "Subject", betreff+ " verarbeitet " )
Call CurrentDoc2.save (false,True)
Call session.UpdateProcessedDoc(CurrentDoc2)
Call ws.ViewRefresh
Problem ist bei der mehrfachauswahl, die ausgewählten Dokumente beziehe ich mir über set Collection= db.unpressesdDocument und durchlaufe diese mit einer For-Schleife.
Set currentDoc2=Collection.Getnthdocument(nthDoc)
Anschließend wird das Dokument auch ohne Probleme verarabeitet. Nach dem speichern bekomme ich allerdings das Problem, dass die Email im Anschluss nicht nicht erneut verarbeitet werden kann. Hier verliert das Dokument den Inhalt des Dokumentes (Anhang und Body).
Kann mir jemand veraten, wie ich das "Zerstören" umgehen kann?
Gruß Jens
rambrand:
Hallo Jens,
könntest Du etwas mehr Code posten und auch in die entsprechenden Tags setzen?
Der von Dir präsentierte Code zeigt nichts was ein "Zerstören" des Dokuments erklären würde.
Wie und wo rufst Du die Änderung des Dokuments auf? Wieso verliert Notes die Dokumentenverbindung?
Und ein Property CurrentdocumentContext gibt es in der Klasse Notessession nicht. DocumentContext ja, aber wieso greifst Du auf ein Dokument, das beim Starten des Agenten gerade aktiv ist zu? Läuft der Agent im "Before new mail arrives" Kontext?
Dann versteh ich aber das mit der Mehrfachauswahl nicht.
Gib mal mehr Infos.
Bye
Markus
Jens T.:
Hallo Markus,
die einzige Änderung des Dokumentes rufe ich beim Ändern des Betreffes auf.
Vorher extrahiere ich die Email nur als EML Datei, so wie auch die Anhänge.
Es ist ein eigener Agent von mir, der über eine eigene Aktion im Kontextmenü aufgerufen wird. Warum Notes die Bindung verliert weiß ich nicht.
rambrand:
Ziemlich unschön formatiert, macht keinen Spaß das zu lesen. Und es scheint unvollständig.
Wo ist das Next von Deiner "For nthDoc= ..." Schleife? Ich verstehe auch nicht warum Du zweimal die Notessession initialisierst.
Und zweimal die DB setzt (currentdb2 und db).
Du solltest Dir auch angewöhnen mit Option Declare zu arbeiten. In Deinem Script tauchen plötzlich Variablen (nthDoc, item, etc.) auf, man sieht zwar was sie sein sollen, aber sauber ist das nicht und kann schnell zu Fehlern führen, wenn Du plötzlich z.B. den falschen Type ansprichst.
Du kannst auch Dim Session as NotesSession und Set Session = New NotesSession zusammenfassen in Dim Session as New NotesSession.
Dann machst Du ein
--- Code: ---Set currentDoc2=CurrentDocColl2.Getnthdocument(nthDoc)
--- Ende Code ---
Das machst Du schon nach Beginn der For-Schleife. Wieso machst Du das da unten nochmal?
Wenn da unten irgendwo noch das Next stecken sollte, dann lädst Du das Document zweimal pro Durchgang in das Objekt.
Hast Du im Debugger verfolgen können wo das Script die "Verbindung" zum Dokument verliert?
Mit
--- Zitat ---Nach dem speichern bekomme ich allerdings das Problem, dass die Email im Anschluss nicht nicht erneut verarbeitet werden kann
--- Ende Zitat ---
meinst Du, Du kannst den Agenten nicht mehr erneut über die Dokumente jagen?
Das liegt dann wohl an
--- Code: ---Call session.UpdateProcessedDoc(CurrentDoc2)
--- Ende Code ---
Siehe Hilfe:
This method marks a document so subsequent invocations of the same agent recognize the document as processed. You must explicitly mark a document with this method. No implicit marking occurs in a LotusScript® agent.
If a marked document is modified, it is unmarked and will be processed by the next invocation of the agent.
Also erst wenn das Dokument verändert wird, kann der Agent es wieder bearbeiten.
Bye,
Markus
Peter Klett:
Gib zu, dass Du nicht wirklich Kontrolle über das Script hast.
Habe mal etlichen Inhalt gelöscht und nur ein paar Zeilen in der gleichen Reihenfolge stehen gelassen, wie sie in Deinem Script vorkommen
Dim Session2 As NotesSession
Set Session2 = New NotesSession
For nthDoc=1 to CurrentdocColl2.count
Dim uiws As NotesUIWorkspace
Dim s As New NotesSession
Dim session As NotesSession
Set session= New NotesSession
For nthDoc=1 to CurrentdocColl2.count
Du nutzt 3 Sessions, durchläufst einmal alle Dokumente und holst Dir jedesmal einen neuen Workspace, und durchläufst dann noch einmal je Dokument alle Dokumente. Wozu?
Ich würde da mal ganz gewaltig drin aufräumen. Keine doppelten Objekte, keine doppelte Schleife, keine Dims in den Schleifen usw.
Ich glaube, Notes verliert die Bindung zu den Dokumenten in dem Augenblick, in dem es die Augen schließt. So ein Computer ist schließlich auch nur ein Mensch ... ;)
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln