ProblemstellungIch hatte hier eine typisch einfache Datenbank mit ein paar Views und einem Frameset, das auf der linken Seite über eine Seite mit eingebetteter Gliederung eben die Gliederung zeigt, auf der rechten Seite dann die Viewinhalte. Also genau wie Mailfile, DocLibrary, Discussion-DB etc.
Nun war
die Anforderung, dass jeder User für sich eine Vorgabe-Ansicht für das Öffnen der DB vorbelegen kann - also eine Ansicht, die sich öffnet, wenn der Anwender die Datenbank öffnet.
Hier bietet sich an, in den Database-Properties bei der Rakete das Flag "Restore as last viewed by user" zu setzen. Nur leider klappt das nicht zuverlässig, teilweise wird trotzdem wieder auf die Default-View (die im Frameset als View-Frame definiert ist) geschalten - auch die Option "Retain View column sorting" in den Client-Einstellungen bringt da keine Besserung, obwohl dies mal als Tipp im LDD-Forum genannt wurde.
Ein @Command([SwitchView]) bzw. @Command([ViewChange]) klappt auch nicht wirklich:
Eingesetzt im PostOpen - DatabaseScript öffnet sich zwar beim Start der DB diese hier angegebene View, aber danach wird ein weiteres Fenster geöffnet mit der Standard-Frameset-View.
Die Lösung1. In einem (User-)Profildokument in einem Textfeld/Dialogliste/Combobox die gewünschten Default-Views zur Auswahl anbieten.
2. Im ViewFrame des Framesets als Type "Named Element / View" wählen, dann auf @ klicken und unter "Formula for name of named element" z.B. folgende @Formula verwenden:
_DefaultView := "AllDocuments";
_Lookup := @DbLookup("":"NoCache"; ""; "UserProfile"; @UserName; "stDefaultView");
_Result := @If(
(@IsError(_Lookup)) | (@Trim(_Lookup) = "");
_DefaultView;
_Lookup);
@Text(_Result)
Die 2. Zeile (_Lookup := ...) dient zur Abfrage des Profildokuments und ist entsprechend anpassen. Hier kann z.B. auch über @GetProfileField auf Profildokument-Felder zugegriffen werden.
Als Fallback-Lösung habe ich hier eine Default-View vorgegeben, nur für den Fall...
Wichtig ist hier das @Text ganz zum Schluss, sonst bringt der Designer eine Fehlermeldung beim Speichern des Framesets.
Gruß,
Matthias