Autor Thema: Änderungen von NotesDokumenten cachen  (Gelesen 1779 mal)

Offline AleX_-_

  • Aktives Mitglied
  • ***
  • Beiträge: 133
  • Geschlecht: Männlich
Änderungen von NotesDokumenten cachen
« am: 11.11.13 - 10:47:41 »
Hallo,

ich habe folgenden BeispielCode:
Set nd = nc.Getfirstdocument()
While Not (nd Is Nothing)   
   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


Im unteren Loop gehen die Änderungen aus dem oberen Loop verloren.
Gibt es eine Möglichkeit die Änderungen zu 'cachen' (ich möchte die Dokumente aber nicht speichern)?

Danke für die Hilfe.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Änderungen von NotesDokumenten cachen
« Antwort #1 am: 11.11.13 - 10:55:29 »
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.:
Code
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:
Code
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?
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 pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Änderungen von NotesDokumenten cachen
« Antwort #2 am: 13.11.13 - 22:59:13 »
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.
Code
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
Roland Praml

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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz