VFX13 Silverlight Workshop 2011 - dFPUG

Werbung
VFX13 Silverlight Workshop
Venelina Jordanova
Uwe Habermann
[email protected]
[email protected]
Wer spricht denn da?
* Venelina Jordanova
* Master Degree in CS
* FoxPro Entwicklerin
seit FPD 2.0
* MCP für SQL Server
und Application
Architecture
* Uwe Habermann
* Diplom-Informatiker
* FoxPro Entwickler
seit FPW 2.5
* MCP für Visual FoxPro
V&U Ltd. – We and You
* Geschäftsführer: Venelina & Uwe
* www.VandU.eu
* [email protected]
* Entwicklung in Varna, Bulgarien
* Projekte mit VFP und Silverlight
* Visual Extend, Silverswitch
* Hohe Qualität zu günstigen Preisen
* Microsoft Silverlight Partner
Was steht an?
* Donnerstag
* 09:00 – 09:15 Begrüßung, Kaffee
* 09:15 – 11:00
* 11:15 – 13:00
* 14:15 – 16:00
* 16:15 – 18:00
Was steht an?
* Freitag
* 09:00 – 09:15 Begrüßung, Kaffee
* 09:15 – 11:00
* 11:15 – 13:00
* 14:15 – 16:00
* 16:15 – 18:00
Was steht an?
* Vorbereitung von VFX für VFP
Anwendungen auf die Migration nach
Silverswitch
* Migration einer VFX Beispielanwendung
* Datenzugriff in Silverlight
Anwendungen
* Bearbeitung von Silverlight Formularen
in Visual Studio
Was steht an?
* Geschäftslogik mit GUINEU
implementieren
* Verwendung eines VFP COM Servers
* Eigenschaften des Anwendungsobjekts
* Eigenschaften von Formularen
* Programmierung mit C#
Was steht an?
* Silverlight Anwendungen als Desktop
Anwendungen einsetzen
* Veröffentlichung der Anwendung auf
einem Internet Server
Installation
* Visual FoxPro 9, VFX 13 Build 1707
* Visual Web Developer 2010 Express
oder Visual Studio 2010
* Silverlight 4 Tools
* Silverlight 4 Toolkit
* WCF RIA Services 1 SP 1
* Silverswitch 1 Build 0515
* Ggf. SQL Server Management Studio
Installation
* Get Silverswitch aus VFX 13 Menü
* Ausführung
* Startseite einstellen
* „Silverswitch Version 01.00.0515“
Silverswitch
* Rapid Application Development
Entwicklungsumgebung für Silverlight
* Silverswitch.sln
* Migration von VFP Anwendungen
* VFX – Silverlight Wizard
* Visual Extend für VFP in C# nachgebaut
Silverswitch
* Datenbankformate
* VFP Datenbanken
* SQL Server Datenbanken
* MySQL, ADS, DB2, Oracle, …
Silverswitch
* Programmierung
* C#
* VFP auf der Serverseite mit COM Server
* Komfortabler Methodenaufruf auch von der
Clientseite
* VFP auf der Clientseite mit GUINEU
* Ausführung auch auf Mac und künftigen
Plattformen
Silverswitch
Was ist drin?
* Vorlageanwendung Silverswitch.sln
* Startseite
* Assistenten
* Update Project
* VFX – Silverlight Wizard
* In VFX für VFP enthalten
Das erste Silverswitch Projekt
* Neues Projekt
* Silverswitch, Silverswitch
* Nicht ausführen!
* Nicht erstellen!
Voraussetzungen für den
VFX – Silverlight Wizard
* Datenbank
* Primärschlüssel für alle Tabellen
* Empfohlen: Primärindex auf Integer Autoinc
* Datenumgebung
* Tabellen
* Cursoradapter
* Keine Ansichten
* Kein programmatisches Öffnen von Tabellen
Voraussetzungen für den
VFX – Silverlight Wizard
* Alle Steuerelemente im Formular
* Kein nachträgliches instanziieren von
Objekten zur Laufzeit
* VFP Projekte
* Basisklassen der Steuerelemente werden
migriert
* VFX Projekte
* VFX Klassen der Steuerelemente werden
migriert
Voraussetzungen für den
VFX – Silverlight Wizard
* Code in VfxBusinessLogic.vcx
* wird in COM Server migriert
VFX – Silverlight Wizard
* VFPizza13 in VFP öffnen
* VFX – Silverlight Wizard starten
VFX – Silverlight Wizard
* Was macht dieser Assistent?
* Erläuterung
* VFP COM Server wird erstellt
* Administratorrechte erforderlich!
VFX – Silverlight Wizard
* Auswahl einer Silverswitch Projektmappe
VFX – Silverlight Wizard
* Datenhaltung
* ADO.NET Entity Data Model erstellen
* Domänendienst erstellen
* VFP COM Server erstellen und registrieren
VFX – Silverlight Wizard
* Einstellungen des Anwendungsobjekts
* VFX Formulare in Vfxfopen eintragen
VFX – Silverlight Wizard
* Auswahl der Formulare
* Als in das Projekt eingeschlossene
Formulare werden standardmäßig migriert
* VFX*.scx Formulare werden nicht migriert
VFX – Silverlight Wizard
* Projektnamen für Formulare
* Formulare können beliebig in Projekten
zusammengefasst werden
* Optimierung der Projektgröße und damit
der Downloadgröße und -zeit
VFX – Silverlight Wizard
* Auswahl der Formulareigenschaften
* Gestaltung wie in VFP -> alle
Eigenschaften übernehmen
* Hard-codierte Eigenschaften können
jedoch nicht von Designs überschrieben
werden
VFX – Silverlight Wizard
* Auswahl der Berichte
* Als in das Projekt eingeschlossene
Berichte werden standardmäßig migriert
VFX – Silverlight Wizard
* Fertig!
* Erfolgsmeldung
oder
Protokoll
* Test!
Eigenschaften der
Silverswitch Anwendung
* Vorbereiteter Rahmen für die Anwendung
* Begrüßungsbild
* Anmeldedialog optional
* Symbolleiste mit XAML Icons
* Data-driven Öffnen-Dialog
* Internet Anwendung
* Intranet Anwendung
Eigenschaften der
Silverswitch Anwendung
* Benutzeranmeldung
* Lokalisierung zur Laufzeit
* Benutzerverwaltung
* Benutzerrechte
* Benutzergruppen
* MDI Benutzeroberfläche
Eigenschaften der
generierten Formulare
* Autoedit
* Neu, Ändern, Löschen, Speichern,
Rückgängig
* Navigation
* Sortierung und inkrementelle Suche
im DataGrid
* Resizable, minimieren, maximieren
Eigenschaften der
generierten Formulare
* Parent/Child-Beziehungen
* Behandlung von Aktualisierungskonflikten
* Filterdialog
Eigenschaften der
generierten Berichte
* Seitenkopf
* Detailbereich
* Seitenfuß
Eigenschaften der
generierten Berichte
* Bezeichnungen
* Textfelder
* Linien
* Rechtecke
* Abgerundete Rechtecke
Eigenschaften der
generierten Berichte
* Nicht migriert
* Datenbindung von Bildern
* PrintWhen
* Code
Was macht der
VFX – Silverlight Wizard?
* Formular dem Projekt hinzufügen
* Eintrag in Vfxfopen
* Migration von Formularen
* MVVM Model-View-ViewModel
* Trennung von Design und Programmierung
Was macht der
VFX – Silverlight Wizard?
* Beispiel
* Customer.xaml
* Layout
* Customer.xaml.cs
* Einstellungen
* CustomerViewModel.cs
* Für eigenen Code
* CustomerViewModelBase.cs
* Generierter Code
Was macht der
VFX – Silverlight Wizard?
* Customer.xaml
* Beschreibung der Benutzeroberfläche
* Kann Animationen enthalten
* Kann Verhalten enthalten
* Bearbeitung mit Expression Blend möglich
* Designer darf keine Steuerelemente entfernen
* Designer darf keine Namen ändern
Was macht der
VFX – Silverlight Wizard?
* Customer.xaml.cs
* Code zur Instanziierung
* Formulareigenschaften
Was macht der
VFX – Silverlight Wizard?
* CustomerViewModel.cs
* Eigener Code
* Erweiterung der Funktionalität
* Wird vom VFX – Silverlight Wizard
nicht überschrieben!
Was macht der
VFX – Silverlight Wizard?
* CustomerViewModelBase.cs
* Generierter Code
* Funktionalität des Formulars
* Parent/Child Verhalten
* Wird vom VFX – Silverlight Wizard
überschrieben!
Was macht der
VFX – Silverlight Wizard?
* Generiert VFP COM Server
* Datenzugriff auf VFP Datenbank
mit Cursoradaptern
* Config.vfx mit vollständigem Pfad
* Mit Manage Config.vfx prüfen!
* VfxBusinessLogic.vcx
Datenzugriff
* Silverswitch Client kommuniziert mit
Domänendienst auf der Serverseite
Datenzugriff
* VFX – Silverlight Wizard generiert
* Domänendienst
* ADO.NET Entity Data Model
* ADO.NET Entity Data Model Treiber stellt
Verbindung zur Datenbank her
* Verbindungszeichenkette in Web.Config im Projekt
Silverswitch.Web
* Inhalt von Web.config prüfen!
Datenzugriff
* VFX – Silverlight Wizard generiert
* Domänendienst
* VFP COM Server
* Cursoradapter
* VFP Datenbank
* SQL Server Datenbank
* Andere ODBC Datenquellen
* Konfiguration in Config.vfx
Mandantenauswahl
* Auswahl der Datenbank beim Start
* Zeigt Verbindungen aus Web.config
* Zeigt Verbindungen aus Config.vfx
* Anzeige, wenn mehr als eine Datenbank
verfügbar ist
* Anzeige, wenn Benutzeranmeldung
erforderlich ist
* Anzeige, wenn Benutzer angemeldet ist
und Benutzerwechsel erfolgt
Anmeldeverhalten
* Keine Benutzeranmeldung
* Nur erste Datenbank verfügbar
* Optionale Benutzeranmeldung
* Anwendung startet mit erster Datenbank
* 1. Anmeldung erfolgt mit erster Datenbank
* Folgeanmeldung zeigt Mandantenauswahl
* Benutzeranmeldung erforderlich
* Mandantenauswahl erscheint beim Start
Datenzugriff
* VFX-Anwendung und SilverswitchAnwendung mit Zugriff auf die gleiche
Datenbank starten
* Aktualisierungskonflikte testen
Datenzugriff
* Kunden können mit VFX-Anwendung
weiterarbeiten
* Silverswitch-Anwendung läuft auf gleicher
Datenbank
XAML
* Extensible Application Markup Language
* Sprache zur Beschreibung von
Benutzeroberflächen
* Verwendet für
* Silverlight
* Windows Presentation Foundation
* Textformat wie XML
XAML Designer
* Visuelle Bearbeitung neu in
Visual Studio 2010
* Bearbeitung von XAML Code möglich
* Bearbeitung im Eigenschaftsfenster
XAML Designer
* Toolbox verwenden
* Enthält Silverlight Basisklassen
* Enthält Klassen aus geöffneter Projektmappe
* automatisches Hinzufügen von Namespaces
Aufbau einer XAML Datei
* Formularklasse VfxDataForm
* .xaml + .xaml.cs
* XML Namespaces
* Ggf. Child Formulare
* LayoutRoot
* Äußerer sichtbarer Container
* Steuerelemente
XAML
* Ein Steuerelement muss keinen Namen
haben
* Ein Name ist nur erforderlich, wenn
programmatisch darauf referenziert wird
* Jeder Name muss in einer XAML Datei
eindeutig sein
* Flache Architektur
* Keine Hierarchie
Steuerelemente
* Viele VFP Steuerelemente ähnlich auch in
Silverlight 4 verfügbar
* TextBox
* TextBlock (Label)
* Weitere Steuerelemente in
Silverlight 4 Toolkit
* NumericUpDown (Spinner)
* AutoCompleteBox (PickField)
Steuerelemente
VFP Basisklasse
Checkbox
Combobox
Commandbutton
Silverlight Steuerelement
CheckBox
ComboBox
Button
Container
Grid
Label
Grid
data:DataGrid
TextBlock
Optiongroup
Pageframe
Spinner
RadioButton
control:TabControl
inputToolkit:NumericUpDown
Eigenschaften
VFP
Backcolor
FontName
Comment
Silverlight
BackGround
FontFamily
<!-- -->
Tooltip
BackStyle
Enabled
ToolTipService.ToolTip
Opacity="0"
IsEnabled="False"
Visible = .F.
Scrollbars = 2
SpinnerLowValue
Visibility="Collapsed"
VerticalScrollBarVisibility="Auto"
Minimum
XAML Steuerelement
<VfxObject:VfxTextBox
Text="{Binding Path=Customers.CurrentItem.customername,
Mode=Twoway}"
InputMask="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
x:Name="xpgfPageFramePage1txtCustomername"
FontFamily="Arial"
FontSize="12"
MaxLength="50"
Height="24"
HorizontalAlignment="Left"
Margin="106,4,0,0"
Width="418"
TabIndex="2"
VerticalAlignment="Top"/>
Element zu Element Bindung
* Fast jede Eigenschaft kann an eine andere
Eigenschaft gebunden werden
Element zu Element Bindung
* Beispiel: Customers.xaml
* Slider steuert Breite einer TextBox
<VfxObject:VfxSlider
Name="vfxSlider1“
Maximum="418“
Minimum="20" />
* TextBox
Width="{Binding ElementName=vfxSlider1,
Path=Value}"
Brauche ich eine Controlsource?
Datenbindung
* Keine Controlsource
* An (fast) jede Eigenschaft möglich
Text="{Binding
Path=Customers.CurrentItem.customername,
Mode=Twoway}"
GUINEU
GUINEU?
* Verwendung von VFP Code in
Silverlight Client-Projekten
* Also im Browser beim Benutzer
* Läuft auch auf Mac und weiteren
künftig verfügbaren Plattformen
GUINEU
* Von Christof Wollenhaupt
* www.GUINEU.net
* VFP Laufzeitumgebung in C# entwickelt
* Angepasste Version für
Silverswitch Client Anwendungen
* Exklusiv in Silverswitch
* 1 DLL
* VFP Code aus FXP Datei ausführen
GUINEU
Was kann man damit machen?
* Geschäftslogik
* Steuerung der Silverlight
Benutzeroberfläche
* Aber:
* Keine VFP Benutzeroberfläche
* (Messagebox, Wait Window, …)
* Kein Dateizugriff
* Das sind keine Einschränkungen!
GUINEU
Integration in Silverswitch
* Wrapper-Projekt
* VfxGuineuRuntime
* FXP Datei
* Im Ordner VFPCode speichern
* Buildvorgang: Eingebettete Ressource
* PRG Datei (zur Bearbeitung mit VFP)
* Öffnen mit VFP als Standard
* Buildvorgang: keine
GUINEU
* Deklaration
using VfxGuineuRuntime;
private readonly VfxGuineu _fox =
new VfxGuineu("<Name>.FXP");
GUINEU
* Funktionsaufruf
_fox.Do("<Funktionsname>",
<Parameter 1>, <Parameter 2>, …);
* 1. Parameter ist Funktionsname
* Folgende Parameter werden an die
Funktion übergeben
GUINEU
* Parameterübergabe
* auch Objekte!
* Viele VFP Funktionen
* Viele VFP Befehle
* Keine Ausführung von C# Methoden
* Keine Child-Objekte ansprechbar
VFP aus VWD starten
* Projekt VfxGuineuRuntime
* Ordner VFPCode
* PRG Datei hinzufügen
* Rechtsklick, Öffnen mit…
* VFP als Standard einstellen
* Rechtsklick, Buildvorgang
* keine
* Einstellung in VFP
* Vor dem Speichern kompilieren
VFP aus VWD starten
* Projekt VfxGuineuRuntime
* Ordner VFPCode
* FXP Datei hinzufügen
* Rechtsklick, Buildvorgang
* Eingebettete Ressource
CheckBox steuert
TextBox.IsReadOnly
* XAML Code:
<VfxObject:VfxCheckBox
Content="ReadOnly"
Name="vfxReadOnlyCheckBox"
Click="vfxReadOnlyCheckBox_Checked"/>
CheckBox steuert
TextBox.IsReadOnly
* C# Code:
private void vfxReadOnlyCheckBox_Checked (object
sender, System.Windows.RoutedEventArgs e)
{
VfxCheckBox CheckBox = (VfxCheckBox)sender;
_fox.Do("ChangeReadOnly",
xpgfPageFramePage1txtCustomername,
CheckBox.IsChecked);
}
CheckBox steuert
TextBox.IsReadOnly
* VFP GUINEU Code:
FUNCTION ChangeReadOnly
LPARAMETERS toControl, tlReadOnly
toControl.IsReadOnly = tlReadOnly
GUINEU berechnet Lieferdatum
* XAML Code:
<VfxObject:VfxDatePicker SelectedDate="{Binding
Path=Orders.CurrentItem.orderdate, Mode=Twoway}„
x:Name="xpgfPageFramePage1cntOrderdate„
LostFocus=
"xpgfPageFramePage1txtOrderdate_LostFocus">
</VfxObject:VfxDatePicker>
<TextBox Name="txtDelivery" />
GUINEU berechnet Lieferdatum
* C# Code:
private void xpgfPageFramePage1txtOrderdate_LostFocus
(object sender, System.Windows.RoutedEventArgs e)
{
OnEdit();
var orderDate = ((orders)
ViewModel.WorkAliasCollection.CurrentItem).orderdate;
txtDelivery.Text = _fox.Do("Lieferdatum", orderDate);
}
GUINEU berechnet Lieferdatum
* VFP GUINEU Code:
Procedure Lieferdatum (ttOrderDate)
Local ldOrder, ldLiefer
ldOrder = Ttod(m.ttOrderDate)
ldLiefer = ldOrder + 3 && drei Tage Lieferfrist
Do case
Case Dow(m.ldLiefer,2) == 6 && Samstag
ldLiefer = m.ldLiefer + 2 && drauffolgender Montag
Case Dow(m.ldLiefer,2) == 7 && Sonntag
ldLiefer = m.ldLiefer + 1 && drauffolgender Montag
EndCase
Return ldLiefer
Speichern aus GUINEU
* XAML Code:
<VfxObject:VfxButton
Content=“Speichern“
Click="vfxButton1_Click" />
Speichern aus GUINEU
* C# Code:
private void vfxButton1_Click(object sender,
System.Windows.RoutedEventArgs e)
{
bool returnvalue;
returnvalue = _fox.Do("Speichern");
if (returnvalue)
this.OnSave();
}
Speichern aus GUINEU
* VFP GUINEU Code:
FUNCTION Speichern
* Beliebige Geschäftslogik
RETURN .T.
GUINEU
* Beispiele in VFPizza
* Kunden GUINEU
* Aufträge GUINEU
* Eigenschaft abfragen
* Eigenschaft setzen
* Speichern (indirekt, weil in C#)
Fragen?
VFP COM Server
* In jeder Silverlight Anwendung verfügbar
* Browser
* auf der Server Seite
* OOB mit erhöhter Vertrauensstellung
* auf der Server Seite
* auf der Client Seite
* Silverlight Client führt Methode in
VFP COM Server aus
VFP COM Server
* Ausführung aus FXP
* Ausführung aus APP
* Vorteile:
* COM Server muss nicht neu registriert werden
* IIS muss nicht neu gestartet werden
VFP COM Server
* Datenzugriff
* Cursoradapter
* VFP Datenbank
* SQL Datenbank
* Alle ODBC Datenquellen
*
*
*
*
MySQL
Oracle
DB2
…
* Verwendete Datenbank konfigurierbar
VFP COM Server
* Geschäftslogik
* Alles, was nicht visuell ist
VFP COM Server
* DEFINE CLASS
VFPizzaCOMDomainService AS Session
OLEPUBLIC
* Erstellen als „Multi-Thread COM Server
(DLL)“
* VFP9.exe muss explizit mit
Administratorrechten ausgeführt werden!
VFP COM Server
DEFINE CLASS
VFPizzaCOMDomainService AS Session OLEPUBLIC
PROCEDURE GetDateTime
RETURN TRANSFORM(DATETIME())
ENDPROC
VFP COM Server auf der
Server Seite verwenden
* „early binding“ in Visual Studio
* COM Server muss zur Entwicklungszeit
funktionsfähig sein
* Verweis auf COM Server muss dem
Server Projekt hinzugefügt werden
Action Button
* Programmatischer Aufruf von COM Server
Methode, Prozedur oder neue
Objektinstanz von der Clientseite
* Aufruf auch aus Button möglich
* Übergabe mehrerer Parameter möglich
* Übergabe von Daten als Parameter
möglich
Action Button
* VFP Code
* vfxbusinesslogic.vcx
* cexample.businesslogicexample
RETURN "This is the result of the business
logic example."
Action Button
* Customers.XAML
* VfxTextBlock hinzufügen
<VfxObject:VfxTextBlock
x:Name="lblActionResult" />
Action Button
* Customers.XAML
* VfxActionButton hinzufügen
<VfxControl:VfxActionButton
x:Name="cmdAction"
Content="Action"
ProcedureName="cexample.businesslogicexample"
OperationResultLoaded=
"cmdAction_OperationResultLoaded" />
Action Button
* Customers.cs
private void cmdAction_OperationResultLoaded(
object sender, EventArgs e)
{
lblActionResult.Text =
cmdAction.OperationResult.result.ToString();
}
Action Button - Umsatz
* Customers.XAML
* VfxTextBlock hinzufügen
<VfxObject:VfxTextBlock
x:Name="lblUmsatz" />
Action Button - Umsatz
* Customers.XAML
* VfxActionButton hinzufügen
<VfxControl:VfxActionButton
x:Name="cmdUmsatz" Content="Umsatz"
ProcedureName="cexample.GetTurnover"
ProcedureParameter="{Binding Path=
Customers.CurrentItem.customerid, Mode=OneWay}"
OperationResultLoaded=
"cmdUmsatz_OperationResultLoaded" />
Action Button - Umsatz
* Customers.cs
private void cmdUmsatz_OperationResultLoaded(
object sender, EventArgs e)
{
decimal UmsatzResult =
decimal.Parse(cmdUmsatz.OperationResult.result);
lblUmatz.Text = UmsatzResult.ToString();
}
Action Button - Umsatz
* VFP Code
* vfxbusinesslogic.vcx
* cexample.GetTurnover
Action Button - Umsatz
LOCAL loOrdersCA, lnTotalSum, lnCustomerID
lnCustomerID = IIF(TYPE("tnCustomerID") = "N", tnCustomerID, 0)
loOrdersCA = NEWOBJECT("cadataaccess")
loOrdersCA.DataSourceType = This.oVFPCom.cDataSourceType
loOrdersCA.DataSource = This.oVFPCom.cDataSource
loOrdersCA.SelectCmd =
"Select OrderDetails.Quantity*OrderDetails.Price as TotalSum " + ;
"From OrderDetails " + ;
"JOIN Orders On OrderDetails.OrderID = Orders.OrderID " + ;
"WHERE Orders.CustomerID = ?lnCustomerID"
loOrdersCA.Alias = "crsorderdetails"
loOrdersCA.CursorFill()
lnTotalSum = crsOrderDetails.TotalSum
USE IN crsOrderDetails
RELEASE loOrdersCA
RETURN lnTotalSum
Aufruf einer VFP Funktion
private void xpgfPageFramePage1cmdProper_Click(
object sender, RoutedEventArgs e)
{
VfxSystemDomainContext context =
new VfxSystemDomainContext();
EventHandler handler =
new EventHandler(ExecuteVFPCommand_Completed);
var ExecuteVFPCommand =
context.ExecuteCommandService("proper",
xpgfPageFramePage1txtCustomername.Text.ToString(),
VfxAppObject.CurrentConnectionInfo.ClientName);
ExecuteVFPCommand.Completed += handler;
}
Aufruf einer VFP Funktion
void ExecuteVFPCommand_Completed(
object sender, EventArgs e)
{
var result = sender as InvokeOperation<string>;
VfxCommandServiceResultBase ValueResult =
(VfxCommandServiceResultBase)VfxSerializer.
DeserializeObject<VfxCommandServiceResultBase>
(result.Value);
lblResult.Text = ValueResult.CommandServiceInfo.result;
}
Fragen?
Eigenschaften
* Eigenschaften
* Anwendungsobjekt
* Formulare
* Zahlreiche Eigenschaften aus VFX
auch in Silverswitch verfügbar
* Programmatisch zur Laufzeit ändern
* C#
* VFP
Eigenschaften des
Anwendungsobjekts
* Eigenschaften einstellen in
* VfxApplication\Controls\VfxAppObject.cs
* Aufzählungstypen
* VfxApplicationBase\Controls\Enums.cs
Aufzählungstypen des
Anwendungsobjekts
* LoginBehaviors
* NoLogin = 0,
* LoginAtStartup = 1,
* OptionalLogin = 2
* ErrorDetailLevels
* MessageOnly = 0,
* CallStackInformation,
* FullDetailedInformation
Eigenschaften des
Anwendungsobjekts
* Programmatisch zur Laufzeit setzen
using VfxApplication;
VfxAppObject.HideOpenDialog = true;
Eigenschaften von Formularen
* Eigenschaften einstellen in
* Formularname.xaml.cs
Eigenschaften von Formularen
* Programmatisch zur Laufzeit setzen
AskToSave = true;
Programmierung in C#
Warum C#?
* Als internationaler Industriestandard
anerkannt von European Computer
Manufacturers Association (ECMA)
* Windows Phone 7
C#
* Strong Typed
* VFP ist weak Typed
* Groß-/Kleinschreibung beachten
* C# kann fast nichts
* wird erst durch using stark
* Using von Komponenten
* aus .NET Framework
* von Drittanbietern
* aus eigenen Namespaces
Variablen
* Müssen deklariert werden
* Typ nicht änderbar
* Eine Variable ist ein Objekt
* Eigenschaften
* Methoden
Variablen
* VFP
* Deklaration nicht erforderlich
meineZahl = 3
meineZahl = meineZahl + 1
meineZahl = "kein Problem"
* Hier kommt es zu einem Laufzeitfehler
meineZahl = meineZahl + 1
Variablen
* C#
int meineZahl;
meineZahl = 3;
meineZahl++;
// Fehler wird zur Entwicklungszeit
// erkannt:
// meineZahl = „nicht zulässig";
MessageBox.Show(meineZahl.ToString());
Groß-/Kleinschreibung beachten
* VFP
meineVariable
meineVariable
* C#
meineVariable
MeineVariable
= 3
= "Zeichenkette"
= 3
= "Zeichenkette"
Warum using?
* Deklarierung von
* Komponenten des .NET Frameworks
* von Drittanbietern
* eigenen Namespaces
* Vergleichbar mit DECLARE oder
SET CLASSLIB TO in VFP
Warum using?
System.Windows.MessageBox.Show("Text");
oder
using System.Windows;
MessageBox.Show("Text");
C#
* Keine Daten
* Keine Cursor
* Nur Speicherstrukturen
* Klassen für „Tabellenstruktur“
* Keine Makros
C# Beispiele
* Aus Workshop Doku
* In CustomerCsharp
MVVM Beispiele
* Customers.xaml.cs
public Customers(bool autoLoadData)
{
InitializeComponent();
InitializeData();
InitializeDefaultValues();
if (autoLoadData)
{
ViewModel.Reload();
}
((CustomersViewModel)ViewModel).CanInsertOnInit();
}
MVVM Beispiele
* CustomersViewModel.cs
public void CanInsertOnInit()
{
if (_form != null)
{
_form.CanInsert = !_form.CanInsert;
VFXHelpers.VfxEventHelper.Instance.OnRefreshToolBar
(_form, EventArgs.Empty);
}
}
MVVM Beispiele
* CustomersViewModel.cs
public void CanInsertOnInit()
{
if (_form != null)
{
_form.CanInsert = !_form.CanInsert;
VFXHelpers.VfxEventHelper.Instance.OnRefreshToolBar
(_form, EventArgs.Empty);
}
}
* Test!
MVVM Beispiele
* Customers.xaml
<VfxObject:VfxButton
Content="Can Insert"
Name="vfxButton1"
Command="{Binding CanInsertCommand}" />
MVVM Beispiele
* CustomersViewModel.cs
using System;
...
public System.Windows.Input.ICommand CanInsertCommand
{ get; set; }
...
public CustomersViewModel(IDataFormProperties form
: base(form)
{
CanInsertCommand = new
VfxApplicationBase.Helpers.LambdaCommand<object>
(CanInsert, CanInsertFunc);
}
MVVM Beispiele
* CustomersViewModel.cs
private void CanInsert(object obj)
{
if (_form != null)
{
_form.CanInsert = !_form.CanInsert;
VFXHelpers.VfxEventHelper.Instance.OnRefreshToolBar
(_form, EventArgs.Empty);
}
}
MVVM Beispiele
* CustomersViewModel.cs
private bool CanInsertFunc(object obj)
{
return true;
}
* Test
Asynchrone Programmierung
* Nachricht senden
* Nicht(!) auf Antwort warten
* Anderes Ereignis erhält Antwort
C#
* Literatur zum Thema:
* .NET for Visual FoxPro Developers
* von Kevin McNeish
* ISBN: 1-930919-30-1
Fragen?
Desktop-Anwendungen
* Ausführung außerhalb des Browsers
* Out-of-browser (OOB)
* Projekt VfxLoader
* Eigenschaften
* „Ausführen außerhalb des Browsers
aktivieren“
* Viele Einstellmöglichkeiten
* Testen!
Höhere Vertrauensstellung
* „Out-of-Browser-Einstellungen“
* „Bei Ausführung außerhalb des
Browsers höhere Vertrauensstellung
fordern“
Höhere Vertrauensstellung
* Läuft nicht im Samdkasten des Browsers
* OLE Automatisierung
* Verwendung von COM Server
* Zugriff auf das Dateisystem
Installation OOB
* Kontextmenü
* „… auf diesem Computer installieren“
* Sicherheitswarnung
* Startmenü
* Desktop
* Freundlicher Dialog bei zertifizierten
Anwendungen
* Firmenname
* Firmenlogo
Zertifizierung
* Kostenlos möglich
* www.openssl.org
Aktualisierung
* Automatisch beim Anwendungsstart
* Möglich jedoch nur mit zertifizierten
Anwendungen!
Vollbildmodus
* Außerhalb des Browsers kann eine
Anwendung im Vollbildmodus ausgeführt
werden
* Symbol in der Symbolleiste
Out-of-Browser
* Programmatischer Test
if (App.Current.IsRunningOutOfBrowser)
{
MessageBox.Show("OOB");
}
else
MessageBox.Show("im Browser");
* Demo
Out-of-Browser
if (App.Current.HasElevatedPermissions)
MessageBox.Show(
"Erhöhte Vertrauensstellung");
else
MessageBox.Show("Sandbox");
* Demo
Debugging von
OOB Anwendungen
* Server (.Web) Projekt als Startprojekt
einstellen
* <Projekt>TestPage.html als Startseite
einstellen
* Ausführen und als „out-of-browser“
installieren
* Client Projekt als Startprojekt einstellen
* Eigenschaften, Seite Debuggen
Out-of-browser application
Installation ohne Browser
* Silverlight Launcher
* Windows 32 bit
C:\Program Files\Microsoft Silverlight\sllauncher.exe
* Windows 64 bit
C:\Program Files (x86)\Microsoft Silverlight\sllauncher.exe
* Parameter
* /install:”path-toXAP-File”
* /origin:”URI-to-origin”
* /shortcut:desktop+startmenu
* /overwrite
Installation ohne Browser
* Beispiel
C:\Program Files\Microsoft Silverlight\sllauncher.exe
/install:”VFPizza.xap”
/origin:”http://www.dfpug.net/VFPizza.xap”
/shortcut:desktop+startmenu
/overwrite
Distribution und Installation
Desktop Anwendungen
* Installationspaket für Desktop
Anwendungen erstellen
* IExpress.exe
* Mit Administratorrechten starten
* Batch Datei mit Installationsaufruf
erstellen
* Batch Datei und XAP Datei hinzufügen
* Batch Datei soll ausgeführt werden
Veröffentlichung
* Assistent in VWD
* Rechtsklick auf das Projekt
Silverswitch.Web
* „Veröffentlichen“
Web veröffentlichen
* Dateisystem
* Alle Dateien werden in Zielordner kopiert
* FTP
* Möglich, wenn Zugang vorhanden
* COM Server muss registriert werden!
* Web.config anpassen
* Config.vfx anpassen
Wo läuft die Anwendung?
* Windows
* Internet-Explorer
* Firefox
* Chrome
* Opera
* Mac
* Safari
* Firefox
* Chrome
* Opera
Sie haben das Ziel erreicht!
Fragen?
Vielen Dank und viel Spaß
mit VFP und Silverswitch
wünschen
Venelina & Uwe
Herunterladen