Spielen wir uns ein bisschen die Bälle zu...
Man kann 5 Felder so übertragen:
Call doc.ReplaceItemValue( "Feld1" , uidoc.document.Getitemvalue( "Feld1" ) )
Call doc.ReplaceItemValue( "Feld2" , uidoc.document.Getitemvalue( "Feld2" ) )
Call doc.ReplaceItemValue( "Feld3" , uidoc.document.Getitemvalue( "Feld3" ) )
Call doc.ReplaceItemValue( "Feld4" , uidoc.document.Getitemvalue( "Feld4" ) )
Call doc.ReplaceItemValue( "Feld5" , uidoc.document.Getitemvalue( "Feld5" ) )
Oder so:
varItems = Split( "Feld1,Feld2,Feld3,Feld4,Feld5" , "," )
Forall strItem in varItems
Call doc.Replaceitemvalue( strItem, uidoc.document.GetItemValue( strItem ) )
End Forall
varItems kann man natürlich befüllen wie man will, ich mache das häufig so, wie im Beispiel, weil ich dann einfach per Komma neue Felder hinzufügen kann, und es "kurz" ist von der Schreibweise her.
Wie man sieht: Bei 4 Feldern ist der "BreakEven" an Anzahl Codezeilen erreicht....
Weiterer Vorteil der zweiten Methode: Man kann die Zeile einfach auch durch einen Funktionsaufruf ala
Call CopyItem( doc, uidoc.document, strItem )
ersetzen, wo man vielleicht noch spezielles Handling oder spezielle Umsetzungen implementiert.
Ich hätte da noch einen Ansatz, der das Problem genau von der anderen Seite aus aufgreift.
Dannach basiert das Ganze natürlich auf die Ideen der Vorposter.
Voraussetzungen die dafür gegeben sein sollten:
- uidoc ist kein neues Dokument
- das neue doc wird eh gespeichert, bevor es zum editieren kommt
- es sollte nicht störend sein, das alle rtitems mitkopiert werden
- die Itemanzahl der Items welche "zu viel" sind sollte nicht all zu zu hoch sein
Wenn das alles passt, dann könnte man folgendermassen vorgehen:
statt
Set doc = New NotesDocument ( db )
könnte man nehmen
Set doc = uidoc.document.CopyToDatabase( notesDatabase ) ( db )
Das neue Dokument ist damit eine Kopie der Version des uidoc das gespeichert ist.
Die Form überschreibst Du ja vor dem speichern, das würde soweit passen.
Wie Bernhard schon geschrieben hat, müssten die Items dann zu viel sind vor dem speichern dann gelöscht werden.
Dazu könnte man die Methode von Torsten nutzen, müsste man nur auf removeItem umstellen.
Kenne die Datenlage bei diesem Dokument nicht. Aber vielleicht passt es ja zu dem Fall.
Aus unserer Bibliothek, doc ist das markierte Dokument, newdoc das mit Compose erstellte
If doc.HasItem ("$FILE") Then
'Alle Items entfernen, die nicht $FILE oder Typ RICHTEXT sind. Das Dokument darf danach NICHT gespeichert werden!!!
ForAll item In doc.Items
If Not item Is Nothing Then
If Not (item.Name = "$FILE" Or item.Type = RICHTEXT) Then
'Beim Löschen von Richtextfeldern ab 5.0.10 werden die $Files mit gelöscht
'deshalb müssen die Richtextfelder erhalten bleiben
Call doc.RemoveItem (item.Name)
End If
End If
End ForAll
'$FILE-Items und RICHTEXT-Felder kopieren
Call doc.CopyAllItems (newdoc)
End If