[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] Multi Remote View AnsatzWir nennen diesen Ansatz einen "Multi Remote View" Ansatz. Multi deshalb, weil mit beliebig vielen Remote Views in ein und demselben Form gearbeitet werden kann. Die VFX Klasse CAskViewArgPgf nimmt hier eine Schlüsselstelle ein. Im folgenden Beispiel wird die Verwendung der Klasse CAskViewArgPgf erläutert. Wenn der benutzer ein Client/Server Form, welches mit dem "Multi Remote View" Ansatz implementiert wurde ögffnet, Sieht er sich zunächst mit einem Selektionsbildschirm konfrontiert.
In der oberen Combobox kann der Benutzer wählen, nach welcher Art er seine Daten beziehen will. Je nach Komplexität der Anwendung kann es hierbei durchaus meherer Seiten geben. Jeder angewählte Art entspricht intern einer bestimmten Seite und hat zur Folge, dass eine bestimmte View verwendet wird um die Daten zu beziehen. Das Geniale an diesem Ansatz ist, dass das Grundform dasselbe bleibt, und zur Laufzeit die benötigte Remote View ausgetauscht wird. Nachdem der Benutzer seine Selektionskriterien eingegeben hat, kann er die Daten im ganz normalen Datenmanipulations Bildschirm einsehen:
Im Unterschied zu anderen Client/Server Ansätzen, welche gar keine Navigationsmöglichkeiten und auch kein Grid besitzen, um aus dem Resultateset den gewünschten Datensatz auszuwählen, verfügt das VFX Framework auch im Client/Server Fall über alle Eigenschaften, welche bei einer Fileserver Anwendung so praktisch sind:
Somit liegt es in der Verantwortung des Benutzers, ob er mehrere Datensätze beziehen will um dann seine Suche mit den lokal zur Verfügung stehenden Datensätzen weiter zu verfeinern, oder ob er gleich zu Beginn die Daten soweit einschränkt, dass nur in einziger Datensatz über das Netz auf seine Arbeitsstation geladen wird. Auch um andere Daten vom Server zu beziehen, ist in VFX bereits alles vorgesehen. Der Benutzer muss lediglich den "Abfrage…" Knopf in der entsprechenden Formtoolbar anwählen und schon befindet er sich wieder in dem eingangs gezeigten Selektionsbildschirm und kann dort erneut einen Datenbezug starten. Ich werde in der Session die technische Implementation inkl. vollständiger, sehr detaillierter, deutschsprachiger Dokumentation an die Teilnehmer übergeben. Mehrere Benutzer arbeiten mit demselben DBCWenn man in einem Mehrbenutzer Betrieb mit ein und demselben Datenbank Container arbeitet, ist es wichtig zu verstehen, dass die Informationen, welche zu den im DBC abgespeicherten Connections für alle Benutzer grundsätzlich die selben sind. Hat man eine Trusted Umgebung werden keine benutzerspezifischen Informationen in der Connection Definition abzuspeichern sein. Alle Benutzer können getrost mit ein und demselben DBC arbeiten. Ist hingegen eine non trusted Umgebung vorhanden, d.h. einzelne Benutzer
werden mit dem vom SQL Server selbst zur Verfügung gestellten Login
Authentisierungsverfahren geprüft, ist es unabdingbar, dass im Connection
String ein Username und Passwort mitgegeben wird. Ein Connection String bei
non Trusted Umgebungen sieht wie folgt aus: xx;APP=Microsoft® Visual FoxPro®;WSID=DUAL_PENTIUM;DATABASE=Fibu;Network=DBMSSOCN;Address=MYTHEN,1433 Wie man unschwer erkennen kann, steht Benutzername und Passwort im Connection String. Obwohl es sehr praktisch ist, dass VFP alles im Zusammenhang mit einer Connection in einem DBC abspeichert, ist dies natürlich ein scheinbar unlösbares Problem wenn mehrere Benutzer mit ein und demselben DBC arbeiten. Es kann im DBC nur immer ein gültiger Connection String drinstehen. Die Lösung ist genauso provokativ wie einfach: Wir propagieren ja, dass wir je Client Applikation jeweils eine shared Connection für alle Views verwenden soll. Dies ist in der vorgeschlagenen Lösung absolut prioritär einzuhalten. Der Ablauf ist folgender:
Bestimmt stellt der Non-Trusted Fall eher die Ausnahme dar, wir waren im Zusammenhang mit unseren Kundenprojekten jedoch in dieser Situation und mussten deshalb rasch eine Lösung implementieren. Der Aufwand, für jeden Benutzer ein eigenes DBC zu erstellen erschien und allzu gross. Wir hatten das schon programmiert, haben aber diese Lösung wieder verworfen, da wir uns gesagt haben, wenn man sich stur an die "share connection" hält, braucht es keine solch "aufwendigen" Lösungen. Einfache Lösungen sind oftmals auch die besten. Arbeiten ohne DSN EinträgeWir hatten in der Vergangenheit akzeptiert, dass der Kunde beim Betreiben unserer Client/Server Anwendungen mit einem Data Source Name arbeitet. Hierzu musste immer eine ODBC Verbindung mit dem ODBC Data Source Administrator erstellt werden. Diese Information wurde in der Registry abgespeichert. An und für sich keine schwierige Angelegenheit aber eigentlich eine
Lösung. Überflüssig deshalb, weil es auch ohne DSN Eintrag geht, fehleranfällig, weil in diesem Dialog viel zu viele Parameter falsch eingestellt bzw. verstellt werden können und nicht transparent, weil man vom Namen der DSN verbindung nicht direkt auf die effektiv angesprochene Datenbank schliessen konnte. Dies hat uns dazu bewogen, nach einer Lösung zu suchen, welche und von diesem DSN "Gips" befreit. Die Lösung ist folgende: dodefault()
*--dsn ggfl. setzen
if !empty(m.gs_sqluser)
dbsetprop("conGV", "CONNECTION", "ConnectString",
* Prüfe ob Verbindung zum Datenbankserver aufgebaut werden kann
lndsnhandle = sqlconnect("conGV")
if llCancel
*--öffne eine remote view mit shared connection zu Beginn endproc Wir haben beim Start der Applikation den Connection String aufgebaut und setzten diesen mit dbsetprop im DBC ein. Ein typischer Connection String ohne DSN sieht folgendermassen aus: Die benötigten Informationen, um auf den SQL Server zuzugreifen sind in einer Systemparameter Tabelle (vfxsys) abgespeichert. Diese sind im einzelnen:
Wahlweise kann mit Trusted Connections oder, wie in dieser Anwendung, mit einem Proxy User unter SQL Server Security gearbeitet werden. Hat man keinen externen DSN Eintrag, so kann man die Applikation natürlich auch nicht starten, wenn die Einstellungen noch nicht in der Systemtabelle stehen. Um dieses Problem zu lösen, muss ein spezieller Dialog zur Verfügung gestellt werden, welcher dafür sorgt, dass der Benutzer (oder Administrator der die Anwendung aufsetzt) die erforderlichen Parameter beim erstmaligen Applikationsstart einstellen kann. Dies erfolgt im Form "dsndialog", welches sich dem Benutzer folgendermassen präsentiert:
[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ]
|