Lotus Notes / Domino 10 > ND10: Entwicklung

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

<< < (2/4) > >>

ronka:
In zeile 10 machst du ein
Set doc2 = view2.GetFirstDocument

In Zeile 17 dann aber

Set doc2=view.GetnextDocument (doc2)

Wieso ist in Zeile 10 view2 und in Zeile 17 View wodraus das geholt wird ?

Obrac:
@ronka: Hier habe ich mich auch nochmal beim Posten verschrieben. Es muss auch hier view2 heißen. Hier nochmal das korrekte Skript:


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

        While Not (doc1 Is Nothing)
Set nextDoc1 = view1.GetNextDocument(doc1)
 
                Set view2=db.GetView("namederAnsicht")
 
                Set doc2 = view2.GetFirstDocument

                While Not (doc2 Is Nothing)
                 
                Inhalt der Schleife
 
                Set doc2=view2.GetnextDocument (doc2)
 
                Wend

        Set doc1 = nextDoc1
 
        Wend
--- Ende Code ---

Tode:
Abgesehen davon, dass es Quatsch ist, view2 in jeder Iteration neu zu setzen (die Zeile "Set view2=db.GetView("namederAnsicht")" kannst Du direkt hinter die Zeile "Set view1=db.GetView("namederAnsicht")" außerhalb der While- Schleife verschieben), sehe ich kein Problem mit Deinem Code.

Wie genau lautet die Fehlermeldung?

Ich vermute, dass Du auch in Deinem "Echt"- Script Variablen vertauscht hast...

Wenn zwischen Zeile 4 und 7 Deines Original- Codes wirklich nichts anderes passiert, dann kann die Meldung "Document not in View" so nicht kommen...

Noch eine Anmerkung zum Schluss: Du solltest wirklich mehr Sorgfalt walten lassen, wenn Du Beispiel-Code für das Nachstellen eines Problems postest... Sonst jagt man bei der Bug- Analyse Fehler, die in Deinem original- Code gar nicht drin sind. Das hat Rudi und Pantelis unnötige Zeit gekostet, die sie nicht mit der Lösung Deines wirklichen Problems verbringen konnten...

Meine Vermutung ist aber, dass Du gar nicht beim übertragen des Codes in ein "anonymisiertes Beispiel" den Fehler gemacht hast, sondern dass Dein Code durch das viele rumprobieren wirklich so chaotisch ist, dass Du nicht mehr durchblickst, welche Variable welche ist...

Obrac:
view2 wird innerhalb der Schleife gesetzt, weil dort erst eruiert wird, welche Ansicht gesetzt werden soll, was aber natürlich in dieser vereinfachten Form nicht ersichtlich ist.

Wenn ich folgenden Code exakt so ausführe, gib es die Fehlermeldung "The Document is not in view "vwhonorarabrechnungen_kdnr_rechnung"" beim ersten Ausführen der Zeile "Set nextDoc1 = view1.GetNextDocument(doc1)":


--- Code: ---Sub Click(Source As Button)

Dim session As New NotesSession

Dim doc1 As NotesDocument
Dim doc2 As NotesDocument
Dim nextDoc1 As NotesDocument

Dim view1 As NotesView
Dim view2 As NotesView

Dim db As NotesDatabase

Set db = session.CurrentDatabase

Set view1=db.GetView("vwhonorarabrechnungen_kdnr_rechnung")
Set view2=db.GetView("vwhonorarabrechnungen_status")

view1.AutoUpdate = False

Set doc1 = view1.GetFirstDocument

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

Set doc2 = view2.GetFirstDocument

While Not (doc2 Is Nothing)

Print "Schleife2"

Set doc2=view2.GetnextDocument (doc2)

Wend

Set doc1 = nextDoc1

Wend

End Sub

--- Ende Code ---



--- Zitat ---Noch eine Anmerkung zum Schluss: Du solltest wirklich mehr Sorgfalt walten lassen, wenn Du Beispiel-Code für das Nachstellen eines Problems postest... Sonst jagt man bei der Bug- Analyse Fehler, die in Deinem original- Code gar nicht drin sind. Das hat Rudi und Pantelis unnötige Zeit gekostet, die sie nicht mit der Lösung Deines wirklichen Problems verbringen konnten...
--- Ende Zitat ---

Ich weiß. Hätte nicht passieren dürfen.

DominoDancing:
Hallobrac  :),

ich vermute mal, dass der Fehler nicht beim ersten Durchlaufen der äußeren Schleife auftritt, sondern frühestens beim zweiten, richtig? Wenn dem so ist, vermute ich weiterhin, dass doc2 beim Durchlaufen der inneren Schleife irgendwann einmal mit nextDoc1 übereinstimmt, also das gleiche Dokument ist.

Wenn dem so ist, übernimmt zu diesem Zeitpunkt, nextDoc1 die parentview von doc2 (Ich war auch erschrocken als ich das erstmalig feststellte.). Mit set doc1 = nextDoc1 übergibst Du dann die (für Dich falsche) parentview auch an doc1. Das erneute Durchlaufen der äußeren Schleife führt dann mit Set nextDoc1 = view1.GetNextDocument(doc1) zu der Fehlermeldung, da doc1 laut parentview gar nicht in der Anicht view1 enthalten ist, sondern in der Ansicht view2.

Wenn ich also nicht ganz falsch liege und nicht zu viel vermute (ich habe das Wünschelrutensyndrom), ist es somit notwendig, doc1 innerhalb der view1 neu zu setzen, da parentview read-only ist. Aber vielleicht liege ich auch ganz falsch und bin zu alt für das alles ... :) Überprüfe einfach einmal die parentview von doc1 beim Auftreten des Fehlers.

Liebe Grüße
René

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln