Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: wflamme am 06.11.02 - 13:58:13
-
Hi, ich mal wieder.
Bin gerade mal wie vernagelt, warum funkt das nicht?
Set docCurrent=session.DocumentContext
Set docPrevious=vw.GetPrevDocument(docCurrent)
Kriege immer den Fehler:
"The document is not in view xyz"
Ist es aber doch, auch ansonsten stimmt alles.
Hülfäääh!
-
Hi,
kann es sein das es kein Vorgängerdokument in der Ansicht gibt ?
Was willst du denn damit erreichen ? Poste bitte mal den gesamten Code
Axel
-
... das Dokument kommt nicht aus der View, sondern über den Browser => DocumentContext...
-
Hi ata,
Danke für die Hilfe in der Not.
Nein, es ist eine Client-Anwendung, der View ist derselbe, der gerade sichtbar ist (dort sehe ich auch den Vorgänger), das dort markierte Dokument ist korrekt unter DocumentContext verfügbar, alles im Debugger geprüft.
Erreichen will ich eine Sortierungsänderung, also vertauschen einer laufenden Nr die die Sortierung im View vorgibt.
PS: Neuer Link
Individuelle Suchformulare auf dem Notes Client - der Königsweg
http://www.sns1.de/partner/flamme/wflamme.nsf/Shortcut/TweakSB
-
... ich würde versuchen das Dokument anders zu initialiseren, über db.UnprocessedDocuments zum Beispiel und das vorherige/nachfolgende über vw.GetDocumentByKey(Nr) einer Ansicht, die in der ersten Spalte nach der Nummer sortiert ist....
ata
-
... ich würde versuchen das Dokument anders zu initialiseren, über db.UnprocessedDocuments zum Beispiel
Gerade das wollte ich nicht, da ich das aktuell markierte Doc verschieben wollte, nicht irgendwelche angehakten. Das markierte ist nämlich auch sichtbar aufgeschaltet.
und das vorherige/nachfolgende über vw.GetDocumentByKey(Nr) einer Ansicht, die in der ersten Spalte nach der Nummer sortiert ist....
Wollte ich vermeiden, da mir diese Ansicht eben genau die gewünschte und zu manipulierende Reihenfolge präsentiert.
Die 2. Ansicht müßte also prinzipiell genauso aussehen wie die Erste...
Habe etwas anderes probiert (neben GetPrevSilbling, was auch nicht klappte):
Set docAlt=GetDocumentByUNID(docContext.UniversalID)
Set docPrevious=vw.GetPrevDocument(docAlt)
in der Vermutung, DocumentContext könnte als In-Memory-Dokument irgendwie was spezielles sein - wieder nichts, dh der gleiche Fehler.
Kann es sein, daß ein 'Quereinstieg' in einen View prinzipiell nicht möglich ist und man sich nur nur beginnend mit vw.GetFirstDocument durchhangeln kann?
Worin (verflixt nochmal) unterscheidet sich dann die von vw.GetFirstDocument zurückgelieferte Dokumentreferenz von einer anderen Dokumentreferenz?
Ziemlich ratlos...
-
ich denke, daß Du es Dir schon oben irgendwo selbst beantwortet hast.
Ein anhand der documentcontext Methode aus der Session Klasse fixiertes Dokument ist anscheinend nicht im Rahmen einer View über GetPrevDocument zu gebrauchen. Denn, woher soll das referenzierte Objekt der Session Klasse wissen, wie die "Reihenfolge" der entsprechenden NotesView aussieht, um sein nächstes Doc zu erkennen? Da fehlt irgendwie noch ein "Jump" zwischen den Methoden DocumentContext und GetPrevDocument.
Fixiert man dagegen ein Doc über GetFirstDocument spricht man aus der NotesView kommend ziemlich sicher den Viewindex an und damit auch die Möglichkeit, auf vorhergehende und nachgerückte Docs über den Index = u.a. "Sortierung" zuzugreifen.
Sprich?
Machs halt anders da ;)
-
@Rob
... so wollte ich das auch ausdrücken...
ata
-
ich denke, daß Du es Dir schon oben irgendwo selbst beantwortet hast.
Ein anhand der documentcontext Methode aus der Session Klasse fixiertes Dokument ist anscheinend nicht im Rahmen einer View über GetPrevDocument zu gebrauchen. Denn, woher soll das referenzierte Objekt der Session Klasse wissen, wie die "Reihenfolge" der entsprechenden NotesView aussieht, um sein nächstes Doc zu erkennen? Da fehlt irgendwie noch ein "Jump" zwischen den Methoden DocumentContext und GetPrevDocument.
ACK.
Allerdings - und das fuchst mich - hat ja auch das nicht funktioniert:
Set docAlt=GetDocumentByUNID(docContext.UniversalID)
Set docPrevious=vw.GetPrevDocument(docAlt)
Es liegt also nicht daran, mit welchem Dokument ich in den View einsteige, sondern wie.
D.h. aber dann doch, daß das von vw.Get.....Document zurückgegebene Dokument kein 100%iges NotesDocument ist sondern noch irgendwelche zusätzlichen Thread-Infos beinhaltet, die man beim Quereinstieg in den View so nicht bekommt.
Da will ich mehr drüber wissen, denn das ist mir absolut neu!
-
... das sieht ganz danach aus, daß Notes sich bei der Initialisierung der View die Dokumente der View "nummeriert", bzw. das doc seine Position aus der es der view "entnommen" wird merkt...
ata
-
was mich mal interessieren würde:
geht denn statt
"Set docAlt=GetDocumentByUNID(docContext.UniversalID)
Set docPrevious=vw.GetPrevDocument(docAlt)"
möglicherweise
"Set docAlt=GetDocumentByUNID(UNID_aus_Frontend)
Set docPrevious=vw.GetPrevDocument(docAlt)"
dann auch nicht?
Denn in beiden Fällen wird kein einziges mal der Viewindex zwecks "Abfrage" der Reihenfolge für GetPrevDocument angesprochen, wenn man der Logik der vorigen Postings dann folgt.
-
... probiers mal in der Weise...
Dim session As New NotesSession
Dim dbThis As NotesDatabase
Dim vw As NotesView
Dim doc As NotesDocument
Dim docPrev As NotesDocument
Set doc = session.DocumentContext
Set dbThis = doc.ParentDatabase
Set vw = dbThis.GetView("ByNumber")
Set doc = vw.GetDocumentByKey(doc.Nr(0))
Set prevDoc = vw.GetPrevDocument(doc)
Msgbox prevDoc.Nr(0)
... so funktionierts...
ata
-
was mich mal interessieren würde:
geht denn statt
"Set docAlt=GetDocumentByUNID(docContext.UniversalID)
Set docPrevious=vw.GetPrevDocument(docAlt)"
möglicherweise
"Set docAlt=GetDocumentByUNID(UNID_aus_Frontend)
Set docPrevious=vw.GetPrevDocument(docAlt)"
dann auch nicht?
Denn in beiden Fällen wird kein einziges mal der Viewindex zwecks "Abfrage" der Reihenfolge für GetPrevDocument angesprochen, wenn man der Logik der vorigen Postings dann folgt.
Hab's noch nicht probiert, aber bin fast sicher, daß es nicht klappt. Ich sehe nämlich keinen Unterschied darin, woher der String für die
UNID nun stammt.
Instinktiv tippe ich mal, ata und ich haben mit der Vermutung recht, daß an einem Dokument, was über einen View angesprochen wurde noch irgendwie ein Verweis auf das vorige und nächste Dokument in diesem View hängt. Und nur wenn mit dieser Zusatzinfo in den View hineingesprungen wird, kann man von diesem Dokument aus im View navigieren.
Dazu paßt auch, daß GetNthDocument sich intern an diesem Thread entlangzuhangeln scheint statt das Dokument direkt anzuspringen (wie Laufzeitbeobachtungen nahelegen).
Kurios!
-
wobei die letztere Lösung von ata Dir doch den "Königsweg" nun aufgezeigt hat, aus dem aktuellen Document UND der Context Methode dennoch aufs vorige zu jumpen. Oder?
-
wobei die letztere Lösung von ata Dir doch den "Königsweg" nun aufgezeigt hat, aus dem aktuellen Document UND der Context Methode dennoch aufs vorige zu jumpen. Oder?
Leider nicht so einfach...
Die Ansicht hat eine Kategorisierung in der 1. Spalte, die 2. enthält die Dokumentennummer. Und die ist leider nur eindeutig innerhalb der Kategorie, nicht innerhalb der Ansicht.
Also muß ich wohl eine Hilfsansicht mit einen eindeutigen Hilfsschlüssel aus Kategorie+Nr bilden, was ich eigentlich vermeiden wollte.
Es gibt zwar schlimmeres, aber ich will eben gerne wissen, was da im Hintergrund abläuft, so daß in diesem Falle Doc!=Doc ist. Leider ist mein C eher rudimentär, denn allmählich habe ich das Gefühl, daß ich beim Nachbohren ohne NotesAPI nicht mehr über die Runden komme.
-
... ich würde zunächst mit der Hilfsansicht arbeiten, denn es ist immerhin ein Weg. Wenn du dann in den Tiefen noch etwas findest, dann interessiert mich das natürlich auch - doch zunächst würde das schon mal funktionieren...
ata
-
ata,
jetzt steh' ich schon wieder auf dem Schlauch!
Also ich ändere per ViewAction die Dokumente in der Hilfsansicht (dh schreibe die Sortierung im Backend neu), dann refreshe ich die Hilfsansicht und die akt. Ansicht per Script.
Aber im UI tut sich nix ... bis F9..
Das ist doch nicht normal, ist das Ding korrupt?
-
... hast du die Dokumente nach der Zuweisung der Werte gespeichert?
... wie machst du den Refresh der View's... im UI ?
ata
-
ata,
hat sich erledigt, Danke!
(war gespeichert, vw-Backend refreshed, uiws refreshed)
Lösung: 1x Booten 8)
-
... solltest du doch noch in die Tiefe der Hintergründe abtauchen und etwas bergen - lass es mich wissen...
ata