Hallo,
ich will in ein Dokument (doc) aus einem anderen Dokument (refDoc) bestimmte Items kopieren (in diesem speziellen Fall geht es um die Übernahme von Kundendaten).
In beiden Dokumenten sind die Item-Namen identisch.
Die betreffenden Namen beginnen alle mit dem gleichen Prefix "kunde" (Bsp.: kunde_Name, kunde_Vorname, kunde_ort, etc.)
Welches Konstrukt ist zu empfehlen?
Dieses:
...
Forall i In refDoc.Items
If Lcase(Left$( i.Name , 5)) = "kunde" Then
Call doc.ReplaceItemValue(i.Name , refDoc.GetItemValue(i.Name))
End If
End Forall
...
oder dieses:
...
Dim refItem As NotesItem
Forall i In refDoc.Items
If Lcase(Left$( i.Name , 5)) = "kunde" Then
Set refItem = refDoc.GetFirstItem(i.Name)
Call doc.CopyItem(refItem , i.Name)
End If
End Forall
...
Beide Versionen funktionieren, aber vielleicht gibt es eine elegantere Variante, wenn ich berücksichtige, dass es "nur" ca. 20 "kunde_*"-Items gibt, aber vielleicht 100, die nicht mit "kunde" beginnen?
Wie machen es die Profis?
Gruß Stefan
Ich gehe meist über ein Zwischendoc:
call source.copyAllItems(tempDoc, false)
forall item in tempdoc.items
itemname= item.name
if not mustCopy(itemName) then '... alle nicht benötigten Items aus tempDoc entfernen
call item.remove()
do while tempDoc.hasItem(itemName) ' Bei RT oder Mime-Feldern sind Items oft mehrfach vorhanden
call tempDoc.removeItem(itemName)
loop
end if
end forall
call tempDoc.copyAllItems(dest, true) ' das bereinigte Doc über das Zieldoc kopieren
Obiges geht etwas schneller und macht viel weniger Probleme bei Dokumenten mit Richtext/MIME-Inhalten
(insb werden die $FILE Items berücksichtigt)
Wenn Keine Richtext/Autorenfelder oder sonstiges beteiligt sind, sondern es sich um reine Text/Zahlenfelder handelt, spricht aber auch nichts gegen die "replaceItemValue" Methode
Gruß
Roland