Wir möchten nun das Laden und Speichern der Objektstruktur ermöglichen.
Dazu legen wir im Hauptmenü ein neues Menü an:
Die Umsetzung des Menüpunktes Neu ist schnell realisiert:
Das Laden und Speichern erfordert allerdings eine Kommunikation zwischen Client und Server, um einen Dateiauswahl-Dialog beim Client zu starten und eine Datei vom Client zum Server und umgekehrt zu transportieren.
Als erstes müssen Sie in den Eigenschaften der Wissensbais die Typbibliothek TCE Windows Objects aktivieren.
Diese Bibliothek verfügt momentan über keine Steuerelemente, kann jedoch sowohl serverseitig als auch clientseitig verwendet werden.
Hier nun der Code zum Speichern der Objektstruktur beim Client. Das Ziel dieses Programmcodes ist der Aufruf eines Dateiauswahldialogs beim Client, und nach erfolgreichem Festlegen des Dateinamens der Transport des Objektbaumes in eine Datei beim Client.
Function Click() As Void
Dim V As Variant, FS As TCEWindows.FileSelect, FN As String
FS := Client.CreateObject("TCEWindows.FileSelect")
FS.Filter := "TCE Konfiguration||*.tce"
If FS.ShowSave(MainForm.hwnd) Then
FN := FS.FileName
FN &= ".tce" If Right(FN, 4) <> ".tce"
V := Produkt.ObjectTreeSerialize
Server.TransactStreamToClient(FN, V)
End If
End Function
Zunächst werden drei lokale Variablen deklariert:
Dim V As Variant, FS As TCEWindows.FileSelect, FN As String
V ist vom Typ Variant. Variant-Variablen können Binärdaten verarbeiten. Eine gespeicherte Objektstruktur besteht aus solchen Daten. FS ist eine COM-Objektzeigervariable vom Typ FileSelect. Sie nimmt einen Objektzeiger auf ein serverseitiges oder clientseitiges Objekt auf. FN nimmt den neuen Dateinamen auf.
FS := Client.CreateObject("TCEWindows.FileSelect")
Es wird ein Objekt vom Typ TCEWindows.FileSelect beim Client erzeugt. Bitte führen Sie diese Funktion nicht serverseitig durch, weil dann später der Dateiauswahl-Dialog auf dem Desktop des Servers angezeigt wird.
FS.Filter := "TCE Konfiguration (*.tce)||*.tce"
Legt den Dateifilter fest.
FS.ShowSave(MainForm.hwnd)
Öffnet den Speichern unter Dialog. Damit der Dialog nicht losgelöst von der Anwendung erscheint, wird das clientseitige Fensterhandle des Hauptfensters als Parameter übergeben. Bei Erfolg ist der Rückgabewert ungleich Null und FS.Name enthält den kompletten Dateinamen.
FN := FS.FileName
Übernimmt den Dateinamen in FN
FN &= ".tce" If Right(FN, 4) <> ".tce"
Der Dateiname soll die Endung tce aufweisen.
V := Produkt.ObjectTreeSerialize
Speichert den Objektbaum des Objekts Produkt mit allen speicherbaren Informationen der Variable V
Server.TransactStreamToClient(FN, V)
Der Inhalt der Variablen V wird vom Server zum Client transportiert, eine Datei angelegt und der Inhalt von V dort abgelegt.
Hier nun der Code zum Laden einer Objektstruktur vom Client. Das Ziel dieses Programmcodes ist der Aufruf eines Dateiauswahldialogs beim Client, und nach erfolgreicher Auswahl des Dateinamens der Transport des Inhaltes der Datei in einen Objektbaum beim Server.
Function Click() As Void
Dim V As Variant
Dim FS As TCEWindows.FileSelect
FS := Client.CreateObject("TCEWindows.FileSelect")
FS.Filter := "TCE Konfiguration (*.tce)||*.tce"
If FS.ShowOpen(MainForm.hwnd) Then
Client.TransactFileToStream(FS.FileName, V)
Produkt := LoadObjectTree(V)
End If
End Function
Zunächst werden zwei lokale Variablen deklariert:
Dim V As Variant
Variant-Variablen können Binärdaten verarbeiten. Eine gespeicherte Objektstruktur besteht aus solchen Daten.
Dim FS As TCEWindows.FileSelect
FS ist eine COM-Objektzeigervariable vom Typ FileSelect. Sie nimmt einen Objektzeiger auf ein serverseitiges oder clientseitiges Objekt auf
FS := Client.CreateObject("TCEWindows.FileSelect")
Es wird ein Objekt vom Typ TCEWindows.FileSelect beim Client erzeugt. Bitte führen Sie diese Funktion nicht serverseitig durch, weil dann später der Dateiauswahl-Dialog auf dem Desktop des Servers angezeigt wird.
FS.Filter := "TCE Konfiguration (*.tce)||*.tce"
Legt den Dateifilter fest.
FS.ShowOpen(MainForm.hwnd)
Öffnet den Datei öffnen-Dialog. Damit der Dialog nicht losgelöst von der Anwendung erscheint, wird das clientseitige Fensterhandle des Hauptfensters als Parameter übergeben. Bei Erfolg ist der Rückgabewert ungleich Null und FS.Name enthält den kompletten Dateinamen.
Client.TransactFileToStream(FS.FileName, V)
Die Funktion transportiert den Inhalt der clientseitigen Datei in eine serverseitige Variant Variable
Produkt := LoadObjectTree(V)
Die TCE-Funktion lädt einen Objektbaum aus den binären Daten, die vorher mit ObjectTreeSerialize erzeugt wurden, in ein Objekt.