Dienstag, 13. Juli 2010

Datenaustausch VFP <-> .NET

Nach diversen Exprimenten haben wir uns entschieden, zwei Verfahren zu betreiben:

a) Einen Datensatz zum Bearbeiten holen.
Lesen: Dazu wird VFP angewiesen den aktuellen Datensatz einer View in eine DBF im Temp-Ordner zu kopieren.
Danach liest .NET über den VFPOleDB-Treiber und den OleDBReader die DBF in eine DataTable. Das Businessobjekt VFPRecordBase belädt aus dieser seine Properties.
Schreiben: Das BO genieriert aufgrund der geänderten Properties einen SQL-UPDATE-Befehl und schickt diesen an VFP. Analog wird beim Löschen und Anlegen verfahren.

b) Einen Cursor zur Anzeige holen
Dazu formuliert das BO auf Basis seiner Properies ein SQL SELECT, das an VFP geschicht wird.
Danach liest .NET über den VFPOleDB-Treiber und den OleDBReader die DBF in eine DataTable. Das Businessobjekt vom Typ List<VFPRecordBase> legt eine Liste an und befüllt diese mit VFPRecordBase-Objekten.

Sonntag, 4. Juli 2010

Rettung in Sicht

Trotz der Hitze haben wir unsere Köpfe rauchen lassen. Das Ergebnis ist vielversprechend!

Es ist tatsächlich möglich, Foxpro auf zwei Weisen zu nutzen:
  • als passiver Daten-Lieferant: hier läuft VFP als COM-Server und liefert der .Net-GUI auf deren Wunsch als COM-Client die Anzeige-Daten.
  • als aktiver Teil, der Dienste der GUI verwenden kann (z.B. MessageBoxen oder Fortschrittsbalken). Hier wird von VFP eine dritten Komponente verwendet: die VFPBridge. Diese stellt Dienste bereit, z.B. ShowMessagebox(). Die Gui sieht die VFPBridge über dei VFP-Instanz und kann damit Ereignisse der VFPBridge abonnieren, die von den Dienste-Methoden der VFPBridge ausgelöst werden.
Wie man sieht, sind die Details des Verfahrens relativ kompliziert. Dennoch ist damit die grundlegende Aufgabe des Datenaustauschs in beide Richtungen zwischen VFP und .NET elegant und ohne irgendwelche Hilfskonstrukte wie Polling oder Steuerdateien gelöst.
Eine Veröffentlichung hier ist aktuell nicht geplant. Interessenten können sich jedoch gerne melden.

Nächstes Thema ist, wie möglichst einfach und typsicher der Austausch einzelner Datensätze oder Cursordateien abzuwickeln ist.