Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: HJPSoft am 13.01.03 - 10:29:43

Titel: Feldwerte im BackEnd ändern
Beitrag von: HJPSoft am 13.01.03 - 10:29:43
Hallo Forum,

bei dem Auftrag, einen Feldwert innerhalb vieler Dokumente permanent zu ändern erhalte ich den Fehler: Notes Error: Eintrag im Index nicht gefunden(Ansicht)
Der Code im Agent sieht so aus, der hervorgehobene Text löst den Fehler aus: ???

Sub Initialize
   Dim wert As String   
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Set db = s.CurrentDatabase
   
   Dim v As NotesView
   Set v = db.GetView("Einsatz\Sitreps\ISAF")
   Dim doc As NotesDocument
   Set doc = v.GetFirstDocument()
   Do While Not (doc Is Nothing)
      
      Call doc.ReplaceItemValue("DokChar", "Sitreps Termez")
      Call doc.Save(True,True)
      Set doc = v.GetNextDocument(doc)
   Loop
   
   
End Sub

Wer kann helfen, oder liege ich völlig daneben?
Ersatzcode willkommen.

Danke

Hans
Titel: Re:Feldwerte im BackEnd ändern
Beitrag von: eknori am 13.01.03 - 10:40:20
Kann es sein, daß das geänderte Dokument nach der Aktualisierung aus der Ansicht herausfällt ??

Ansonsten ist der Code OK.

eknori
Titel: Re:Feldwerte im BackEnd ändern
Beitrag von: HJPSoft am 13.01.03 - 10:59:49
Danke Eknori,

in der Tat fällt das Dokument aus dieser Ansicht heraus. Ich nehme an, ich muss mir eine Ansicht erzeugen, aus der geänderte Dokumente nicht herausfallen.


Danke

Hans
Titel: Re:Feldwerte im BackEnd ändern
Beitrag von: eknori am 13.01.03 - 11:03:08
genau, sonst wuselt es dir den Index durcheinander mit dem bekannten Erfolg.

Titel: Re:Feldwerte im BackEnd ändern
Beitrag von: klaussal am 13.01.03 - 11:09:57
oder anstelle von "getnextdocument" wieder ein "getfirstdocument"
Titel: Re:Feldwerte im BackEnd ändern
Beitrag von: Doc Torte am 13.01.03 - 11:13:58
MAHLZEIT !

verstehe nicht, warum Du die Docs nicht in eine DocCollection zusammenliest und diese durcharbeitest - geht nicht nur schneller, belastet den Server nicht so(dadurch das Du nicht in die View "reingreifen" mußt) und das Thema Extra-Ansicht hat sich auch erledigt.


wäre nur so ne Idee
Titel: Re:Feldwerte im BackEnd ändern
Beitrag von: Axel am 13.01.03 - 12:50:47
Hi,

versuchs doch mal so:

Sub Initialize
   Dim wert As String  
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim tmpdoc As NotesDocument

   Set db = s.CurrentDatabase
   
   Dim v As NotesView
   Set v = db.GetView("Einsatz\Sitreps\ISAF")
   Dim doc As NotesDocument
   Set doc = v.GetFirstDocument()
   Do While Not (doc Is Nothing)
      Set tmpdoc = doc
      Call doc.ReplaceItemValue("DokChar", "Sitreps Termez")
      Call doc.Save(True,True)
      Set doc = v.GetNextDocument(tmpdoc)
   Loop
   
Axel

   
End Sub

Titel: Re:Feldwerte im BackEnd ändern
Beitrag von: HJPSoft am 13.01.03 - 15:16:00
Hallo @All,

Danke für die Unterstützung.
ich habe mich für die Lösung der DocumentCollection entschieden und es funktioniert. Komplilziert ist die Gestaltung des Suchmusters, aber mit etwas Fleiß kommt man zu einer Lösung.
Die Realisierung mittels eines Schattendokuments ist äußerst interessant und schon in meine Repository gewandert.

Noch mal
Vielen Dank

Hans
Titel: Re:Feldwerte im BackEnd ändern
Beitrag von: Doc Torte am 13.01.03 - 17:45:13
H@llo HJPSoft !


wieso Suchschlüssel ? ich dachte in der View können nur Dokumente stehen, die auch bearbeitet werden sollen, dann wäre der einfachste Weg, an erster Stelle eine Spalte einzurichten, sortiert(der Suche wegen) die für jedes Dokument eine "1" zeigt, somit wäre der Suchschlüssel dann auch eine 1 und Du bekommst ohne großes TamTam alle Docs der Ansicht in die Collection.

aber warum denn einfach, wenn es auch kompliziert geht ?  ;-)
Titel: Re:Feldwerte im BackEnd ändern
Beitrag von: rar am 14.01.03 - 09:07:18
Wenn bei mir ein Doc aus nach der Bearbeitung aus einer Ansicht rausfällt schleif ich die Ansicht von hinten durch.
 
 Set doc = v.GetLastDocument()
  Do While Not (doc Is Nothing)
      Call doc.ReplaceItemValue("DokChar", "Sitreps Termez")
      Call doc.Save(True,True)
      Set doc = v.GetLastDocument()
  Loop

lg
-rar