Hallo zusammen,
ich übernehme ein Richtextfeld (Anhänge, eingebundene Bilder, Text) via AppendRTItem in ein RTItem eines anderen Dokumentes.
Führt man diese Aktion zweimal aus, so sind die Inhalte im RTItem des Zieldokumentes doppelt drin. Das ist ja auch in Ordnung, so habe ich es erwartet.
Enthält das Quell-Item allerdings einen Anhang, so teilen sich die nun doppelten Anhänge im Ziel-Dokument ein $FILE Item. Auch das ist eigentlich clever, da so nicht unnötig Ballast aufgebaut wird.
Aber: Löscht man nun einen der doppelten Anhänge im Ziel-Item (egal welchen), so wird auch das zugehörige $FILE Item gelöscht, der/die verbleibenden (doppelten) Anhänge sind dann nur noch leere Verweise die sich entsprechend auch nicht öffnen lassen ("Element des Dokuments nicht gefunden").
Das Problem ist, wenn in der betroffenen Anwendung nun ein Kunde versehentlich zweimal die Übernahme anstößt, das merkt und seinen Fehler bereinigen will in dem er die doppelten Informationen löscht, die verbleibenden Anhänge defekt sind.
Nachvollzogen unter 7.0.2 und 8.0.1 mit einer Test-Datenbank, die nur diese Funktionalität enthält.
Code der Übernahme-Aktion:
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim s As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim docSource As NotesDocument, docTarget As NotesDocument
Dim rtiSource As NotesRichTextItem, rtiTarget As NotesRichTextItem
Set db = s.CurrentDatabase
Set view = db.GetView("RTI_TEST")
Set docSource = ws.CurrentDocument.Document
Set docTarget = view.GetDocumentByKey("RTI_TARGET", True)
Set rtiSource = docSource.GetFirstItem("RTI")
Set rtiTarget = docTarget.GetFirstItem("RTI")
Call rtiTarget.AddNewline(1)
Call rtiTarget.AppendText("Übernahmezeitpunkt: " & Now)
Call rtiTarget.AddNewline(1)
Call rtiTarget.AppendRTItem(rtiSource)
Call docTarget.Save(True, False)
End Sub
(Test-DB nur zum Nachstellen in einer sauberen Umgebung, daher kein Errorhandling etc.)
Frage: Kann ich das verhindern? Wenn ja: Wie? Oder gibt es bessere Ansätze zum Übernehmen von Richtextfeldern?
Gruß,
Mitch