Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: ReinerB am 13.12.05 - 09:13:39
-
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
-
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
-
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