Lotus Notes / Domino 10 > ND10: Entwicklung

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

<< < (3/4) > >>

Obrac:
Hallo zurück,


--- Zitat ---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.
--- Ende Zitat ---

Genau, der Fehler tritt auf, nachdem die innere Schleife einmal durchgelaufen ist und die äußere Schleife sich das nächste doc holen will. So ähnlich hatte ich es ja auch in meinem Anfangsposting vermutet. Es wird auf jeden Fall in beiden Schleifen bis dahin dasselbe doc ausgelesen.


--- Zitat ---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.
--- Ende Zitat ---

Mir ist noch nicht ganz klar, was hier zu tun ist. Wie setze ich doc1 neu und wo? Wenn ich die view1 am Ende der äußeren Schleife mit getView nochmal auf die richtige view setze (und doc1 auf getNextDocument), kommt der Fehler wieder. Wie überzeuge ich die äußere Schleife davon, wieder an die richtige Stelle zu springen und das nächste doc1 zu nehmen?

Deinen Gedankengang halte ich für sehr richtig.

DominoDancing:
Hallobrac,

ich würde mir von doc1 jeweils einen eindeutigen Sortierschlüssel entsprechend der Sortierung von view1 merken (existiert kein eindeutiger Sortierschlüssel, dann einen solchen schaffen oder beispielsweise per ID des doc1 die Eindeutigkeit abprüfen) und dann in der Schleife

Set doc1 = view1.GetDocumentByKey(eindeutiger Sortierschlüssel, true)
Set doc1 = view1.GetNextDocument(doc1)

verwenden (anstelle von Set nextDoc1 = view1.GetNextDocument(doc1)). Natürlich kann dann auch Set doc1 = nextDoc1 entfallen.

Sicherlich existieren auch elegantere Lösungen. Bin halt nicht so der Elegante. ;D

Liebe Grüße
René

pantelis.botsas:
... auch nur so mal ins Blaue geraten ...

Kann es sein, dass in einer Deiner while-Schleifen das darin enthaltene Dokument so verändert wird, dass es anschließend nicht mehr Teil der Dokumentenmenge in der Ansicht ist?

Kontrolliere mal bitte die Auswahlformel in der Ansicht - und ob aufgrund Deiner Änderungen durch das Script, das bearbeitete Dokument dadurch nicht mehr in der Ansicht enthalten ist.

Lieben Gruß,
Pantelis

Obrac:
@DominoDancing: Good thinking, aber Notes meckert immer noch, diesmal nur anders ausgedrückt: "Function Requires a Valid ADT Argument". Wenn ich das richtig sehe, ist das die Entsprechung von "The Document is not in view", nur für die GetDocumentByKey-Methode. Notes findet immer noch kein doc, obwohl welche da sind. Der Fehler tritt bei der Zeile "Set doc1 = view1.GetNextDocument(doc1)" auf Die beiden von dir vorgeschlagenen Zeilen gehören doch vor das Wend der äußeren Schleife, oder?

@pantelis.botsas: Das war tatsächlich auch mein allererster Ansatz zur Fehlerbehebung gewesen, aber es ist in der Tat nicht die Ursache. In dem gesposteten vereinfachten Skript wird gar nichts mit den Dokumenten gemacht.

pantelis.botsas:
Hallo Obrac,

soweit ich Deine Anforderung verstanden habe, möchtest Du folgendes erreichen:

In einer Ansicht befinden sich Dokumente. Diese sind in der ersten Spalte über einen Feldwert (Schlüsselwert) sortiert.
Du möchtest nun alle Dokumente verarbeiten, die denselben Schlüsselwert in einer zweiten Ansicht besitzen.

Jetzt bin ich aber nicht ganz schlau geworden, ob am Ende dieser Verarbeitung für *alle* Dokumente mit dem gleichen Schlüsselwert ...
a) die Feldinhalte angeglichen werden sollen
b) die Dokumente der Reihe nach neue Feldinhalte bekommen sollen

Ich würde Deine Anforderung mit diesen Schritten lösen

Schritt 1:
Baue eine Liste aller verfügbaren, eindeutigen Schlüsselwerte aus Deiner ersten Ansicht auf.
Ich würde Dir gerne sagen, dass es hierfür eine einfache Methode im Ansichts-Objekt gibt ... doch leider ist das wieder eine Lücke, die auch HCL nicht schließen will.
Also bleibt der unperformante Weg über alle Dokumente in der Ansicht.
Oder der absurd komplizierte Weg über ein NotesViewNavigator-Objekt.

Schritt 2:
Hole Dir anhand der Einzeleinträge aus der zuvor erstellten Liste der Schlüsselwerte, alle Dokumente als ViewEntryCollection aus der zweiten Ansicht mit view.getAllEntriesByKey(keyValue) - damit behalten die Dokumente ihre festgelegte Reihenfolge aus der Ansicht bei.

Schritt 3:
Verarbeite alle Dokumente der ViewEntryCollection mit der entsprechenden Logik.

Lieben Gruß,
Pantelis

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln