Ralf, den Code von SetFocus habe ich doch bereits angegeben, hier noch einmal:
Sub SetFocus(Source As NotesUIDocument, Continue As Variant)
Call uiview.SelectDocument(Source.Document)
End Sub
Harald, als globale Variable klappt es auch nicht, hatte ich auch schon vorher selbst versucht.
Irgendwie scheint Notes verklemmt gewesen zu sein.
Jetzt wird die Prozedur SetFocus durchlaufen aber es kommt die Fehlermeldung:
Command is not available!
Eigentlich ist bei Queryclose das Dokument ja auch noch nicht richtig geschlossen. Der Fokus ist ja noch nicht in der Ansicht?
Ich frage mich wie das überhaupt dann so gehen soll.
Ausgangspunkt für meine Versuche ist eigentlich das unbefriedigende Verhalten von Notes wenn man in einer kategorisierten Ansicht arbeitet.
Wenn es nur ein Dokument in der Kategorie gibt und man dieses bearbeitet und wieder schließt, wird die Kategorie zugeklappt.
Wenn es mehr als ein Dokument gibt, aber nicht mehr.
Das gilt auch wenn man das erste Dokument einer Kategorie erstellt.
Außerdem werden bei Ansichten mit mehr als einer Kategorie bei einem Wechsel zu einer anderen Ansicht und wieder zurück alle Unterkategorien der betreffenden Hauptkategorie aufgeklappt.
Ich habe dieses Verhalten so umgangen:
In der Ansicht ist die 1. Spalte verborgen mit der Formel @DocNumber
Im Postopen ist folgende Formel:
_Position := @GetViewInfo([ColumnValue]; 0);
@If(@IsNumber(_Position); @Return(""); "");
_Position := @Explode(_Position; ".");
@Command([ViewCollapseAll]);
@Command([ViewExpand]);
@For(n := 2; n <= @Elements(_Position); n := n + 1;
@For(n2 := 1; n2 <= @TextToNumber(_Position[n]); n2 := n2 + 1;
@Command([NavNext])
);
@Command([ViewExpand])
)
Dadurch wird immer nur die aktuelle Unterkategorie aufgeklappt und das zuletzt gewählte Dokument selektiert.
Ich habe folgende geänderte Variante probiert :
In der Ansicht o. g. Prozedur
Sub SetFocus(Source As NotesUIDocument, Continue As Variant)
Dim ws As New NotesUIWorkspace
Call ws.GetCurrentDatabase.Close
Call ws.OpenDatabase(ws.GetCurrentDatabase.Database.Server, ws.GetCurrentDatabase.Database.FilePath, "", "", True)
Call ws.CurrentView.SelectDocument(Source.Document)
End Sub
oder statt in der Ansicht mit remote binding zu arbeiten, in der Masdke bei Queryclose das ganze
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Dim ws As New NotesUIWorkspace
Call ws.GetCurrentDatabase.Close
Call ws.OpenDatabase(ws.GetCurrentDatabase.Database.Server, ws.GetCurrentDatabase.Database.FilePath, "", "", True)
Call ws.CurrentView.SelectDocument(Source.Document)
End Sub
Das klappt auch soweit, es wird dann immer die Rahmengruppe geöffnet und das richtige Dokument selektiert.
Aber das ganze Verfahren ist nicht konsistent genug.
Insbesondere könnte der Nutzer das Fenster mit der Ansicht vor dem Schließen des Dokuments schließen oder auch ein Fenster
einer anderen Datenbank parallel zuletzt vor dem Schließen fokussiert haben.
Dann kommt es sporadisch zur Fehlermeldung Objektvariable nicht gesetzt oder Notes bricht sogar ab.
Die ganze Fokussteuerung sollte man wohl besser nicht selbst in die Hand nehmen,
da die Ausführung der einzelnen Anweisungen nicht synchronisiert seriell abläuft?