Autor Thema: lesen über View: Eintrag im Index nicht gefunden  (Gelesen 1739 mal)

Offline ReinerB

  • Junior Mitglied
  • **
  • Beiträge: 93
Hallo Leute,

ich möchte das Feld Urlaub in einer Datenbank ändern.
Dazu habe ich eine Ansicht erstellt mit nur einem Feld PNr (Personalnummer).
Die Ansichtsauswahl wählt nur Dokumente aus, die im Mehrfachfeld Urlaub auch was stehen haben.

Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument   
Dim view As NotesView
Set db = s.CurrentDatabase
Set view = db.GetView("urlaub_pnr")
Set doc = view.GetFirstDocument
   
While Not(doc Is Nothing)
   Call doc.ReplaceItemValue("m_urlaub_liste", "")
   Call doc.save(True, False)
      
   Set doc = view.GetNextDocument(doc)
      
Wend

Wenn das erste Dokument gesichert ist und dann der erste GetNextDocument Befehl kommt, bekomme ich die Fehlermeldung:

Notes error: Eintrag im Index nicht gefunden (urlaub_pnr).

Zerschieße ich mir da den Index der Ansicht?
Das Feld, was ich ändere, steht aber garnicht in dieser Ansicht. In einer anderen Ansicht ja, aber nicht in dieser.

Was mache ich denn da falsch?
Vielen Dank für Hinweise.

Gruß
Reiner

« Letzte Änderung: 13.12.05 - 10:32:54 von ReinerB »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: lesen über View: Eintrag im Index nicht gefunden
« Antwort #1 am: 13.12.05 - 09:38:57 »
das ist ganz einfach: ein NotesView- Objekt repräsentiert immer den aktuellen Stand, ändert sich also quasi "dynamisch" mit jeder Änderung: Kann es sein, dass durch das setzen des Feldes

a) das Dokument ganz aus der View verschwindet
b) innerhalb der view an eine andere Stelle rückt !?

Abhilfe schaffen kann man auf zwei Arten:

1. mit "zwischendokument" arbeiten:
set doc2 = view.GetNextDocument( doc )
call doc.Save( True, False )
set doc = doc2

2. Autoupdate des View- Objektes verbieten (alles bleibt so, wie es am Anfang initialisiert wird):
set view = db.GetView( "urlaub_pnr" )
view.AutoUpdate = False

Oder man nimmt keinen Script Agenten sondern einen um ein vielfaches performanteren Formel- Agenten für eine so simple Aktion. da braucht man nämlich genau (maximal) 2 Zeilen code, um den ganzen Script- Kram abzubilden.

1) Wenn man Ihn manuell startet:
Alle Dokumente in der Ansicht

2) Wenn er periodisch läuft:
Alle Dokumente in der Datenbank

Code
SELECT ... (genau wie select der Ansicht. nur nötig für Fall 2)
FIELD m_urlaub_liste := ""

Wer Notes programmiert, ohne die Vorzüge der Formelsprache zu nutzen (wo sinnvoll) ist selbst schuld.

Tode



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 ReinerB

  • Junior Mitglied
  • **
  • Beiträge: 93
Re: lesen über View: Eintrag im Index nicht gefunden
« Antwort #2 am: 13.12.05 - 10:32:28 »
Hallo Tode,

danke, das war der richtige Tipp mit dem AutoUpdate.
Nach dem Ändern des Feldes, kann das Dokument ganz aus der Ansicht verschwinden.

Bezüglich Formelsprache hast du Recht. Nur meine Anwendung ist da etwas komplexer als dieses Beispiel. Das Feld wird nicht immer einfach nur auf leer gesetzt.

Gruß
Reiner

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz