Domino 9 und frühere Versionen > ND7: Entwicklung
NotesViewNavigator.GetNextCategory(cat) verliert den Index?
Thomas Schulte:
Ein in einem Script erzeugtes Domino Objekt hat immer nur eine Bestimmte Reichweite, die unter anderem auch davon abhängt ob sein Erzeuger noch aktiv ist.
Wenn du zum Beispiel von einer Session auf einen View schließt und die Session beim Aufruf deiner Subroutine oder der Funktion in der Script Library nicht mehr zur Verfügung steht greift automatisch der "Garbage Collector" von Notes ein und schmeißt auch alles was unterhalb deiner Session war weg. Bob Balaban hat hier erst vor kurzem einen erstklassigen Artikel dazu geschrieben.
und wenn du dir diesen Artikel durchgelesen hast dann verstehst du auch, warum das hier ...
Set ViewNav = uiview.View.CreateViewNav
die Klippe sein MUSS an der du scheiterst.
Demian:
--- Zitat von: Thomas Schulte am 15.06.09 - 12:27:09 ---Wenn du zum Beispiel von einer Session auf einen View schließt und die Session beim Aufruf deiner Subroutine oder der Funktion in der Script Library nicht mehr zur Verfügung steht greift automatisch der "Garbage Collector" von Notes ein und schmeißt auch alles was unterhalb deiner Session war weg.
--- Ende Zitat ---
Aber laut Debugger sind ja alle Variablen noch aktiv nach dem Aufruf einer lib-Funktion (siehe Screenshot). Wenn der GC greifen würde, müssten mir die Variablen doch als "leer" angezeigt werden, oder nicht?
--- Zitat von: Thomas Schulte am 15.06.09 - 12:27:09 ---Set ViewNav = uiview.View.CreateViewNav.
--- Ende Zitat ---
Im meinem Testagenten wird nicht mehr mit ui gearbeitet. Das hatte ich nur der Einfachheit halber in der Ansicht so in eine Aktion gepackt. Die VErmutung, dass die Variablen nicht mehr gültig sind, hatte ich auch schon, und habe dann mal alles im Declarartion-Teil deklariert. Hatte aber auch keinen anderen Effekt.
Ich habe aber inzwischen eine andere Lösung gefunden (mit dem Workaround aus deinem Link mit dem 2. Nav kam ich nicht so klar). Und zwar durch den Einsatz eines weiteren Entry (LastEntry) und statt .getnextcategory(cat) dann .getnext(LastEntry). Hier nochmal der angepasste Ui-Code der so übertragen auch im Agenten läuft, der die lib-Funktionen aufruft. Die markierten Zeilen sind die hinzugefügten/geänderten.
Sub Click(Source As Button)
'General
Dim s As New NotesSession
Dim db As NotesDatabase
Dim work As New NotesUIWorkspace
Dim doc As NotesDocument
'View
Dim uiview As notesuiview
Dim ViewNav As NotesViewNavigator
'Entries
Dim ecol As NotesViewEntryCollection
Dim cat As NotesViewEntry
Dim entry As NotesViewEntry
Dim LastEntry As NotesViewEntry 'needed because ViewNav.GetNextCategory(cat) don't work correctly
'create viewnaw
Set db = s.CurrentDatabase
Set uiview = work.CurrentView
Set ViewNav = uiview.View.CreateViewNav
'get first person
Set cat = ViewNav.GetFirst
While Not (Cat Is Nothing)
Msgbox Cat.ColumnValues(0) & " - " & cat.ChildCount
'get all childs
Set Ecol = uiview.View.GetAllEntriesByKey(Cat.ColumnValues(0),True)
'get first child
Set entry = ecol.GetFirstEntry
'run over all childs
While Not (entry Is Nothing)
Msgbox entry.Document.Car(0)
'get next child
Set LastEntry = entry
Set entry = ecol.GetNextEntry(entry)
Wend
'get next person
Set cat = ViewNav.GetNext(LastEntry)
Set LastEntry = Nothing
Wend
End Sub
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln