Autor Thema: Anhang in neues Memo hängen  (Gelesen 2080 mal)

Offline Freezer

  • Aktives Mitglied
  • ***
  • Beiträge: 161
  • Geschlecht: Männlich
  • Oinr isch emmr dr Arsch!
Anhang in neues Memo hängen
« am: 10.02.06 - 13:27:59 »
Hallo zusammen,
auch nach Durchforsten des Forums komm´ ich einfach nicht mehr weiter.

Ich möchte anhand eines Doc-Links das entsprechende Dokument suchen und die dort befindlichen Anhänge in ein neues Dokument hängen und per Mail wieder versenden.
Soweit zur Theorie.
Mein Code funktioniert soweit, wenn ich ihn mit dem Debugger ausführe. Läuft der Agent jedoch periodisch gestartet, so bekomme ich zwar eine Mail, aber keine Anhänge mit.

Hat mir da jemand vielleicht einen Tipp?

Code

Sub SucheDoc
                Dim session As NotesSession
                Dim db As NotesDatabase
                Dim view As NotesView
                Dim col As NotesDocumentCollection
                Dim rtitem As NotesRichTextItem
                Dim rtnav As NotesRichTextNavigator
                Dim rtlink As NotesRichTextDocLink
                Dim doc As NotesDocument
                Dim unid As String
	Set session = New NotesSession
	Set db = session.CurrentDatabase
	Dim linkDb As New NotesDatabase("", "")
	Dim linkDoc As NotesDocument
	Dim tempDoc As NotesDocument
	Dim linkServer As String
	Dim linkDBID As String
	Dim linkViewID As String
	Dim linkDocID As String
	Dim MDoc As NotesDocument
	Dim MRTItem As NotesRichTextItem
		
	Set view = db.GetView("($All)")
	Set doc = view.GetFirstDocument        'Doc mit Doc-Link
	
	While Not (doc Is Nothing)
		
		Set rtitem = doc.GetFirstItem("Body")
		Set rtnav = rtitem.CreateNavigator
		Set rtlink = rtnav.GetFirstElement(RTELEM_TYPE_DOCLINK)
		linkServer = rtlink.ServerHint
		linkViewID = rtlink.ViewUnID
		linkDBID = rtlink.DBReplicaID
		linkDocID = rtlink.DocUnID
		
		
		If linkDB.isopen Then
			Goto SPRUNG
		Else
			Call linkDb.OpenByReplicaID(linkServer, linkDBID ) 
		End If
		
SPRUNG:
		Set linkDoc = linkDB.GetDocumentByUNID(linkDocID)
		Set tempDoc = db.CreateDocument
		Set MDoc = New NotesDocument( db )
		
		If linkDoc.HasEmbedded Then
			Call linkDoc.CopyAllItems( tempDoc, True )
									
			Forall item In tempDoc.Items
				If Not (Ucase(item.Name) = "$FILE") Then
					tempDoc.RemoveItem (item.Name)
				End If  
			End Forall
			Call tempDoc.CopyAllItems(MDoc)
			
			MDoc.Subject = "Angeforderte Dokumente "
			Set MRTItem = MDoc.CreateRichTextItem("body")
			Call MRtItem.AppendText("Hier die angeforderten Dokumente: ")
			MDoc.Form = "Memo"
			MDoc.SendTo = doc.GetItemValue("From")
		Else
			MDoc.Subject = "Angeforderte Dokumente konnten nicht ermittelt werden"
			Set MRTItem = MDoc.CreateRichTextItem("body")
			Call MRtItem.AppendText("Ihre angeforderten Dokumente konnten nicht ermittelt werden. Eventuell beinhaltet das Zieldokument keine Anhänge. ")
			MDoc.Form = "Memo"
			MDoc.SendTo = doc.GetItemValue("From")
		End If
		
		Call MDoc.Send( False )
		Set doc = View.GetNextDocument(doc)
	Wend
	
		Set doc = view.GetFirstDocument
	While Not (doc Is Nothing)
		Call doc.RemovePermanently(True)
		Set doc = view.GetFirstDocument
	Wend
	
End Sub


Gruß, Freezer
« Letzte Änderung: 15.02.06 - 08:28:06 von Freezer »
Client: R8.5.1 (deutsch)
Server: DOMINO 8.5.1
BS: Win2003

Offline stb

  • Frischling
  • *
  • Beiträge: 6
Re: Anhang in neues Memo hängen
« Antwort #1 am: 12.02.06 - 00:30:10 »
Läuft der Agent jedoch periodisch gestartet, so bekomme ich zwar eine Mail, aber keine Anhänge mit.

Läuft der Code, wenn Du diesen Agenten manuell startest?

Ich würde auch mal mitloggen lassen, das ist bei periodischen Agenten eh zu empfehlen. Lass Dir dabei mal jede Aktion entsprechend ausgeben, interessant dabei sind hier sicherlich auch Inhalte der Variablen. So kannst Du das ganze eingrenzen.

Offline Freezer

  • Aktives Mitglied
  • ***
  • Beiträge: 161
  • Geschlecht: Männlich
  • Oinr isch emmr dr Arsch!
Re: Anhang in neues Memo hängen
« Antwort #2 am: 14.02.06 - 12:06:12 »
Zitat

Läuft der Code, wenn Du diesen Agenten manuell startest?

Der Code läuft manuell angestartet zumindest soweit, dass er mir den ersten Anhang zuschickt. Kommen mehrere Felder mit dem Namen $FILE vor, so nimmt er immer das erste Feld.

Beim periodischen Start bin ich mittlerweile so weit, dass ich herausgefunden habe, an welcher Stelle es liegen könnte, nämlich hier

Code
...

If linkDoc.HasEmbedded Then
			Call linkDoc.CopyAllItems( tempDoc, True )
									
			Forall item In tempDoc.Items
				If Not (Ucase(item.Name) = "$FILE") Then
					tempDoc.RemoveItem (item.Name)
				End If  
			End Forall

			Call tempDoc.CopyAllItems(MDoc)      '<= hier hängt´s wohl
		
			MDoc.Subject = "Angeforderte Dokumente "
			Set MRTItem = MDoc.CreateRichTextItem("body")
			Call MRtItem.AppendText("Hier die angeforderten Dokumente: ")


Es werden offensichtlich keine $FILE - Felder von "tempDoc" nach "MDoc" kopiert, nachdem andere Felder aus "tempDoc" gelöscht wurden.

Aber warum denn nur  :-:

Freezer
Client: R8.5.1 (deutsch)
Server: DOMINO 8.5.1
BS: Win2003

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Anhang in neues Memo hängen
« Antwort #3 am: 14.02.06 - 12:10:01 »
$File-Items sind verlinkt mit dem RTI, in dem das Attachment erstellt wurde. Kopiere daher einfach das betreffende Item in das Zieldokument. Die $Files werden debei von Notes mitgenommen.

Bernhard

Offline Freezer

  • Aktives Mitglied
  • ***
  • Beiträge: 161
  • Geschlecht: Männlich
  • Oinr isch emmr dr Arsch!
Re: Anhang in neues Memo hängen
« Antwort #4 am: 15.02.06 - 08:35:44 »
Hallo  ;D

Bernhard´s Tipp war wieder mal goldrichtig. Ich hab´ jetzt mit "copyItem" das RT-Item samt Attachment ins Zieldokument kopiert und es funktioniert.

Danke wieder mal!

Freezer
Client: R8.5.1 (deutsch)
Server: DOMINO 8.5.1
BS: Win2003

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz