Autor Thema: Ändern des Betreffes ohne "Zerstörung" des NotesDocument  (Gelesen 4845 mal)

Offline Jens T.

  • Frischling
  • *
  • Beiträge: 9
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

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Re: Ändern des Betreffes ohne "Zerstörung" des NotesDocument
« Antwort #1 am: 28.10.15 - 13:48:52 »
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
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline Jens T.

  • Frischling
  • *
  • Beiträge: 9
Re: Ändern des Betreffes ohne "Zerstörung" des NotesDocument
« Antwort #2 am: 28.10.15 - 14:39:32 »
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.


« Letzte Änderung: 29.10.15 - 13:11:35 von Jens T. »

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Re: Ändern des Betreffes ohne "Zerstörung" des NotesDocument
« Antwort #3 am: 28.10.15 - 16:25:39 »
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)

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
meinst Du, Du kannst den Agenten nicht mehr erneut über die Dokumente jagen?

Das liegt dann wohl an
 
Code
Call session.UpdateProcessedDoc(CurrentDoc2)

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
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Ändern des Betreffes ohne "Zerstörung" des NotesDocument
« Antwort #4 am: 28.10.15 - 17:00:13 »
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 ... ;) 

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Ändern des Betreffes ohne "Zerstörung" des NotesDocument
« Antwort #5 am: 28.10.15 - 18:55:19 »
Also der Code ist unvollständig, vielleicht mag das Forum ja Überlängen nicht, am besten hängst Du den ganzen Agenten mal als .lss an.

Aber verstehe ich das richtig, Du möchtest die
1. Alle selektierte Dokumente durchlaufen?
2. Diese Dokumente als .eml exportieren
3. Das Subjekt ändern

Gehe ich weiterhin richtig in der Annahme, das Du zum aufrufen des Agenten eine einfach Aktion benutzt hast und daher das 'UpdateProcessedDoc' eingebaut hast?
Gehe ich weiterhin richtig in der Annahme, das der Code im Agent steckt und nicht in einer ScripbtLib, weil Du eh keine Versionsverwaltung für das Script geplant hattest?
Andy

Offline Jens T.

  • Frischling
  • *
  • Beiträge: 9
Re: Ändern des Betreffes ohne "Zerstörung" des NotesDocument
« Antwort #6 am: 29.10.15 - 13:17:45 »
Hallo und danke für die nächsten Antworten,

ich habe mal den Code oben entfernt, da ich mittlerweile mitbekommen habe, wo der Fehler liegt.

Es liegt an dem ConvertToMime(3). Das Dokument ging nicht verloren, sondern es wurde ja durch das Konvertieren in eine EML umgewandelt.
Jetzt ist die Frage, wie ich dann am besten aus einer konvertierten EML Datei Anhänge auslese?

Dieser Code funktioniert nur, wenn das Dokument noch nicht konvertiert wurde...

Code
Set rtitem = currentdoc2.getfirstItem("Body")

		Dim fileCount As Integer
		fileCount=0
		
		On Error Resume Next		

		Dim anhaengename(30) As String
		Dim anhaenge(30) As String
		If ( rtitem.Type = RICHTEXT ) Then
		On Error Resume Next
		ForAll o In rtitem.EmbeddedObjects
			If ( o.Type = EMBED_ATTACHMENT ) And ( o.FileSize > 0 ) Then
				anhaengecount%=anhaengecount%+1
				fileCount = fileCount + 1
				
				Call o.ExtractFile (Environ("Temp")&"\" + o.Name )
				anhaengename(anhaengecount%)=o.Name
				anhaenge(anhaengecount%)= (Environ("Temp")&"\" + o.Name )
				'Call currentDoc2.Save( false, True )
			End If
		End ForAll
		End Error		
		End If


@ Andrew Harder

Du gehst mit der Annahmen richtig. Das einzige was in den Annahmen fehlt ist dass ich vorher die Anhänge exportiere.
Gruß Jens
« Letzte Änderung: 29.10.15 - 13:20:39 von Jens T. »

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Ändern des Betreffes ohne "Zerstörung" des NotesDocument
« Antwort #7 am: 29.10.15 - 13:39:08 »
Du willst also eine Mail in EML umwandeln und die in der Mail enthaltenen Dateianhänge separat speichern?

Du kannst die Mail in EML umwandeln und Du kannst aus der Mail die Dateianhänge speichern, solange sie noch nicht in EML umgewandelt ist?

Warum drehst Du die Reihenfolge nicht einfach um?

1. Dateianhänge speichern
2. Mail in EML umwandeln
« Letzte Änderung: 29.10.15 - 13:41:08 von Peter Klett »

Offline Jens T.

  • Frischling
  • *
  • Beiträge: 9
Re: Ändern des Betreffes ohne "Zerstörung" des NotesDocument
« Antwort #8 am: 29.10.15 - 14:29:47 »
Hallo nochmal,

ich brauche die Email als exportierte EML Datei. Nachdem ich es exportiert habe kann ich dieses Dokument aber nicht mehr zurück konvertieren (oder doch?).
Das mit dem Umdrehen ist keine Option, wenn das Dokument nochmals verarbeitet werden soll, ist es ja dann bereits als EML Datei in der Datenbank vorhanden.

Gruß Jens

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Ändern des Betreffes ohne "Zerstörung" des NotesDocument
« Antwort #9 am: 29.10.15 - 15:04:07 »
Also, habe das mal nachgebaut, weil das nicht wirklich mein Fachgebiet ist.

Mit diesem Agenten führe ich das ConvertToMime auf eine Mail mit Dateianhängen aus und ändere den Titel.

Code
Sub Initialize 
        Dim session As New NotesSession 
        Dim db As NotesDatabase 
        Set db = session.CurrentDatabase 
        Dim col As NotesDocumentCollection 
        Set col = db.UnprocessedDocuments 
        Dim doc As NotesDocument 
        Set doc = col.GetFirstDocument 
        Call doc.ConvertToMime (3) 
        doc.Subject = "xxx" & doc.Subject (0) 
        Call doc.Save (True, True) 
End Sub 

Mit diesem Agent zeige ich mir DANACH die in dem Body enthaltenen Dateien an.

Code
Sub Initialize 
        Dim session As New NotesSession 
        Dim db As NotesDatabase 
        Set db = session.CurrentDatabase 
        Dim col As NotesDocumentCollection 
        Set col = db.UnprocessedDocuments 
        Dim doc As NotesDocument 
        Set doc = col.GetFirstDocument 
        Dim rtitem As NotesRichTextItem 
        Set rtitem = doc.Getfirstitem("Body") 
        ForAll o In rtitem.Embeddedobjects 
                MsgBox o.Name 
        End ForAll 
End Sub 

Du schreibst, dass Du .eml-Dateien exportieren willst. Mit ConvertToMime (3) erzeugst Du aber keine .eml-Dateien, sondern wandelst Richtext in Mime um.

Die .eml-Datei würde auch nicht in der Datenbank vorhanden sein, die wird ja genutzt, um sie außerhalb von Notes als Datei abzulegen.

Sorry, ich kann Dir nicht wirklich folgen, was Du willst, was bereits funktioniert, und wo dabei das konkrete Problem ist.

Offline Jens T.

  • Frischling
  • *
  • Beiträge: 9
Re: Ändern des Betreffes ohne "Zerstörung" des NotesDocument
« Antwort #10 am: 30.10.15 - 16:45:03 »
Hallo,

Du hast recht ich nutze aber ConvertToMime(3) um daraus ein EML zu bauen und da ist scheinbar mein Problem. Da ich es in Mime umwandle habe ich beim nächsten Versuch das Problem auf die Elemente zuzugreifen, da die Änderung zum Mime wohl in der Datenbank gespeichert wird. Gibt es die Möglichkeit die Umwandlung wieder rückgängig zu machen, nachdem man das Dokument als Mime verarbeitet hat.

Gruß Jens

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Ändern des Betreffes ohne "Zerstörung" des NotesDocument
« Antwort #11 am: 30.10.15 - 18:49:06 »
Du wandelst das doc in MIME um, stream auf und als eml speichern.
So weit, so gut.

Wenn Du nun auf das doc ohne MIME Umwandlung zugreifen möchtest, dann speichere es einfach nicht und hole es dir nochmal per UNID.
Nur verstehe ich nicht warum Du das so machst, mach doch erst den Rest und dann am Schluss den eml export, kein weiteres speichern des docs mehr und weiter mit dem nächsten document.

Oder stehe ich da irgendwo auf dem Schlauch?

Andy

Offline Jens T.

  • Frischling
  • *
  • Beiträge: 9
Re: Ändern des Betreffes ohne "Zerstörung" des NotesDocument
« Antwort #12 am: 30.10.15 - 19:42:30 »
Danke Andrew!

klappt jetzt alles wie geplant. Bin nur selbst nicht darauf gekommen mir es per unid wieder aus der Datenbank zu ziehen  :-\

Gruß Jens

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz