[ 1 ] [ 2 ]

Erstellen von SPT Anweisungen aus Remote Views

Das VFX Framework erstellt aus den Remote View Definitionen die entsprechenden SPT Anweisungen, indem die Remote View gelesen wird und als SPT String abgesetzt wird.

Bei der CPickField Klasse kann man wie gewohnt je eine Remote View für das Picken (Property cTableName) sowie eine für die Validierung (Property CViewValid) definieren.

Durch das Setzen der Property lUseSpt werden diese beiden Reote Views zur Laufzeit in SPT Anweisungen (inkl. Parameters!) umgewandelt. Als VFX Entwickler braucht man sich hier um keine weiteren Details mehr zu kümmern.

Bei den Grids ist es zur Zeit so, dass diese Technik nur bei “Read Only” Grids funktioniert.

Bei den Comboboxen dient die Property cTableName dazu, den Namen des Cursors, welcher aus der SPT Anweisung für den Rowsource resultiert, festzuhalten.

Die Datenumgebung von Forms

Es ist einleuchtend, dass, je mehr Remote Views in einer Datenumgebung geöffnet werden, die Performance der Anwendung abnimmt. Das Form wird bei mehr Views in der Datenumgebung entsprechend länger zu laden haben. Selbst wenn Sie “NoDataonLoad” anwählen, d.h. dass beim Laden des Forms nur die Strukturen der Remote Views geladen werden müssen, so ist dies dennoch mit einem nicht zu unterschätzendem Overhead verbunden, müssen doch für alle Felder die entsprechenden Attribute vom Server bezogen werden und die Remote View der Struktur entsprechend aufgesetzt werden.

HINWEIS: Auch wenn Sie nicht mit SCX Dateien und Datenumgebungen operieren, sondern stattdessen direkt Ihre Formklassen instantiieren oder die Datenumgebung aus Ihrem SCX entfernt haben und im Load das Öffnen der Daten von Hand oder eine separate DE Klasse bewerkstelligen, gelten diese Ausführungen natürlich sinngemäss weiterhin.

In unserem Client/Server Ansatz im VFX Framework haben wir hierfür eine elegante Lösung gefunden. Wir können mit der Verwendung der Klasse CAskViewArgPgf mit beliebig vielen Remote Views arbeiten, haben jedoch in der Datenumgebung immer nur eine einzige “Platzhalter” Remote View. Erst zur Laufzeit wird die entsprechende View geöffnet und an Stelle der Platzhalter View verwendet. Eine wirklich elegante Lösung um mit sovielen Remote Views, wie nötig, arbeiten zu können, ohne die Performance in irgendeiner Weise negativ zu beeinflussen!

Multi Remote View Ansatz

Wir 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:

  • Navigation
  • Listendarstellung
  • Inkrementelle Suche
  • Sortierung sowie
  • Filtrierung.

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.,

Die SQL Abfragen

Das Axiom, dass bei einer Client/Server Anwendung dem Benutzer nach Aufstarten eines Forms grundsätzlich KEINE Daten präsentiert werden, lebt dem Gedanken nach, dass nur diese Daten vom Server auf den Client transferiert werden dürfen, welche der Client im Augenblick auch wirklich benötigt. Das mag für jemanden, der in der Client/Server Entwicklung neu ist zunächst etwas befremdend sein, doch man gewöhnt sich sehr rasch daran und, was noch viel besser ist: Man gewinnt diesem Ansatz je länger desto mehr positive Seiten ab.

Man löst sich somit vom Gedanken, dem Benutzer immer sämtliche Daten zu präsentieren, nur weil man eigentlich nicht weiss, welche Daten er tatsächlich benötigt. Das bringt den Entwickler in den durchaus als positiv zu wertenden Zwang, sich über die Art und Weise, wie ein Anwender mit den Daten umgeht, auseinanderzusetzen.

Ausgehend davon, dass der Entwickler weiss, welche Daten der Benutzer wie beziehen will, kann er z.B. den weiter oben beschriebenen “Multi Remote View” Ansatz wählen um mit verschiedenen Remote Views zu arbeiten. Hierbei ist es natürlich wichtig, dass jede einzelne View vom Server möglichst optimal verarbeitet werden kann.

Die aus VFP bekannte “Rushmore” Optimierung gibt es im SQL Server natürlich in Analogie auch. Beim SQL Server heisst das ganze “Query Optimizer”. Der Query Optimizer ist der Teil des SQL Servers, welcher eine View oder Stored Procedure bzgl. der optimierten Abarbeitungsstrategie durchleuchtet und dann einen Execution Plan erstellt, um die Daten in möglichst effizieter Art und Weise beziehen zu können.

Es leuchtet ein, dass eine Client/Server Anwendung nur dann eine wirklich gute Performance liefern kann, wenn die Optimierug der verwendeten Queries wirklich stattfinden kann. Hierzu ist es sehr nützlich, mit dem Query Analyzer zu arbeiten. Das ist das Tool, welches es einem u.a. erlaubt, den Execution Plan einer Query graphisch darstellen zu lassen und daraus Rückschlüsse auf die Optimierung der Abfrage oder die Anpassung der Datenbank zulässt.

Der Query Analyzer

Der im Query Analyzer darstellbare Execution Plan ist es, der Ihnen ehrlich und unbeschönigt sagt, ob Ihre geniale Select Anweisung nun optimiert werden kann oder nicht. Wenn Sie irgendwo “Table Scans” sehen, dann haben Sie schlechte Karten. Das bedeutet nämlich, dass alle Datensätze auf dem SQL Server einzeln durchgegangen werden. Es ist klar, dass bei einer grösser werdenden Tabelle die Antwortzeiten entsprechend grösser werden.

Sehen Sie “Table Scans” bei grösseren Tabellen, ist das ein Zeichen, Ihre Join Bedingungen nochmals zu überprüfen, oder auf der Datenbank den Einsatz von zusätzlichen Indices zu prüfen.

[ 1 ] [ 2 ]