Autor Thema: nur Items mit bestimmtem Prefix kopieren  (Gelesen 1572 mal)

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
nur Items mit bestimmtem Prefix kopieren
« am: 31.05.11 - 14:54:02 »
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
...

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
...

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
« Letzte Änderung: 31.05.11 - 15:11:17 von cebolina »
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: nur Items mit bestimmtem Prefix kopieren
« Antwort #1 am: 31.05.11 - 14:59:41 »
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

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
Re: nur Items mit bestimmtem Prefix kopieren
« Antwort #2 am: 31.05.11 - 15:10:53 »
Danke für die Info.
Dann mach ich es über die doc.ReplaceItemValue-Variante.

Stefan
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: nur Items mit bestimmtem Prefix kopieren
« Antwort #3 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.

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
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
Re: nur Items mit bestimmtem Prefix kopieren
« Antwort #4 am: 01.06.11 - 07:39:01 »
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.
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
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: nur Items mit bestimmtem Prefix kopieren
« Antwort #5 am: 01.06.11 - 09:40:43 »
Ich gehe meist über ein Zwischendoc:
Code
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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
Re: nur Items mit bestimmtem Prefix kopieren
« Antwort #6 am: 01.06.11 - 09:54:54 »
@Roland (pram)
In meinem Fall geht es ausschließlich um Text-Felder.
Trotzdem Danke für die Anregung.

Stefan
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz