Lotus Notes / Domino 10 > ND10: Entwicklung

"The Document is not in view" bei zwei While-Schleifen

(1/4) > >>

Obrac:
Hallo, Notes-Experten,

ich habe ein Problem, das mich schon Stunden des Rumprobierens und der Recherche gekostet hat. Ich habe ein LS-Script mit zwei While-Schleifen, die Dokumente auslesen. Die erste Schleife nimmt sich ein Doc und liest einen Feldwert aus. Danach fängt die zweite Schleife innerhalb der ersten an, nimmt sich wiederum alle Docs mit dem ausgelesenen Wert und erstellt ein neues Dokument. Das Problem ist, dass beim getNextDocument der äußeren Schleife die Fehlermeldung "The Document is not in view" ausgegeben wird. Wenn die innere Schleife ausgeführt wird, kann die äußere also nicht das nächste Doc auslesen. Offenbar will das Script das NextDoc der inneren Schleife haben, obwohl es das der äußeren nehmen müsste. Das ist zumindest meine Interpretation. Dabei ist aber die view eine andere und das doc hat auch eine andere Variable, allerdings greifen beide Schleifen auf dieselben Dokumente zu.

Nun wäre wohl die Idee, die innere Schleife durch etwas anderes zu ersetzen, z.B. durch GetdocumentbyKey. Den Key habe ich ja, nämlich den ausgelesenen Feldwert. Was ich allerdings nicht verstehe, ist, wie ich es schaffe, über diese Methode wirklich alle docs zu finden und nicht nur das erste. Ich brauche also dann doch eine Art Schleife. Es gibt ja noch GetAllDocumentsByKey, allerdings müsste ich die Dokumente nacheinander auslesen, da Feldwerte addiert werden.

Hat jemand eventuell eine Idee, wie das Problem noch zu umgehen ist?

Tode:
Ohne Quellcode ist das reine Raterei. Ich vermute, dass Du bei Deinem NotesView- Objekt nicht "AutoUpdate=False" gesetzt hast und dass das neu erstellte innere Dokument die Navigation der äußeren Schleife durcheinanderbringt, weil Du "on the fly" Dokumente in die View einfügst.

Zwei Möglichkeiten, das zu umgehen:

1. Vor Deiner äußeren While Schleife die Ansicht, auf die Du Dich beziehst, auf AutoUpdate=False setzen: view.AutoUpdate = False

2. Schon am Anfang der äußeren Schleife das nächste Dokument holen, und am Ende einfach zuweisen:

Statt:

--- Code: ---While not doc is Nothing
  '- hier wird Deine innere Schleife durchgeührt
  Set doc = view.GetNextDocument( doc )
Wend
--- Ende Code ---

das hier:

--- Code: ---While not doc is Nothing
  Set nextDoc = view.GetNextDocument( doc )
  '- hier wird Deine innere Schleife durchgeührt
  Set doc = nextDoc
Wend
--- Ende Code ---

Obrac:
Hallo, Tode,

danke schonmal für die Ansätze. Beides brachte leider keine Besserung. Nachdem ich das nexDoc an den Anfang der äußeren Schleife geholt hatte, kam an dieser Stelle die Fehlermeldung. Ich füge mal mein Script in vereinfachter Form ein:


--- Code: ---Set view1=db.GetView("namederAnsicht")
view1.AutoUpdate = False

Set doc1 = view1.GetFirstDocument

        While Not (doc1 Is Nothing)
Set nextDoc1 = viewCol.GetNextDocument( doc1 )

                Set view2=db.GetView("namederAnsicht")

                Set doc2 = view2.GetFirstDocument

                While Not (doc2 Is Nothing)
                 
                Inhalt der Schleife

                Set doc2=view.GetnextDocument (doc2)
 
                Wend

        Set doc1 = nextDoc1

        Wend
--- Ende Code ---

Vielleicht doch irgendein Denkfehler meinerseits?


pantelis.botsas:
Nur um Unklarheiten zu vermeiden...

In Zeile 7 versuchst Du aus einer viewCol das nächste Dokument zu holen.
Doch die Collection ist nirgends definiert und initialisiert.

Obrac:
Das ist eine berechtigte Frage, und in meinem echten Skript heißt die Variable auch so, weil sie im Frühstadium des Skriptes mal eine Collection war. Hier habe ich aber nur den Namen aus Versehen nicht geändert. Im echten Skript stimmen die Namen.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln