Autor Thema: Probleme beim Kopieren von Attachments (RichText)  (Gelesen 2236 mal)

Weixel

  • Gast
Hallo @Notes-Gemeinde,

Vorab : Ich habe alle möglichen "Richtext Attachments Threads" hier im Forum durchgegangen und leider keine Hilfe für mein Problem gefunden.

Ich möchte ein RichtextItem mit einem Attachment von einem Dokument in ein RichTextItem eines anderes Dokuments kopieren.

Folgendes Szenario:
Datenbank "A" / Dokument "A" beinhaltet ein RichtextItem mit einem Anhang.
Diesen will ich über eine Aktion in Datenbank "B" / Dokument "B" in selbiges Dokument kopieren.

Code in Button:

Code
Sub Click(Source As Button)
	
	Dim workspace As New NotesUIWorkspace
	Dim session As New NotesSession
	Dim uidoc As NotesUIDocument
	Dim docB As NotesDocument
	Dim docStaff As NotesDocument
	Dim docA As NotesDocument
	Dim object As NotesEmbeddedObject
	Dim rtitem As NotesRichTextItem
	Dim dbB As NotesDatabase
	Dim dbA As New NotesDatabase ("","")
	Dim viewID As NotesView
	Dim collection As NotesDocumentCollection
	Dim docID As NotesDocument
	Dim colID As NotesDocumentCollection
	Dim strFilename As String
	Dim strID As String
	
	Const strDBPath = "xxx\xxx.nsf"
	
	On Error Goto ErrorHandler
	
	Set dbB = session.CurrentDatabase
	Set uidoc = workspace.CurrentDocument
	Set docB = uidoc.Document
	
	Call dbA.OpenWithFailover(dbB.Server,strDBPath)
	
	If dbA.IsOpen Then
		
		Set collection = workspace.PickListCollection( _
		PICKLIST_CUSTOM, _
		False, _
		dbB.Server, _
		strDBPath, _
		"Viewname", _
		"Anhangdokumente", _
		"Bitte wählen Sie ein Dokument aus.")
		If collection.Count = 0 Then
			Print "User canceled" 
			Exit Sub
		Else
			
			Set docStaff = collection.GetFirstDocument
			If Not docStaff Is Nothing Then
				
				Set viewID = dbA.GetView("(IDs)")
				
				strID = docStaff.GetItemValue("ID")(0)
				
				'Get Profile Document 
				Set colID = viewID.GetAllDocumentsByKey(Strleftback(strID,":"))
				
				For i = 1 To colID.Count
					Set docID = colID.GetNthDocument(i)
					
					If docID.GetItemValue("Form")(0) = "Profile" Then
						Set docA = docID						
					End If
				Next
				
				If Not docA Is Nothing Then
					
					Call docB.RemoveItem("ProfileAtt")			
					Call CopyItemBE(docB, docA, "Body", "ProfileAtt")	
					
				End If
			End If
		End If
	End If
	
	Call uidoc.Refresh(True,True)
	Call docB.Save(True, True)
	
	Dim unid As String
	Dim reopendoc As NotesDocument
	unid = docB.UniversalID 
	
	Call uidoc.FieldSetText("SaveOptions", "0")
	Call uidoc.Close 
	
	Delete docB
	Delete uidoc
	
	Set reopendoc = dbB.GetDocumentByUNID(unid) 
	Set uidoc = workspace.EditDocument(True , reopendoc) 
	
Ende:
	Exit Sub
	
ErrorHandler:
	Messagebox "Attachments kopieren - Fehler: " & Str$(Err) & " -> '" & Error$ & " in Zeile " & Str$(Erl) , 16, "Fehler"
	Resume Ende	
End Sub

Code
Function CopyItemBE(doc As NotesDocument, QDoc As NotesDocument, strname As String, strnewname As String)
	On Error Goto errHandler
	
	Dim item As NotesItem
	Dim session As New NotesSession
	Dim curdb As NotesDatabase
	Dim pathStaffDB As String
	
	strname = strReplace(strname, " ", "")	' replace spaces
	Set curdb = session.CurrentDatabase
	pathStaffDB = "xxxx\xxxx.nsf"
	
	If strnewname = "" Then				' if both names are the same
		strnewname = strname
	End If
	Set item = QDoc.GetFirstItem(strname)
	If Not item Is Nothing Then
		Call doc.CopyItem(item,strnewname)
	End If
	
	
GoOut:
	Exit Function
	
errHandler:
	Msgbox "Fehler #" & Err & " — " & Error$ & " (Zeile: " & Erl & ")" + Chr(13) + Chr(13) + MsgError, 48, MsgErrorTitle
	Resume GoOut
End Function


Er kopiert nun das Attachment.
Allerdings liegt es nicht in dem RichTextItem "ProfileAtt", sondern wird einfach immer unten im Dokument angehängt.

Vielen Dank schonmal für die Hilfe

MfG
Patrick
« Letzte Änderung: 15.09.09 - 12:46:29 von Weixel »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Probleme beim Kopieren von Attachments (RichText)
« Antwort #1 am: 15.09.09 - 11:41:27 »
Es spricht einiges dafür, dass nicht alle Items namens "ProfileAtt"vor dem CopyItem beseitigt wurden. Hier würde ich als erstes ansetzen.

Bernhard

Weixel

  • Gast
Re: Probleme beim Kopieren von Attachments (RichText)
« Antwort #2 am: 15.09.09 - 13:55:02 »
Also nochmal mein Ablauf:

Ich erstelle ein neues Dokument und starte dort über einen Button das Einfügen des Attachments.

Habe es nun auch über RTItem Handling (Append) probiert :

Code
If Not docProfile Is Nothing Then
					
  'Call doc.RemoveItem("ProfileAtt")					
  Call CopyItemBE(doc, docProfile, "Body", "ProfileAtt")	
					
End If

Code
Function CopyItemBE(doc As NotesDocument, QDoc As NotesDocument, strname As String, strnewname As String)
.
.
.
'Hier holt er sich das RichTextItem mit dem Attachment (korrekt gesetzt)
Set rtiBody = QDoc.GetFirstItem(strname)
	If Not rtiBody Is Nothing Then
		
                'Das Ziel RTItem , welches auch korrekt gesetzt wird
		Set rtiAttachment = doc.GetFirstItem(strnewname)
		
                'Überspringt er logischerweise
		If rtiAttachment Is Nothing Then
			Set rtiAttachment = New NotesRichTextItem (doc,strnewname)
		End If
		
		'Und genau hier ist der Fehler, es verändert sich nichts am rtiAttachment
		Call rtiAttachment.AppendRTItem(rtiBody)

		'Call doc.CreateRichTextItem(strnewname)
		'Call doc.CopyItem(item,strnewname)
	End If

GoOut:
	Exit Function

Anbei noch ein Screenshot vom Debugger, wenn ich über die besagte Zeite gehe (nachdem)

Bin echt ratlos
« Letzte Änderung: 15.09.09 - 13:59:21 von Weixel »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz