Domino 9 und frühere Versionen > ND8: Entwicklung
nur Items mit bestimmtem Prefix kopieren
cebolina:
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:
--- Code: ---...
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
...
--- Ende Code ---
oder dieses:
--- Code: ---...
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
...
--- Ende Code ---
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
koehlerbv:
Das sind schon die beiden gängigen Varianten. Und "vorselektieren" kannst Du nicht.
Bedenke auch, dass Notes sowie der Tabelle der Itemnamen ausliest - das Überlesen der von Dir nicht benötigten Items passiert so oder so - und das im RAM. Da würde ich mir bezüglich der Laufzeit keine grossen Gedanken machen.
Bernhard
cebolina:
Danke für die Info.
Dann mach ich es über die doc.ReplaceItemValue-Variante.
Stefan
Tode:
Natürlich gibt es zusätzlich noch die Möglichkeit der aktiven Eingrenzung... Irgendwann brauchst Du ja eventuell doch mal ein Feld, was im Ziel anders heisst als in der Quelle.
Ich arbeite dann immer mit Arrays oder Listen, je nachdem was grade besser reinkommt.
Liste wäre in etwa so:
LCopyFields("Quellfeldname") = "Zielfeldname"
Forall zielfeld in LCopyFields
Quellfled = Listtag(zielfeld)
Call zieldoc.Replaceitemvalue(zielfeld,quelldoc.GetItemValue(quellfeld))
End forall
Oder so:
Allefelder = split("quellfeld1~zielfeld1,quellfeld2~zielfeld2,quellfeld3,zielfeld3",",")
Forall feld in allefelder
Call zieldoc.replaceitemvalue(strtoken(feld,"~",1),quelldoc.GetItemValue(strtoken(feld,"~"))
end forall
Das hat den Nachteil, dass du beim hinzukommen von einem Feld den code ändern musst (oder du lagrst die mappings in eine konfig aus), aber den Vorteil, dass Du flexibler bist.
HtH
cebolina:
--- Zitat von: Tode am 01.06.11 - 06:47:54 ---Natürlich gibt es zusätzlich noch die Möglichkeit der aktiven Eingrenzung... Irgendwann brauchst Du ja eventuell doch mal ein Feld, was im Ziel anders heisst als in der Quelle.
Ich arbeite dann immer mit Arrays oder Listen, je nachdem was grade besser reinkommt.
--- Ende Zitat ---
Danke für die Ergänzung, aber in meinem speziellen Fall wollte ich mir eben ersparen, die entsprechenden Feldnamen herauszusuchen und abzuschreiben.
Für andere Fälle aber sicher eine gute Lösung - werde ich mir merken.
Stefan
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln