In dem Moment, wo Du das Objekt neu allokierst, geht das verloren....
Wenn du nicht speichern willst, dann würde ich mir das in Listen merken:
z.B.:Dim docList List as Variant
Dim itemList List as String
Set nd = nc.Getfirstdocument()
While Not (nd Is Nothing)
erase fieldList
itemList ( "Test" ) = "123"
itemList ( "AnderesFeld" ) = "abc"
docList( nd.UniversalId ) = itemList
Set nd = nc.Getnextdocument(nd)
Wend
und in der nächsten Schleife:
curitemList = docList( nd.UniversalId )
Forall item in curitemList
call nd.ReplaceItemValue( listtag( item ) , item )
End Forall
P.S.: Zweimal die selben Dokumente durchlaufen ist im Normalfall nicht nötig... Kannst Du das nicht zusammenfassen?
Du musst dafür sorgen, dass die Garbage-Collection die Dokumente nicht aus dem Speicher wirft. Dies erreichst du, indem du dir die Dokumente in einer Liste/Array merkst. Da jede Instanz eines Dokuments nur 1x im Speicher vorkommt, bekommst du so im 2. Durchlauf das geänderte, aber nicht gespeicherte Dokument.
Dim cache list as NotesDocument
Set nd = nc.Getfirstdocument()
While Not (nd Is Nothing)
set cache(nd.NoteId) = nd ' Halte eine Referenz auf jedes Doc.
Call nd.Replaceitemvalue("Test", "123")
Set nd = nc.Getnextdocument(nd)
Wend
Set nd = nc.Getfirstdocument()
While Not (nd Is Nothing)
MsgBox nd.Getitemvalue("Test")(0)
Set nd = nc.Getnextdocument(nd)
Wend
erase cache
So ginge es, finde aber obigen Code unschön, nochdazu gibt es bei ~8000 Dokumenten Out of memory-Fehler, welche den Client und Server abstürzen lassen. Besser wäre es wohl wirklich alles in einer Schleife zu machen.
Gruß
Roland