Du bist sicher, dass das Bild nur 172 Byte hat? Ich glaube eher nicht... Ich habe gerade bei mir folgenden Code probiert:
Dim docNew as NotesDocument
Set docNew = New NotesDocument( g_dbFocus )
docNew.Form = "Memo"
Dim rtBody as NotesRichtextItem
Set rtBody = g_docFocus.GetFirstItem( "Body" )
Call rtBody.CopyItemToDocument( docNew, "Body" )
Dim ws as New NotesUIWorkspace
Call ws.EditDocument( True, docNew )
Mit g_dbFocus = MailDatenbank, g_docFocus = Mail im Focus mit eingebettetem Bild
Nach dem Öffnen war "Body" im neuen Zieldokument identisch zum alten... also prinzipiell funktioniert das. Wenn das Bild ein Attachment und nicht eingebettet ist, musst Du aber ggf. noch das $File- Item mitkopieren...
Forall item In quelldoc
Select Case Lcase (item.Name)
Case "$file", "foto"
'nix
Case Else
Call quelldoc.RemoveItem (item.Name)
End Select
End Forall
Call quelldoc.CopyAllItems (zieldoc)
Natürlich darf quelldoc dann nicht gespeichert werden, sonst ist es kaputt. Ggf. müssten die alten Felder im zieldoc vorher noch gelöscht werden.
Ich habe so etwas schon einmal genutzt, allerdings innerhalb der gleichen Datenbank. Ob das datenbankübergreifend funktioniert, muss ausprobiert werden. Habe witzigerweise heute exakt die gleiche Themenstellung in einem anderen Kontext, wenn ich irgendwelche Erkenntnisse daraus ziehe, werde ich das hier schreiben
Ich hatte das Thema vor Jahren mal auf dem Tisch. Nach viel Rumprobieren habe ich letzlich folgene Lösung implementiert
Set rtiSource = attDoc.GetFirstItem( "fill_att" )
If ( rtiTarget.Type = RICHTEXT And rtiSource.Type = RICHTEXT ) Then
Set rtnav = rtiSource.CreateNavigator
If rtnav.FindFirstElement(RTELEM_TYPE_FILEATTACHMENT) Then
Do
Set att = rtnav.GetElement()
filepath = GetSystemTempFolder & "/" & att.Source
Call att.ExtractFile(filepath)
Set att = rtiTarget.EmbedObject ( EMBED_ATTACHMENT, "", filepath)
Kill filepath
Loop While rtnav.FindNextElement()
End If
End If
Also Zwischenspeichern von Anhängen und sauber wieder an das Zieldokument anhängen.
Set basertitem = matchbasedoc.Createrichtextitem("rFoto")
Call basertitem.Appendrtitem(rtitem)
Call basertitem.compact
Call basertitem.Update
So funktioniert das bei mir, die $Files brauchen nicht angefasst zu werden, die werden automatisch mit kopiert
Ok, der RT.Light-Typ "Thumbnail" macht tatsächlich beim Kopieren das angesprochene Problem, habe das Problem nachgestellt.
Ich denke, das müsste man mal bei HCL melden, denn für die anderen Typen funktioniert das Ganze ja sauber.
Und wenn man sich mal das DXL zu einem solchen Dokument ansieht, dann stellt man fest, dass im Richtextfeld gar kein Verweis auf das dort eingebettete Bild existiert:
<item name='foto'>
<richtext>
<pardef id='1'/>
<par def='1'/>
</richtext>
</item>
Dass da anscheinend auch noch andere Sachen "strange" laufen sieht man daran, dass wenn man den Typ des Feldes abändert auf Richtext (was bei den anderen RT-Light-Typen ja kein Problem ist), anschließend das Bild nicht mehr dem Item zugeordnet wird und unten in der Maske als Anhang angezeigt wird.
Ich fürchte, dass dann auch der Ansatz von Ulrich (eknori), die Anhänge zu detachen, nicht funktionieren wird.
Eine Idee, das Problem zu "umschiffen" wäre, die Eingabe in einem Dialog zu machen (damit hat man das Feature des Verkleinerns auf 200x200, beim Schließen das Feld in die Zwischenablage zu kopieren und anschließend in ein RT-Feld der Maske zu kopieren. Wird aber bestimmt auch etwas umständlich...
-Werner