Die umfassende Software – Entwicklungsumgebung zur Migration von Visual FoxPro Anwendungen nach Silverlight! Silverswitch 1.0 Entwicklerhandbuch Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Copyright Silverswitch ist ein Produkt der ISYS GmbH. Jede Vervielfältigung von Silverswitch-bezogenem Material ist nur nach schriftlicher Genehmigung durch die ISYS GmbH gestattet und in allen SilverswitchVeröffentlichungen muss die ISYS GmbH als Urheber von Silverswitch ausdrücklich erwähnt werden. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Inhaltsverzeichnis Copyright ................................................................................................................................................................ 2 Inhaltsverzeichnis.................................................................................................................................................... 3 Einleitung ................................................................................................................................................................ 5 Entwicklungswerkzeuge ......................................................................................................................................... 6 Visual FoxPro 9 und Visual Extend 13 ............................................................................................................... 6 Visual Studio 2010 .............................................................................................................................................. 6 Silverlight 4 Tools ............................................................................................................................................... 6 Silverlight 4 Toolkit ............................................................................................................................................ 6 Programmiersprachen ......................................................................................................................................... 6 Installation............................................................................................................................................................... 7 Startseite .............................................................................................................................................................. 8 Anlegen eines neuen Projekts ................................................................................................................................. 9 VFX – Silverlight Wizard ..................................................................................................................................... 10 Was macht dieser Assistent? ............................................................................................................................. 10 Auswahl der Silverlight Projektmappe.............................................................................................................. 10 Datenzugriff ...................................................................................................................................................... 11 Auswahl von Formularen .................................................................................................................................. 11 Auswahl der Projekte für Formulare ................................................................................................................. 13 Auswahl von Formulareigenschaften ................................................................................................................ 13 Auswahl von Berichten ..................................................................................................................................... 14 Start der Silverswitch-Anwendung ....................................................................................................................... 15 Weiterbearbeitung ................................................................................................................................................. 16 Architektur ............................................................................................................................................................ 17 Serverprojekte ................................................................................................................................................... 20 Clientprojekte .................................................................................................................................................... 20 Klassenhierarchie .............................................................................................................................................. 20 Anwendungsobjekt................................................................................................................................................ 21 Eigenschaften .................................................................................................................................................... 21 Formulare .............................................................................................................................................................. 24 Eigenschaften .................................................................................................................................................... 24 Geladenen Daten Betragsgrenze. ...................................................................................................................... 24 Ausführung von VFP Code mit GUINEU ............................................................................................................ 26 Action Button ........................................................................................................................................................ 32 Parameterstruktur und Übergabe von Parameter ................................................................................................... 33 Lokalisierung ........................................................................................................................................................ 35 Lokalisierung von Formularen .......................................................................................................................... 36 MessageBox Lokalisierung ............................................................................................................................... 36 Pflichtfelder ........................................................................................................................................................... 38 Anwendungsstart ................................................................................................................................................... 26 Client und Datenbank .................................................................................. Fehler! Textmarke nicht definiert. Benutzeranmeldung........................................................................................................................................... 26 Login Verhalten – NoLogin .......................................................................................................................... 26 Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Login Verhalten – LoginAtStartup ............................................................................................................... 27 Login Verhalten – OptionalLogin ................................................................................................................. 29 Verwendung von Bilddateien ................................................................................................................................ 40 Optimierung des Datenzugriffs ............................................................................................................................. 41 Weitere Informationen .......................................................................................................................................... 42 Forum, Newsgroup ............................................................................................................................................ 42 Technische Dokumentation ......................................................................... Fehler! Textmarke nicht definiert. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Einleitung Silverswitch ist die umfassende Entwicklungsumgebung für die Entwicklung von Geschäftsanwendungen mit Microsoft Silverlight. In Zusammenhang mit Visual Extend für VFP wird dem VFP Entwickler die einfache Möglichkeit gegeben, bestehende VFX für VFP Projekte nach Silverswitch zu migrieren. Die migrierten Projekte sind in der Bedienung ähnlich zu den vorhandenen VFX für VFP Anwendungen. VFP Entwicklern eröffnen sich damit völlig neue Perspektiven. Die migrierten Silverlight Anwendungen sind Internetanwendungen und laufen mit VFP Datenbanken und SQL Server Datenbanken, auch wenn die bisherige VFX für VFP Anwendung nicht mit SQL Server Datenbank ausgeführt werden konnte. Silverlight Anwendungen laufen auf Windows und Mac OS. Es ist zu erwarten, dass künftig eine größere Anzahl von Plattformen Silverlight unterstützen werden. In Silverswitch Anwendungen ist die Ausführung von VFP Code auf der Clientseite und auf der Serverseite möglich. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Entwicklungswerkzeuge Zur Verwendung von Silverswitch sind einige Entwicklungswerkzeuge erforderlich. Visual FoxPro 9 und Visual Extend 13 Die Migration von bestehenden VFP Projekten wird mit dem VFX – Silverlight Wizard durchgeführt. Um diesen Assistenten ausführen zu können, sind Installationen von VFP 9 und von VFX 13 erforderlich. Der VFX – Silverlight Wizard ist nur in der Vollversion von VFX 13 enthalten, nicht jedoch in der Trial Version. Die Trial Version von VFX 13 kann von der Visual Extend Webseite heruntergeladen werden: http://www.visualextend.de/ Visual Studio 2010 Silverswitch Anwendungen werden mit Visual Studio 2010 und Silverlight 4 entwickelt. Zur Entwicklung von Silverswitch-Projekten kann eine beliebige Version von Visual Studio 2010 verwendet werden, Es kann die kostenlos erhältliche Version „Visual Web Developer 2010 Express“ verwendet werden. In diesem Handbuch wird davon ausgegangen, dass Visual Web Developer 2010 Express verwendet wird. Als Bezeichnung wird allgemein „Visual Studio“ verwendet. Andere Versionen von Visual Studio haben erweiterte Möglichkeiten, die für die Entwicklung von Silverswitch-Anwendungen jedoch nicht erforderlich sind. Visual Web Developer 2010 Express kann von der Microsoft Webseite heruntergeladen werden: http://www.microsoft.com/express/Downloads/ Silverlight 4 Tools Nach der Installation von Visual Studio müssen die Silverlight 4 Tools installiert werden. Silverlight 4 Tools können von der Microsoft Silverlight Webseite heruntergeladen werden: http://www.silverlight.net/getstarted/ Silverlight 4 Toolkit Der Silverlight 4 Toolkit kann von der Codeplex Webseite heruntergeladen werden: http://silverlight.codeplex.com/ Im Silverlight 4 Toolkit sind Steuerelemente enthalten, die die auf den Silverlight 4 Basisklassen basieren und eine erweiterte Funktionalität bieten. Programmiersprachen Die Entwicklung von Silverswitch-Anwendungen erfolgt mit der Programmiersprache C#. Durch die Verwendung von GUINEU ist auch die Programmierung mit VFP möglich. Außerdem kann VFP Code in COM Servern ausgeführt werden. Die Benutzeroberfläche von Silverlight Anwendungen wird mit der Sprache XAML beschrieben. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Installation Silverswitch ist eine Erweiterung von Visual Studio und wird mit einem Windows MSI Installer installiert. Das Installationsprogramm hat den Namen Silverswitch.msi. Silverswitch kann aus dem Menü von VFX für VFP über den Menüpunkt „Update“, „Get Silverswitch“ heruntergeladen werden. Alle Instanzen von Visual Studio sollten während der Installation geschlossen werden. Das Installationsprogramm erkennt alle installierten Versionen von Visual Studio. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Nach erfolgreicher Installation erscheint im Dialog „Neues Projekt“ von Visual Studio unter C# die Vorlage „Silverswitch“. Basierend auf diesem Vorlageprojekt werden neue Silverswitch-Anwendungen erstellt. Die Deinstallation von Silverswitch muss über die Systemsteuerung erfolgen. Startseite Silverswitch enthält eine Startseite für Visual Studio. Die Silverswitch Startseite wird vom Installationsprogramm als Standard-Startseite eingestellt. Im Dialog Extras, Optionen von Visual Studio kann die Startseite gewechselt werden. Auf der Startseite von Silverswitch stehen die gleichen Optionen zur Verwaltung von Projekten wie auf der Startseite von Visual Studio zur Verfügung. Es können neue Projekte angelegt und bestehende Projekte geöffnet werden. Am linken Rand befindet sich eine Liste mit zuletzt verwendeten Projekten. Zusätzlich stehen auf der Silverswitch-Startseite acht Seiten mit Informationen zur Verfügung. Die erste Seite wird beim Start angezeigt und zeigt insbesondere die Versionsnummer von Silverswitch. Die Informationen auf den weiteren Seiten werden nur angezeigt, wenn eine Internetverbindung vorhanden ist. Auf der zweiten und dritten Seite werden die letzten 50 Nachrichten aus dem deutschsprachigen und dem englischsprachigen Forum angezeigt. Es folgt die Portalseite der dFPUG. Aus dem Portal können zahlreiche Dateien heruntergeladen werden. Die nächste Seite zeigt die aktuelle Webseite von Visual Extend. Es folgt eine Seite mit Links rund um Visual Extend. Es gibt auch eine Seite zeigt die zeigt Rangliste der aktivsten Schreiber im Forum. Schließlich wird eine sehr wichtige Seite diskutiert - Menü Projekt. Seine Funktionalität erfordert eine besondere Aufmerksamkeit. Wenn Sie im Menü den Tab Projektmenu wählen, führt das zur Seite, die unten dargestellt ist. Es gibt zwei Sub-Tabs - einer für die Aktualisierung des Projekts und einer - für Builders. Ein Klick auf dem Button Upgrade Project prüft die aktuelle Version von Silverswitch. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Anlegen eines neuen Projekts Um ein neues Projekt, basierend auf Silverswitch zu erstellen, wird in Visual Studio der Dialog „Neues Projekt“ über die Startseite, den Menüpunkt „Datei“, „Neues Projekt…“ oder mit einem Klick auf die Schaltfläche „Neues Projekt“ in der Symbolleiste geöffnet. In diesem Dialog wird „Silverswitch“ unter „Visual C#“ „Silverswitch“ ausgewählt. Im mittleren Teil des Dialogs wird dann das Vorlageprojekt „Silverswitch“ ausgewählt. Der Projektname sowie Ordnernamen und Formularnamen müssen gültige Klassennamen sein, dürfen also weder Leerzeichen noch Sonderzeichen enthalten. Das neue Projekt sollte den Namen der zu migrierenden VFX Anwendung erhalten. Außerdem ist ein Ordner anzugeben, in dem das neue Projekt gespeichert werden soll. Dieser Ordner ist später im VFX – Silverlight Wizard anzugeben. Das Projekt enthält einen mit VFP erstellten COM Server. Das Projekt ist zur weiteren Bearbeitung mit dem VFX – Silverlight Wizard vorgesehen. Die direkte Ausführung ist nicht vorgesehen, jedoch möglich, wenn der VFP COM Server registriert ist. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH VFX – Silverlight Wizard Der nächste Entwicklungsschritt ist die Migration einer vorhandenen VFX für VFP Anwendung nach Silverswitch. Das zu migrierende Projekt muss mit VFP geöffnet werden. Wenn die Silverswitch Projektmappe in Visual Studio während der Ausführung des VFX – Silverlight Wizard geöffnet bleiben soll, müssen in Visual Studio alle Dateien gespeichert werden, bevor der VFX – Silverlight Wizard gestartet wird. In Visual Extend für VFP ist der VFX – Silverlight Wizard integriert und kann über den Menüpunkt „VFX 13.0“, „Projekt“, „Silverlight Wizard“ gestartet werden. Dieser Assistent ermöglicht die Migration von Formularen und Berichten in ein Silverswitch Projekt. Der Assistent erstellt und registriert einen VFP COM Server. Auf Windows Vista und neueren Windows Versionen muss VFP 9 explizit mit Administratorrechten ausgeführt werden, damit dieser Assistent erfolgreich ausgeführt werden kann. Die migrierte Silverswitch Anwendung greift in der Entwicklungsumgebung auf die gleiche Datenbank zu, wie die VFX für VFP Anwendung. Jede Tabelle der Datenbank muss über einen Primärschlüssel verfügen. Was macht dieser Assistent? Im ersten Schritt wird die Funktionsweise des Assistenten erläutert. Der Assistent migriert das aktive VFX Projekt in eine Silverlight Projektmappe. Es muss eine vorbereitete Silverswitch Projektmappe vorhanden sein, um diesen Assistenten ausführen zu können. In den folgenden Schritten des Assistenten kann ausgewählt werden, welche Formulare, Eigenschaften und Berichte migriert werden sollen. Der Assistent verändert nicht das VFP Projekt. Auswahl der Silverlight Projektmappe In diesem Schritt wird eine zuvor vorbereitete Silverswitch Projektmappe ausgewählt. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Die vom VFX – Silverlight Wizard erstellten Formulare und Berichte werden der hier ausgewählten Projektmappe hinzugefügt. Datenzugriff In diesem Schritt werden der Silverswitch Projektmappe Komponenten für den Datenzugriff hinzugefügt. Wenn mit einer SQL Server Datenbank gerbeitet wird, erfolgt der Datenzugriff der Silverswitch-Anwendung über ein ADO.NET Entity Data Model und einen Domain Service. Beide Komponenten werden vom Assistenten generiert. Die Generierung eines ADO.NET Entity Data Model und eines Domain Service ist bei wiederholter Anwendung des Assistenten auf dem gleichen Projekt nur dann erforderlich, wenn zwischenzeitlich Änderungen an der Datenstruktur vorgenommen wurden. Bei der ersten Anwendung des Assistenten auf einem VFX für Projekt müssen ADO.NET Entity Data Model und Domain Service auf jedem Fall generiert werden. Bei der ersten Anwendung des Assistenten muss ein VFP COM Server erstellt werden. Über den COM Server kann der Zugriff auf Datenbanken erfolgen. Wenn VFP Datenbanken verwendet werden sollen, muss der Datenzugriff über den COM Server erfolgen. Im COM Server kann außerdem mit VFP erstellte Geschäftslogik abgelegt werden. Der VFX – Silverlight Wizard öffnet die Datei Config.vfx im Ordner des VFX Projekts. Wenn diese Datei gefunden wird, erstellt der Assistent eine weitere Datei Config.vfx im Ordner VFPComDomainService des COM Servers im Silverswitch Projekt. In dieser Datei Config.vfx werden alle Pfadnamen durch vollständige Pfadnamen ersetzt. Diese Datei wird für den Datenzugriff des COM Servers verwendet. Wenn sich im Ordner des VFX Projekts keine Datei Config.vfx befindet, wird eine neue Config.vfx erstellt. Der VFX – Silverlight Wizard sucht nach Einträgen zu SQL Server Datenbanken in der Datei Config.vfx. Wenn solche Einträge gefunden werden, werden die Verbindungszeichenfolgen in der Datei Web.config des Silverswitch Projekts gespeichert. Einstellungen des Anwendungsobjekts Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Auswahl von Formularen In diesem Schritt erscheint eine Liste mit Formularen, die im VFX für VFP Projekt enthalten sind. Standardmäßig wird vorgeschlagen die Formulare nach Silverlight zu migrieren, die in das Projekt eingeschlossen sind. VFX Formulare, wie zum Beispiel die Benutzerverwaltung, werden nicht nach Silverlight migriert, weil diese Formulare bereits im Vorlageprojekt von Silverswitch enthalten sind. Falls in der Datenumgebung eines Formulars eine Datenquelle verwendet wird, die nicht über einen Primärschlüssel verfügt, erscheint im Protokoll des Assistenten eine Warnung. Das Formular kann nach Silverlight migriert werden. Das migrierte Formular kann ausgeführt werden, jedoch ist die Bearbeitung von Daten nicht möglich, solange der Datenquelle kein Primärschlüssel hinzugefügt wird. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Eingabe der Projektnamen für Formulare In diesem Schritt werden die Namen der Projekte angegeben, denen die Silverlight Formulare hinzugefügt werden sollen. Standardmäßig werden alle Silverlight Formulare dem Projekt <Projektname>Forms hinzugefügt. Es ist möglich eigene Projektnamen einzutragen. Es können mehrere oder alle Formulare einem Projekt hinzugefügt werden. Es kann aber auch für jedes Formular ein eigenes Projekt erstellt werden. Bei der Erstellung der Silverlight Client-Anwendung wird aus jedem Projekt eine XAP-Datei generiert, die zur Laufzeit an den Client im Internet übertragen werden muss. Durch die Aufteilung in mehrere Projekte kann die Größe der XAP Dateien verkleinert werden. Die Ladezeit wird so verringert. Formulare können beliebig in Projekte gruppiert werden. Es mag sinnvoll sein, umfangreiche Formulare in eigene Projekte zu platzieren. Mehrere kleine Formulare können in einem Projekt zusammengefasst werden. Mit einem Klick auf die Option „Create separate project for each form“ wird für jedes Formular ein Projektname generiert. Auswahl von Formulareigenschaften Standardmäßig werden Silverlight Formulare mit einem Layout generiert, dass weitgehend dem Layout des VFP Formulars entspricht. Zu diesem Zweck werden alle möglichen Layouteigenschaften nach Silverlight migriert. Wenn der Anwender die Möglichkeit erhalten soll Styles zu verwenden, sollten nicht alle Layouteigenschaften nach Silverlight migriert werden. Alle Eigenschaften, die hard-codiert in Silverlight Formularen enthalten sind, können zur Laufzeit nicht durch die Anwendung von Styles geändert werden. Durch die Option „Create layout based on Silverlight Grid“ wird die Position von Steuerelementen nicht nach Silverlight migriert. Vielmehr werden die Steuerelemente im Silverlight-Formular in einem Silverlight Grid angeordnet. Ein Silverlight Grid ist vergleichbar mit einer Tabelle. In dieser Tabelle werden typischerweise in einer Spalte Bezeichnungen und in der nächsten Spalte Textboxen und andere Steuerelemente zur Dateneingabe Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH platziert. Der Vorteil dieser Art der Darstellung ist, dass Formulare gut skalierbar sind. Formulare lassen sich so zum Beispiel auch auf Mobilgeräten mit sehr kleinen Bildschirmen gut anzeigen. Auswahl von Berichten In diesem Schritt werden alle im VFX für VFP Projekt enthaltenen Berichtsdateien angezeigt. Standardmäßig werden alle Berichte zu Silverlight Berichten migriert, ausgenommen VFX Berichte, wie zum Beispiel die Vorlagedateien für Grid-Berichte. Damit VFP Berichte nach Silverlight migriert werden können, dürfen diese nicht über Cursor in der Datenumgebung verfügen. Berichte müssen auf den Datenquellen basieren, die das aufrufende Formular bereitstellt. Wenn die Projektmappe in Visual Studio geöffnet ist, während der VFX – Silverlight Wizard ausgeführt wird, erscheint in Visual Studio die Frage, ob die Projektmappe neu geladen werden soll, weil eine andere Anwendung Änderungen an der Projektmappe vorgenommen hat. In diesem Fall muss die Projektmappe neu geladen werden. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Start der Silverswitch-Anwendung Die migrierte Silverswitch Anwendung kann in der Entwicklungsumgebung von Visual Studio durch einen Klick auf den grünen Pfeil in der Symbolleiste oder mit der Funktionstaste F5 ausgeführt werden. Die Anwendung startet mit einem Begrüßungsbildschirm. Wenn die Anwendung zur Verwendung von mehr als einer Datenbank konfiguriert ist, erscheint der Mandantenauswahldialog. Anschließend erscheint der Anmeldedialog. Nach der erfolgreichen Benutzeranmeldung läuft die Anmeldung. Im oberen Bereich erscheint eine Symbolleiste und im linken Bereich erscheint der Öffnen-Dialog. Die weitere Bedienung ist ähnlich zu Office Anwendungen, bzw. zu VFX für VFP Anwendungen. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Weiterbearbeitung mit Visual Studio Die Silverswitch Anwendung kann in Visual Studio weiterbearbeitet werden. Es ist aber auch möglich in der VFX für VFP Anwendung Änderungen an Formularen vorzunehmen und diese Formulare anschließend mit dem VFX – Silverlight Wizard erneut zu migrieren. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Silverswitch Assistenten und Generatoren Die Assistenten und Generatoren von Silverswitch sind über die Startseite von der Seite Project menu erreichbar. Update Project Mit einem Klick auf Update Project wird die Version des geöffneten Silverswitch Projekt geprüft. Wenn die installierte Version von Silverswitch neuer ist, als die Version, mit der das Projekt erstellt wurde, wird eine Messagebox angezeigt. Nach Zustimmung wird die Aktualisierung gestartet. Von der zweiten Seite der Projekt-Menüseite können Assistenten für verschiedene Steuerelemente gestartet werden. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH VfxPickField Builder Um den Assistenten für ein bestimmtes Steuerelement zu starten, muss bereits ein Formular im Designer geöffnet sein. In dem Formular muss das Steuerelement ausgewählt sein, für das der Assistent gestartet werden soll. In diesem Fall ist das ausgewählte Steuerelement ein VfxPickField. Von der Startseite kann jetzt der Silverswitch - PickField-Builder gestartet werden. Im Assistenten können die Eigenschaften des Steuerelements geändert werden und die Änderungen können durch einen Klick auf OK gespeichert werden. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH DataGrid Builder Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Architektur Silverlight Internet-Anwendungen bestehen aus mindestens zwei Projekten: einem Serverprojekt und einem Clientprojekt. Das Serverprojekt wird auf dem Server ausgeführt und enthält den Datenzugriff und Geschäftslogik. Das Clientprojekt ist das eigentliche Silverlight-Projekt und wird auf dem Client-Rechner ausgeführt. Aus Optimierungsgründen ist das Clientprojekt in viele, kleine Teilprojekte aufgeteilt. Serverprojekte Silverswitch Anwendungen haben zwei Serverprojekte. Das Startprojekt der Projektmappe hat den Namen Silverswitch.Web. Das Startprojekt wird auf dem Internet Server vom Internet Information Server ausgeführt. Dieses Projekt enthält die Startseite default.htm. Die Internetadresse der Startseite wird vom Internetbenutzer in der Adresszeile des Browsers eingegeben, um die Anwendung zu starten. Die Startseite default.htm prüft, ob im Browser das Silverlight Plug-In installiert ist und lädt die Silverlight Startanwendung auf der Clientseite. Das zweite Serverprojekt hat den Namen VfxDataLayer.Web. Dieses Projekt enthält die Datenmodell, über die der Datenzugriff erfolgt sowie die Domain Services, mit denen der Datenaustausch zwischen Clientprojekten und Serverprojekten erfolgt. Der Datenzugriff erfolgt in Silverswitch Anwendungen mit ADO.NET Entity Data Modellen. Diese Modelle können mit Visual Studio erstellt werden, wenn für die zu verwendende Datenbank ein ADO.NET Entity Data Model-Treiber zur Verfügung steht. Für Microsoft SQL Server wird so ein Treiber mit Visual Studio installiert. Bei der Migration von VFX für VFP Projekten wird ein ADO.NET Entity Data Model für den Zugriff auf VFP Datenbanken vom VFX – Silverlight Wizard erstellt. Der Zugriff auf die Datenbank erfolgt hierbei mit einem VFP COM Server, der ebenfalls vom VFX – Silverlight Wizard generiert wird. Ein ADO.NET Entity Data Model-Treiber für VFP Datenbanken ist daher nicht erforderlich. Ein Domain Service kann mit dem Assistenten von Visual Studio generiert werden. Bei der Migration einer VFX für VFP Anwendung wird ein Domain Service vom VFX – Silverlight Wizard erstellt. Clientprojekte In einer Silverlight Anwendung wird ein Silverlight Projekt zu einer Datei mit der Namenserweiterung .xap kompiliert. Genauer gesagt, werden die DLLs, die das Kompilat enthalten, in eine Archivdatei verpackt. Diese Archivdatei enthält die Namenserweiterung .xap. XAP-Dateien können mit dem Windows-Explorer in ZIP Dateien umbenannt werden und man kann so die enthaltenen DLL-Dateien sehen. Beim Laden einer Silverlight Anwendung über das Internet wird eine XAP-Datei wird der Serverseite an den Client übertragen und dort vom Silverlight Plug-In ausgeführt. Um die Wartezeit beim Laden einer Silverlight Anwendung zu verkürzen, sollte eine XAP-Datei klein sein. Silverswitch wird dem durch ein Modularisierungskonzept gerecht. Beim Start der Anwendung wird VfxLoader.xap geladen. Klassenhierarchie Die in Silverswitch implementierte Klassenhierarchie ist ähnlich zu der Hierarchie, die in VFX für VFP implementiert wurde. Die Funktionalität von Silverswitch ist in Klassendateien mit dem Namenszusatz “Base” enthalten. Von diesen Klassendateien gibt es 1:1 Ableitungen in Klassendateien ohne den Namenszusatz “Base”. Diesen Klassendateien können eigene Erweiterungen hinzugefügt werden. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Anwendungsobjekt Das Anwendungsobjekt ist im Projekt VfxApplicationBase in der Programmdatei Controls\VfxAppObjectBase.cs definiert. Eine 1:1 Ableitung, in der individuelle Anpassungen für das jeweilige Projekt gemacht werden können, befindet sich im Projekt VfxApplication in der Programmdatei Controls/VfxAppObjectBase.cs. Das Anwendungsobjekt stellt Eigenschaften und Methoden global zur Verfügung. In den Eigenschaften des Anwendungsobjekts können Einstellungen gemacht werden, die das Verhalten der Anwendung betreffen. Eigenschaften AddUserToCaption – Der Wert dieser Eigenschaft gibt an, ob der Benutzername neben dem Namen der Anwendung angezeigt wird. AllowRelogon - Ermöglicht dem Benutzer sich erneut einzuloggen, ohne die Anwendung zu verlassen. AllowUserCustomization - Wenn der Wert dieser Eigenschaft auf true eingestellt ist, kann der angemeldete Benutzer in der Anwendung individuelle Einstellungen machen. Wenn kein Benutzer angemeldet ist, können keine individuellen Einstellungen vorgenommen werden. Wenn der Wert dieser Eigenschaft auf false eingestellt ist, werden individuelle Einstellungen nicht gespeichert. ApplicationName - Diese Eigenschaft gibt den Namen der Anwendung an. Der Name wird im Titel des Browsers angezeigt. AskToSave – Anzeige einer Messagebox vor einigen Operationen. AutoEdit - Wenn der Wert dieser Eigenschaft auf true eingestellt ist, werden alle Steuerelements angezeigt. Der Benutzer kann die Bearbeitung von Daten unmittelbar beginnen. Wenn der Wert dieser Eigenschaft auf false eingestellt ist, werden alle Steuerelemente disabled angezeigt. Um mit der Bearbeitung zu beginnen, muss der Benutzer in der Symbolleiste auf die Schaltfläche „bearbeiten“ klicken. AutoEdit.AllwaysEnabled - Steuerelemente sind standardmäßig auf allen Formularen aktiviert. Der Benutzer kann den Fokus auf ein Steuerelement setzen und sofort mit der Bearbeitung beginnen. Die erste Änderung des Benutzers schaltet das Formular automatisch in den Bearbeitungsmodus. AutoEdit.AlwaysDisabled – Bei dieser Einstellung sind die Steuerelemente auf allen Formularen standardmäßig deaktiviert. Die Bearbeitung ist nur möglich, nachdem der Benutzer auf das Symbol "Bearbeiten" in der Symbolleiste geklickt hat. AutoEdit.UseObjectSettings - Die Einstellungen des aktuellen Formulars werden verwendet. Century -diese Eigenschaft legt das Format des Jahrhunderts in Datumsfeldern. Wenn diese Eigenschaft false ist, fehlt das Jahrhundert, im Jahr erscheint in einer zweistelligen Form (JJ). Wenn diese Eigenschaft true ist, ist das Jahr in vierstellige Form (JJJJ). CurrentConnectionInfo - globale Eigenschaft für die aktuelle Verbindung. Enthält Informationen über Typ Client Datenbanknamen und Verfügbarkeit. CurrentLanguage - globale Eigenschaft für die aktuelle Sprache. CanConnectToTheServer - gibt an, ob die Verbindung mit dem Server verfügbar ist. ChildGridCopy – Erlaubt Kopie des ChildGrid-Eintrags. Standardwert ist GlobalSettings.AlwaysDisabled. DisableFormResize– wenn der Wert dieser Eigenschaft auf True eingestellt ist, kann die Benutzer nicht die Größe der Formen zur Laufzeit ändern. Wenn false, sind die Formen größenveränderbar zur Laufzeit. Während das Schließen des Formulars der Benutzer ausgewählten Größe wird in VfxResources gespeichert und wieder gebraucht das nächste Mal das Formular geöffnet wird. EditDateFieldName - der Name des Feldes, der das Datum speichert, das ein Datensatz zuletzt geändert wurde. Wenn ein Feld mit dem angegebenen Namen in einer Tabelle vorhanden ist, wird das Feld bei jedem Speichern aktualisiert. Der Typ des Feldes kann Date- oder DateTime sein. Wenn der Typ IsDateTime ist wird beim Speichern ein Timestamp eingefügt. EditTimeFieldName – der Name des Feldes, der die Zeit speichert, die ein Datensatz zuletzt geändert wurde. Wenn ein Feld mit dem angegebenen Namen in einer Tabelle vorhanden ist, wird das Feld bei jedem Speichern aktualisiert. Der Typ des Feldes muss C(8) sein. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH EditUserFieldName - der Name des Feldes in einer Tabelle, der den Namen des letzten Benutzers speichert, der zuletzt den Datensatz bearbeitet haben. Wenn ein Feld mit dem angegebenen Namen in einer Tabelle vorhanden ist, wird das Feld bei jedem Speichern aktualisiert. Das Feld muss vom Typ Char Länge 32 sein. EnforcePasswordHistoryCount – diese Eigenschaft bestimmt, wie viele alte Kennwörter in der Geschichte gespeichert werden. Kennwörter, die in der Geschichte sind können als ein neues Kennwort nicht zugewiesen werden. Der Standardwert ist 0. ErrorDetailLevel – legt fest, wie detailliert das Fehlerprotokoll wird. Das Fehlerprotokoll ist in der Tabelle VfxLog gespeichert. Es hat drei Ebenen: MessageOnly, CallStackInformation, FullDetailedInformation HideOpenDialog – Bestimmt ob OpenDialog in der Anwendung sichtbar ist. HideWhenEmpty - Diese Eigenschaft gibt an, ob Steuerelemente ausgeblendet werden, wenn keine Datensätze in einer Tabelle gespeichert werden. In diesem Fall erscheint ein Hinweis auf dem Formular. Klickt der Benutzer auf den Hinweis, wechselt das Formular in den Einfügemodus. InsertDateFieldName - Enthält den Namen des Feldes, in der das Datum der Schaffung eines Datensatzes gespeichert wird. Wenn ein Feld mit dem angegebenen Namen in einer Tabelle vorhanden ist, wird das Feld automatisch während des ersten Speicherns eines Datensatzes ausgefüllt. Der Typ des Feldes kann Date- oder DateTime sein. Wenn das Feld vom Typ DateTime ist wird beim Speichern ein Zeitstempel eingefügt. InsertUserFieldName - Der Name eines Felds in einer Tabelle, in der der Name des Benutzers gespeichert, die den Datensatz erstellt hat. Wenn ein Feld mit dem angegebenen Namen in einer Tabelle ist, wird der Wert automatisch während der ersten Speichern eines Datensatzes ausgefüllt. Das Feld muss vom Typ Char mit Länge 32 sein. InsertTimeFieldName - Der Name des Feldes, das die Zeit von einem Eintragserstellung speichert. Wenn ein Feld mit dem angegebenen Namen in einer Tabelle vorhanden ist, wird der Wert während der ersten speichern automatisch ausgefüllt. Der Typ des Feldes muss C(8) sein. KeepUserLog - Keep Login/Logout Protokoll für Benutzer. LangID – Wenn Runtimelocalization nicht verwendet wird, ist die Abkürzung für die Standardsprache in dieser Eigenschaft angegeben. Der Standardwert ist Englisch. LoginBehavior - gibt an, ob ein Benutzer-Login erforderlich beim Start, nicht erforderlich, oder optional ist. Es bestimmt das Startverhalten von der Anwendung. Login-Behavior wird in einem gesonderten Kapitel detailliert erklärt. MainForm - bestimmt die Start-Form der Anwendung. Wenn Benutzer-Login erforderlich ist, wird das Formular nach dem Login geöffnet. MaintenanceTimerFileName - wenn die Datei mit dem angegebenen Name im Ordner Maintenance anwesend ist, beendet die Anwendung. MaintenanceTimerInterval - Intervall in Sekunden, nach denen die Anwendung überprüft die Anwesenheit der Wartung - Datei im Ordner Maintenance. MultiInstance - bestimmt Global, ob Formen mehr als einmal geöffnet werden können. PasswordHistoryCount - bestimmt die Anzahl eindeutiger neuer Kennwörter, die vor eines alten Kenntwortes einem Benutzerkonto zugeordnet werden müssen. Wert muss zwischen 0 und 99 liegen. PasswordLength - gibt die Mindestlänge der Kennwörter. Wenn diese Eigenschaft auf 0 festgelegt ist, ist kein Kennwort erforderlich. PasswordStrengthLevel – gibt die Stärke der erforderliche Kennwort. Hat vier Sicherheitsebenen. PasswordStrengthLevel.Weak – keine Anforderungen; PasswordStrengthLevel.Medium - das Kennwort muss Zeichen aus mindestens 2 der folgenden vier Kategorien enthalten: • Großbuchstaben Zeichen (A bis Z), • Kleinbuchstaben (a bis Z), • Ziffern (0 bis 9), • Sonderzeichen (z. B.!, $, #, %). Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH PasswordStrengthLevel.Strong – das Kennwort muss Zeichen aus mindestens 3 der oben genannten 4 Kategorien enthalten. PasswordStrengthLevel.Best – muss das Kennwort Zeichen von allen der oben genannten 4 Kategorien enthalten. PasswordValidityDays – festgelegt die Geltungsdauer von Kennwörtern. Wenn ein Kennwort abgelaufen ist, fordert den Benutzer bei der Anmeldung für die Registrierung eines neuen Kennworts. Login ist nicht möglichohne ein neues Passwort. Wenn diese Eigenschaft 0 ist, bleiben die Kennwörter auf unbestimmte Zeit gültig. PathToApplicationLogo Pfad /VfxLoader;component/Icons/Icon128.png zur Anwendung Logo. Standardwert: RelogonQuit – bestimmt, ob der Browser geschlossen werden soll, wenn der Benutzer klickt auf das LoginDialogfeld abbrechen. RequiredFieldInitStyle - dies Eigenschaft legt den Stil der die erforderlichen Felder. Der Standardwert ist "Erforderlich". Andere benutzerdefinierten Formatvorlagen können implementiert werden. RequiredFieldFailureStyle - diese Eigenschaft legt den Stil die Pflichtfelder fest, wenn sie leer sind und speichern initiiert wird. Der Standardwert ist "RequiredInvalidOther benutzerdefinierte Formatvorlagen implementiert werden können. RuntimeLocalization wenn der Wert dieser Eigenschaft auf True festgelegt ist, die Anwendungslokalisierung führt zur Laufzeit. Alle Text angezeigt werden zur Laufzeit von der Vfxmsg-Tabelle gelesen und in der ausgewählten Sprache angezeigt. Wenn der Wert dieser Eigenschaft auf False festgelegt ist, werden keine Texte aus Tabelle Vfxmsg zur Laufzeit gelesen. SaveFormLayoutResolutionDependent - definiert, sollte das Layout des Formulars je nach Auflösung von der Benutzer gespeichert werden soll. ShowFilterActivatedInFormCaption - gibt an, ob die Nachricht in Formulartitel angezeigt wird, wenn ein Filter angewendet wird. ShowNTLogonFieldInUserManagement - Wenn true wird Ntlogonfield in Benutzerliste angezeigt. ShowIntroForm – legt fest, ob der Begrüßungsbildschirm angezeigt werden soll. WorkAliasRecordsLimit – gibt die maximale Anzahl der zu ladenden Datensätze an. WorkingArea – Arbeitsbereich. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Formulare Formulare haben Eigenschaften, mit denen das Verhalten des Formulars gesteuert werden kann. Eigenschaften Eigenschaften von Formularen sind in der Datei mit der Namenserweiterung .xaml.cs des Formulars angegeben. AskToSave = true; Wenn der Wert dieser Eigenschaft auf true gestellt ist, wird der Anwender gefragt ob Änderungen gespeichert werden sollen, wenn versucht wird das Formular zu schließen und nicht gespeicherte Änderungen vorhanden sind. Wenn der Wert dieser Eigenschaft auf true gestellt ist, werden Änderungen ohne Rückfrage gespeichert. AutoEdit = true; Wenn der Wert dieser Eigenschaft auf true gestellt ist, sind die Steuerelemente eines Formulars enabled. Die Bearbeitung der Daten kann unmittelbar begonnen werden. Wenn der Wert dieser Eigenschaft auf false gestellt ist, sind die Steuerelemente eines Formulars disabled. Wenn der Anwender die Daten bearbeiten will, muss er zunächst auf die Schaltfläche „Bearbeiten“ klicken um das Formular in den Bearbeitungsmodus umzuschalten. Dabei wird der Status der Steuerelemente auf enabled gesetzt. AutoResizeControl = true; Wenn der Wert dieser Eigenschaft auf true gestellt ist, kann die Größe des Formulars zur Laufzeit vom Anwender geändert werden. InitialHeight = 295; In dieser Eigenschaft wird die Höhe des Formulars angegeben. InitialWidth = 538; In dieser Eigenschaft wird die Breite des Formulars angegeben. MinButton = true; Wenn der Wert dieser Eigenschaft auf true gestellt ist, wird in der Titelzeile des Formulars eine Schaltfläche zum Minimieren des Formulars angezeigt. MultiInstance = true; Wenn der Wert dieser Eigenschaft auf true gestellt ist, kann das Formular mehrmals gestartet werden. ReportName = "CustomersTemplate.xaml"; In dieser Eigenschaft kann der Name einer Berichtsvorlage angegeben werden. Wenn der Wert dieser Eigenschaft leer ist, wird zur Laufzeit ein Bericht basierend auf den Spalten des DataGrid des Formulars generiert. Begrenzung der geladenen Datensätze Zum Mengenbeschränkung des geladenen Datensätze kann die Eigenschaft WorkAlliasRecordsLimit verwendet werden. Die Einschränkung kann auf die Anwendung Objekt als auch als an die Controller der einzelnen Formulare angewendet werden. Werte von 1 bis die gewünschte Anzahl der geladenen Datensätze können auf diese Eigenschaft festgelegt werden. Es gibt auch spezielle Werte. -1 ist auf die Eigenschaft festgelegt, wenn es keine Verpflichtung für die Beschränkung der Menge gibt. Anders gesagt werden alle Datensätze geladen. Wenn 0 auf die Controller-Eigenschaft festgelegt ist, gilt die Beschränkung des Application-Objekts als Standard. Wenn 0, auf die-Eigenschaft des Application-Objekts festgelegt ist gilt die gleiche Beschränkung als bei -1(Alle Datensätze sind geladen). Jede Beschränkung der Controller eines Formulars, überschreibt die Beschränkung des Application-Objekts. Die folgende Tabelle fasst alle möglichen Zustände: VfxAppObject.WorkAliasRecordsLimit= -1 0 Beliebige Anzahl b >0 Controller.WorkAliasRecordsLimit= Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH -1 Alle Datensätze wird geladen Alle Datensätze wird geladen Alle Datensätze wird geladen 0 Alle Datensätze wird geladen Alle Datensätze wird geladen Anzahl b Datensätze wird geladen Beliebige Anzahl a > 0 Anzahl a Datensätze wird geladen Anzahl a Datensätze wird geladen Anzahl a Datensätze wird geladen Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Benutzeranmeldung und Mandantenauswahl Die Anwendung kann mit verschiedenen Mandantendatenbanken arbeiten. "Client" ist eine Datenbank mit spezifischen Struktur und Logik. Es gibt zwei Möglichkeiten Clients festzulegen, die die Anwendung verwenden können. Die erste Möglichkeit ist mittels der Config.vfx-Datei und COM-Server, die die Anwendung verwendet. Die zweite Möglichkeit ist einen Client in der Datei web.config einzufügen. Die Clients, die in eine der genannten Dateien Beschreibung haben, sind durch die Query-Methode GetAvailableClients in VfxSystemDomainService anerkannt. Diese Methode geben alle aktiven Clients, die die Anwendung verwenden kann. Die Reihenfolge der Extraktion der Clients ist wichtig. Zuerst werden alle Clients aus "Web.config" berücksichtigt und danach - alle Clients aus der Config.vfx Datei. GetAvailableClients Gibt Typ IQeruable <vfxcliententry>.Die Vfxcliententry-Klasse enthält Informationen zum Namen des Clients, Verbindungen Name (für Business und Vfx-Tabellen), Informationen zur Datenbank und Verfügbarkeit, und wenn den COM-Server verwendet werden oder nicht. Wenn keine Clients zur Verfügung stehen, wird die folgende Meldung angezeigt: Anmeldeverhalten Silverswitch unterstützt 3 verschiedene Login-Verhalten: • Kein Login – Benutzerauthentifizierung erzwungen • Optionaler Login – es ist möglich, die Anwendung ohne Benutzerauthentifizierung zu starten, aber es ist auch möglich, später durch VfxLoginDialog anzumelden. • Login am Anfang – Authentifizierung beim Starten der Anwendung. Ändern Sie den Wert der LoginBehaviorEigenschaft in VfxAppObject um Login Verhalten zu wählen. Diese Eigenschaft ist vom Typ Enum und hat den Namen LoginBehaviors. Die möglichen Werte sind: • LoginBehaviors.NoLogin • LoginBehaviors.OptionalLogin –Standardwert für eine neue Anwendung • LoginBehaviors.LoginAtStartUp Eine weitere Eigenschaft im VfxAppObject, die mit dem Login-Verhalten-Objekt zu tun hat, ist RelogonQuit. Mögliche Werte und die Funktion, die sie veranlassen werden, werden später in diesem Dokument beschrieben. Anmeldeverhalten– NoLogin Diese Wert bedeutet, dass die Anwendung keine Benutzerauthentifizierung unterstützt. Beim Anwendungsstart sollte ClientDialog erscheinen (wenn mehr als ein aktiver Client verfügbar ist). Nachdem der Benutzer eine Datenbank ausgewählt hat, startet die Anwendung und der Benutzer kann seine Arbeit fortsetzen. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH In diesem Fall ist Relogin-Button nicht verfügbar. Der Benutzer kann keine andere Clients zur Laufzeit auswählen. • Cancel button – Der Dialog wird geschlossen und die Anwendung beendet. Wenn RelogonQuit auf „true“ festgelegt ist, versucht die Anwendung den Benutzer-Browser zu schließen. • OK button –Der Benutzer wählt Client und die Anwendung setzt mit der Eröffnung des VfxMainPage und VfxOpenDialog fort. Die nächste Abbildung zeigt das Ablaufdiagramm nach dem die Anwendung funktioniert, wenn LoginBehavior auf NoLogin festgelegt ist. Anmeldeverhalten – LoginAtStartup Der Benutzer muss sich beim Start der Anwendung identifizieren. Der Client Auswahl-Dialog sollte vor dem Login-Dialogfeld angezeigt werden. Es ist möglich nur das Login-Dialogfeld angezeigt werden, wenn die Anwendung nur über einen aktiven Client verfügt. • Abbrechen – das Dialogfeld wird geschlossen, und die Anwendung wird nicht mehr funktionieren. Wenn RelogonQuit auf „true“ festgelegt ist, versucht die Anwendung den Benutzer-Browser zu schließen. • OK – die Anwendung wird für gültigen Benutzernamen und Kennwort überprüfen. Wenn Authentifizierungsdaten gültig sind, wird das Dialogfeld schließen. Die Anwendung setzt mit der Eröffnung des VfxMainPage und VfxOpenDialog fort. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Die Abbildung zeigt das Ablaufdiagramm der Anwendung, wenn LoginBehavior auf LoginAtStartUp festgelegt ist. Mit dieser Einstellung kann der Benutzer wieder in einer anderen Datenbank mit anderen Benutzernamen einloggen. Dazu muss der Benutzer auf der RelogButton klicken. Er befindet sich auf der Symbolleiste. Wenn der Benutzer auf RelogButton klickt, wird der VfxClientDialog angezeigt und nachdem wird dieser VfxLoginDialog wie beim Startup angezeigt. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Die Abbildung veranschaulicht die Funktionsweise der Anwendung, wenn der Benutzer auf RelogButton in der Symbolleiste klickt. Anmeldeverhalten – OptionalLogin Diese Option ist ein bisschen komplizierter als die vorherigen beiden. Am Anfang wird die Anwendung mit einem öffentlichen Client gestartet. Der öffentliche Client ist der erste Client für die Anwendung. Es ist möglich dieser Client nicht verfügbar zu sein und in diesem Fall beendet die Anwendung. Das Optionaler Login-Verhalten hat drei Fälle: Erster Fall: Die Anwendung beginnt mit einem öffentlichen Client und der Benutzer klickt auf RelogButton. LoginDialog erscheint. Der Benutzer authentifiziert sich an den öffentlichen Client. Nach erfolgreicher Authentifizierung kann der Benutzer weiterhin mit dem öffentlichen Client funktionieren. Zweiter Fall: Der Benutzer wird an den öffentlichen Client authentifiziert. Er klickt auf RelogButton und VfxClientDialog zeigt (wenn mehrere Clients sind). Nach der Client Auswahl wird VfxLoginDialog geöffnet werden. Der Benutzer authentifiziert sich am ausgewählten Client und setzt seine Arbeit mit diesem Client fort. Dritter Fall: Der Benutzer hat einen anderen Client als bei den öffentlichen Client ausgewählt und ist schon authentifiziert (der Fall 2 ist abgeschlossen). Er klickt auf den RelogButton. Der Benutzer kann jetzt anderen Clientwählen und zu dem er authentifizieren kann. Bitte beachten Sie, dass der Benutzer auf Abbrechen von VfxLoginDialog oder VfxClientDialog jederzeit klicken kann. In diesem Fall wählt die Anwendung einen öffentlichen Client und der Benutzer kann weiterhin seine Arbeit ohne Authentifizierung fortsetzen. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Die Abbildung zeigt das Ablaufdiagramm der Anwendung und RelogButton für LoginBehavior mit dem Wert OptionalLogin. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Ausführung von VFP Code In allen Silverlight Client Projekten kann VFP Code mithilfe von GUINEU ausgeführt werden. GUINEU ist eine Laufzeitumgebung zur Ausführung von mit VFP kompilierten Programmdateien Die GUINEU Laufzeitumgebung befindet sich in der Datei vfx.guineu.runtime.dll. Diese DLL ist in das Projekt VfxGuineuRuntime. In diesem Projekt befindet sich außerdem die Klasse VfxGuineu.cs mit deren Hilfe die Funktionalität von GUINEU verwendet wird. Der Programmcode muss mit der Entwicklungsumgebung von VFP erstellt werden. Die kompilierte FXP Datei muss in das jeweilige Silverlight Projekt eingeschlossen werden. Es ist empfehlenswert auch die PRG Datei dem Silverlight Projekt hinzuzufügen. Durch einen Doppelklick auf die PRG Datei im Projektmappen-Explorer kann VFP gestartet und die PRG Datei bearbeitet werden. Um GUINEU in einer C# Klasse verwenden zu können, muss ein Feld vom Typ VfxGuineu hinzugefügt werden. Der Instanziierung wird als Parameter der Name der kompilierten VFP Programmdatei mitgegeben. private readonlyVfxGuineu _fox = newVfxGuineu("Orders.FXP"); Der Aufruf von Funktionen in der VFP Programmdatei ist mit einer Zeile C# Code möglich. <Rückgabewert> = _fox.Do("<Name der Funktion>", <optionale Parameter>, ...); Die Auswertung des Rückgabewerts ist optional. Es können so viele Parameter übergeben werden, wie als Parameter von der VFP Funktion akzeptiert werden. Parameter können von beliebigem Typ sein. Es ist auch möglich Objekte aus der Silverlight Benutzeroberfläche als Parameter zu übergeben. Die Eigenschaften von Objekten stehen in der VFP Funktion zur Verfügung und können gelesen und geschrieben werden. privatevoid xpgfPageFramePage1txtShiptoname_GotFocus(objectsender, System.Windows.RoutedEventArgs e) { _fox.Do("ShipToName_GotFocus", txtTooltip); } privatevoid xpgfPageFramePage1txtShiptoname_TextChanged(objectsender, System.Windows.Controls.TextChangedEventArgs e) { OnEdit(); _fox.Do("Validate", xpgfPageFramePage1txtShiptoname, xpgfPageFramePage1edtShiptoaddress, chkSpeichern); } privatevoid xpgfPageFramePage1txtOrderdate_LostFocus(objectsender, System.Windows.RoutedEventArgs e) { OnEdit(); varorderDate = ((orders)ViewModel.WorkAliasCollection.CurrentItem).orderdate; txtDelivery.Text = _fox.Do("Lieferdatum", orderDate); } Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Action Button Mithilfe der VfxActionButton können VFP Prozeduren vom COM-Server ausgeführt werden. Der Name der Prozedur und Parameter werden auf Eigenschaften des VfxActionButton festgelegt. Wie im folgenden Beispiel können Werte auf diese Eigenschaften in XAML festgelegt werden. Binding kann auch verwendet werden. Das Ergebnis ist deserialisiert und auf die OperationResult-Eigenschaft des VfxActionButton gesetzt. Es trägt den Ergebnis der Prozedurausführung sowie Fehlercode und Nachricht, falls vorhanden. Operationen mit dem Ergebnis können im Handler des OperationResultLoaded-Event ausgeführt werden. Beispiel: <VfxControl:VfxActionButton x:Name="btnAction" Content="Proper" ProcedureParmaters="{Binding Path=Customers.CurrentItem.customername,Mode=OneWay}" ProcedureName="proper" OperationResultLoaded="btnAction_OperationResultLoaded /> Und hier ist ein Beispiel für den OperationResultLoaded-Eventhandler in der CS-Datei des gleichen Formulars: privatevoidbtnAction_OperationResultLoaded(object sender, EventArgs e) { if (string.IsNullOrEmpty(btnAction.OperationResult.errormessage)) { ((customers)((CustomersViewModel)ViewModel).Customers.CurrentItem). customername = btnAction.OperationResult.result; OnEdit(); } else { thrownewException(btnAction.OperationResult.errormessage); } } Statt der Funktion proper() kann jede andere VFP Funktion verwendet werden. ProcedureName Der Eigenschaft ProcedureName wird der Name der Methode des COM Servers zugewiesen. Bei einem Klick auf den Button wird die hier angegebene Methode ausgeführt. Es kann sich bei dem hier angegebenen Namen um eine VFP Funktion, wie hier im Beispiel PROPER(), den Namen einer Methode des COM Servers oder um den Namen einer Programmdatei handeln, die vom COM Server zur Laufzeit geladen wird. Der Vorteil in der Verwendung von Programmdateien liegt darin, dass Änderungen im Programmcode gemacht werden können, ohne dass der COM Server aktualisiert oder neu registriert werden muss. Durch die Verwendung von externen Programmdateien können auch neue VFP Funktionen aus einer Silverlight Anwendung genutzt werden, ohne dass der COM Server neu erstellt und neu registriert werden muss. ProcedureParameters In dieser Eigenschaft können optionale Parameter der Methode angegeben werden. OperationResultLoaded Der Aufruf des COM Servers erfolgt asynchron. In der Eigenschaft OperationResultLoaded wird der Name der Methode der aktuellen C# Klasse angegeben, die aufgerufen wird, wenn die Ausführung der COM Server Methode beendet ist. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Parameterstruktur und Übergabe von Parameter Wenn ein Formular Zugriff auf Daten über COM (VFP-Datenbanken) oder SQL Server braucht, muss es an die Servicemethoden (clientseitig Queries genannt) Parameter übergeben. Die Parameter sind Instanzen der VfxQueryParameter-Klasse. Die VfxQueryParameter-Klasse hat Konstruktoren mit 2, 3 oder 4 Parametern die Werte der folgenden Eigenschaften festlegen: • ParameterName • Value • LogicalOperator • TypeName Betrachten Sie die folgende Deklaration eine VfxQueryParameter Konstruktor: publicVfxQueryParameter(stringparameterName, string value, stringlogicalOperator, stringtypeName). und publicVfxQueryParameter(stringparameterName, string value) Das erklärt wie man eine Instanz von VfxQueryParameter erzeugt. Die Instanzen sind zusammen in einer Liste gestapelt und in einem VfxParameter Manager-Object. VfxParameterManager ist verantwortlich für die Serialisierung, Parameterauswahl, Zusatz, Änderung und andere Funktionen in Bezug auf Parameter. Betrachten Sie den folgenden Codeabschnitt aus der ViewModel eines Formulars: publicclassOrderscaViewModelBase :ViewModel<orders> { privateVfxPagedCollectionView _products; publicOrderscaViewModelBase(IDataFormProperties form) : base(newVFPizzaSilverlightDomainContext()) { var parameters = newList<VfxQueryParameter> { newVfxQueryParameter("@order", orderid", "", "orders"), newVfxQueryParameter("@order", "orderid", "", "orderdetails"), newVfxQueryParameter("@order", "productid", "", "products"), newVfxQueryParameter("customerid", "", "or", "orders"), newVfxQueryParameter("orderid", "", "or", "orderdetails") }; ClientParameters = newVfxParametersManager(parameters); _products = newVfxPagedCollectionView(Context.EntityContainer.GetEntitySet<products>()); _form = form; LoadProducts(); } publicvoidLoadProducts() { Context.EntityContainer.GetEntitySet<products>().Clear(); Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH string pars = ClientParameters.GetSerializedParameters<products>(); //only parameters concerning “products” will be taken into account Context.Load<products>( ((VFPizzaSilverlightDomainContext)Context).GetProductsQuery(pars), loadOperation => { }, null); } Einige spezielle Parameternamen sind @TOP, @ ORDER und @WHERE. @ TOP wählt die ersten N Einträge. Hier ist ein Beispiel: newVfxQueryParameter("@TOP", recordsLimit.ToString(), "", tableName) @ORDER legt Kriterien, durch die die ausgewählten Einträge angeordnet werden. Beispiel: newVfxQueryParameter("@ORDER", "orderid", "", "orders") Hier sind alle Aufträge nach "Orderid" angeordnet. Beachten Sie, dass die TypeName (der letzte Feld) ist von der Typ "orders" und das bedeutet, dass diese VfxQueryParameter Instanz die Tabelle "orders" befasst. Der Logical Operator (das dritte Feld) nicht verwendet wird (gekennzeichnet durch leere Zeichenfolge) da es nicht benötigt wird. @WHERE legt eine Where-Klausel in das zweite Feld (Value): newVfxQueryParameter("@WHERE", "orderid > 100", "", "orders") Die folgenden Operatoren können verwendet werden:(“=”;“<>”;“<”;“>”;”<=”;”>=”;IN;BETWEEN;LIKE) Die spezielle Parameter @ TOP, @ ORDER, @ WHERE können kombiniert werden, um eine mehr deskriptive Abfrage zu bilden. Dazu sollten sie in der gleichen Liste sein und dieselbe Tabelle betreffen. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Mehrsprachige Anwendungen Der VFX – Silverlight Wizard übernimmt die Lokalisierungseinstellungen von der migrierten VFX für VFP Anwendung. Lokalisierung zur Laufzeit Wenn nicht mit Lokalisierung zur Laufzeit gearbeitet wird, werden dennoch alle von VFX verwendeten Texte, zum Beispiel Bezeichnungen in Dialogen und Tooltips, zur Laufzeit aus der Tabelle vfxmsg gelesen. Im Gegensatz zu VFX für VFP werden in Silverswitch keine Includedateien mit Konstanten verwendet. Die Lokalisierungseinstellungen werden mit Eigenschaften des Anwendungsobjekts in der Datei VfxApplication – Controls\VfxAppObject.cs gemacht. RuntimeLocalization = true; Wenn der Wert dieser Eigenschaft auf true gesetzt ist, läuft die Anwendung mit Lokalisierung zur Laufzeit. LangID = "GER"; Wenn eine Anwendung ohne Lokalisierung zur Laufzeit arbeitet, wird mit dieser Eigenschaft die verwendete Sprache eingestellt. Wenn der Wert der Eigenschaft RuntimeLocalization auf true gesetzt ist, gibt der Wert dieser Eigenschaft die Sprache an, mit der die Anwendung gestartet wird. Der Wert der Eigenschaft LangID enthält die Abkürzung der verwendeten Sprache. Für jede verfügbare Sprache gibt es eine Spalte in der Tabelle Vfxmsg. Sprache Silverswitch Abkürzung Albanisch ALB Bulgarisch BUL Chinesisch (traditionell) CHT Chinesisch (vereinfacht) CHS Deutsch (Deutschland) GER Deutsch (Schweiz) CHD Englisch (UK) ENG Estnisch EST Finnisch FIN Französisch FRE Griechisch GRE Italienisch ITA Japanisch JPN Niederländisch NL Polnisch PL Portugiesisch POR Rumänisch RO Russisch RU Slovakisch SVK Spanisch ESP Tschechisch CZE Türkisch TR Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Es stehen nicht alle Texte in allen Sprachen zur Verfügung. Wenn mit Lokalisierung zur Laufzeit gearbeitet wird, kann die Liste der verfügbaren Sprachen in der Tabelle VfxLanguage eingestellt werden. In dieser Tabelle gibt es für jede Sprache einen Datensatz. Wenn in der Spalte IsActive True steht, steht diese Sprache in der Anwendung zur Verfügung. Die Auswahl der Sprache kann in einer Combobox im Anmeldedialog oder in einer Combobox in der Symbolleiste vorgenommen werden. Die eingestellte Sprache wird je Anwender gespeichert und bei der Benutzeranmeldung nach der Eingabe des Benutzernamens wiederherstellt. Beim Wechsel der Sprache werden auch die Regionaleinstellungen gesetzt. Dazu gehören Dezimaltrennzeichen, Datumsformat und andere Einstellungen. Wenn eine Anwendung ohne Lokalisierung zur Laufzeit arbeitet, sind die Comboboxen zur Auswahl der Sprache nicht sichtbar. Lokalisierung von Formularen Alle Formulare implementieren das Interface IVfxLocalization. Wenn das Formularereignis Loaded ausgeführt wird, wird die Methode InitializeLocalizationManager(stringlanguage) aufgerufen. Mit dieser Methode wird das Objekt VfxLocalizationManager instanziiert. Dieses Objekt durchsucht das Formular nach lokalisierbaren Objekten. Lokalisierbare Objekte verfügen über die Eigenschaft MessageId oder ToolTipMessageID. Betrachten Sie das folgende Beispiel eine vereinfachte Form mit drei Steuerelementen. <VfxObject:VfxForm x:Class="VfxClass" x:Name="frmClass" MessageID="CAP_FRMUSERLIST" Caption="User List" > <VfxObject:VfxGrid x:Name="LayoutRoot"> <VfxObject:VfxTabControl x:Name="xpgfPageFrame"> <VfxObject:VfxTabItem x:Name="xpgfPageFramePage1" Header="Edit" MessageID="CAP_EDIT" ToolTipMessageID="CAP_EDIT"> <VfxObject:VfxTextBlock x:Name="xpgfPageFramePage1lblUserAccess" Text="User Access" MessageID="CAP_LBLUSERACCESS"/> <VfxObject:VfxButton Content="OK" Name="button1" Click="button1_Click" MessageID="CAP_CMDOK"/> </VfxObject:VfxTabItem> </VfxObject:VfxTabControl> </VfxObject:VfxGrid> </VfxForm:VfxDataForm> Lokalisierung von MessageBoxen Um eine lokalisierte MessageBox zu zeigen, VfxStartUpFormBase.ShowVfxMessageBox-Methode aufzurufen. Silverswitch muss Venelina Jordanova, Uwe Habermann der Entwickler die © 2011 dFPUG c/o ISYS GmbH Es implementiert die VfxLocalizationManager.GetMessageValue-Methode als auch die VfxMessageBox.Show Methode um eine lokalisierte Meldungsfeld zu produzieren. Hier wird die Deklaration des ShowVfxMessageBox präsentiert und jeder seiner Parameter kurz erklärt. public void ShowVfxMessageBox(string message, string messageID, string caption, string captionID, VfxMessageBoxButtons buttonType, VfxMessageBoxTypes messageBoxType, int timeout, Action<VfxMessageBoxResults>callBack) Parameter: Message - der Text im Meldungsfeld angezeigt, wenn Wert für MessageID-Parameter in Vfxmsg-Tabelle nicht gefunden wird. MessageID - Konstante mit dieser ID in Datenbank-Tabelle Vfxmsg wird gesucht, und wenn gefundenals Nachrichtentext im Meldungsfeld verwendet. Caption - der Text in der Titelleiste des Meldungsfelds, angezeigt wenn Wert für CaptionID Parameter in Vfxmsg-Tabelle nicht gefunden wird. CaptionID - Konstante mit dieser ID in Datenbank-Tabelle Vfxmsg wird gesucht, und wenn gefunden als Beschriftung für VfxMessageBox verwendet. ButtonType - einer der VfxMessageBoxButtons-Werte, der angibt, welche Buttons im MessageBox angezeigt werden. Timeout - gibt die Anzahl der Millisekunden, nach denen das Meldungsfeld automatisch schließt. Callback - tritt auf, wenn das Meldungsfeld geschlossen wird. Sie können das Ergebnis von das Meldungsfeld mit dieser Aktion erhalten. Betrachten Sie das folgende Beispiel: ShowVfxMessageBox("Are you sure you want to delete this file?", "MSG_DELETEFILE", "Delete", "CAP_CMDDELETE", VfxApplicationBase.VfxMessageBoxButtons.YesNo, VfxApplicationBase.VfxMessageBoxTypes.ExclamationPoint, 0, DeleteMessageResult); Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Pflichtfelder Pflichtfelder ermöglichen dem Entwickler Formulare mit Feldern zu erstellen, die der Benutzer auszufüllen muss. Die Anforderung des Benutzers, einen Eintrag mit leeren Pflichtfeldern zu speichern, wird abgelehnt. In diesem Fall ändert sich die Rahmenfarbe von Grün in Rot. Ein Meldungsfeld wird auch angezeigt. Um dieses Verhalten zu implementieren, der Entwickler haben die InitializeValues-Methode der cs-Datei des Formulars die folgende Zeile hinzu. Um dieses Verhalten zu implementieren, fügt der Entwickler die InitializeValues-Methode von der Cs-Datei des Formulars die folgende Zeile hinzu. Betrachten Sie die Implementatierung. private void InitializeDefaultValues() { … RequiredFields=”;Orders.CurrentItem.orderdate;Orders.CurrentItem.customerid;" … WorkAlias = "Orders"; } Die RequiredFields-Eigenschaft kann einebeliebige Anzahl von durch Semikolon getrennten Feldnamen enthalten. Die Steuerelemente, die an diese Felder gebunden sind, werden automatisch zu Pflichtfeldern. Es folgt die Beschreibung der Implementation der Steuerelemente aus dem diskutierten Formular in das Xaml des Formulars: <VfxControl:VfxPickField x:Name="xpgfPageFramePage1cntCustomerid" TableName="{Binding Path=Customers, Mode=TwoWay}" FieldList="customerid;customername" FieldTitle="Kundennummer;Kundenname" ReturnExpr="customerid" ReturnExprDesc="customername" SelectedItem = "{Binding Path=Orders.CurrentItem.customers, Mode=TwoWay}"> Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH <VfxObject:VfxDatePicker x:Name="xpgfPageFramePage1cntOrderdate" SelectedDate="{Binding Path=Orders.CurrentItem.orderdate, Mode=Twoway}"> Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Verwendung von Bilddateien In Silverswitch Anwendungen können Bilddateien mit den Formaten PNG und JPG verwendet werden. VfxImage Control kann zum Zeigen von Bildern in den Bau von Formen verwendet werden. Die folgenden Eigenschaften unterscheiden das VfxImage-Steuerelement vom standardmäßigen Silverlight Image-Steuerelement. VfxSourcePath – der Quell-Pfad kann auf dieser Eigenschaft festgelegt werden. Der Pfad enthält keine Dateinamen. Betrachten Sie das folgende Beispiel einen gültigen Pfad: ".../UploadedFiles/" In unserem Fall ist "Uploadedfiles" ein Ordner auf der gleichen Ebene wie der ClientBin-Ordner (wo es sich die Xap-Dateien der Anwendung auf dem Server befinden) VfxSourceFileName – der Dateiname kann auf dieser Eigenschaft festgelegt werden. Beispiel Deklaration des VfxImage Steuerelement in XAML: <VfxObject:VfxImage Name="vfxImage1" VfxSourcePath="../UploadedFiles/" VfxSourceFileName="margarita.jpg" MessageID="MSG_PLEASEWAIT"/> Beachten Sie, dass das VfxImage-Steuerelement auch über die MessageID-Eigenschaft verfügt. Eine lokalisierte Meldung zusammen mit Busy-Anzeiger kann beim Laden des Bildes vom Server an den Client angezeigt werden. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Datenzugriff Im Datenzugriff steckt ein erhebliches Optimierungspotenzial. Während in Netzwerkanwendungen die vom Server zum Client übertragene Datenmenge nur von untergeordneter Bedeutung ist, ist in Internetanwendungen die Übertragung möglichst kleiner Datenmengen von großer Wichtigkeit. Die Übertragungsgeschwindigkeit ist im Internet in der Regel um ein Vielfaches langsamer, als in Netzwerkanwendungen. Während in Netzwerkanwendungen die Benutzung einer Tabelle und die Präsentation aller Datensätze in einem Formular für den Anwender in vielen Fällen möglich ist, ist dies in Internetanwendungen nur dann möglich, wenn sich in einer Tabelle sicher nur wenige Datensätze befinden und die Strukturgröße eines Datensatzes nicht besonders groß ist. Für Internetanwendungen ist es in der Regel erforderlich, dass Formulare zunächst ohne Daten geladen werden und der Benutzer möglichst genau eingeben muss, welche Daten er sehen will. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH Weitere Informationen Aktuelle Informationen zu Silverswitch sind auf der Webseite http://www.Silverswitch.de zu finden. Forum, Newsgroup Unterstützung zu Silverswitch ist in der Newsgroup news://news.dfpug.net erhältlich. Auf die Newsgroup kann auch über die Startseite von Silverswitch zugegriffen werden. Technische Dokumentation In Silverswitch ist eine technische Dokumentation enthalten. Aus der technischen Dokumentation ist die Vererbung zwischen den einzelnen Klassen ersichtlich. Es sind alle Klassen, Eigenschaften und Methoden beschrieben. Silverswitch Venelina Jordanova, Uwe Habermann © 2011 dFPUG c/o ISYS GmbH