Schritt 12: Serienbriefe mit OLE

Top  Previous  Next

Windows bietet Ihnen nicht nur eine ansprechende und einfach zu benutzende Oberfläche, sondern auch mehrere Möglichkeiten, Windows-Anwendungen automatisiert zu nutzen. TurboDB Studio unterstützt die sogenannte OLE-Automatisierung mittels COM, das auch als ActiveX bekannt ist. Das waren jetzt viele Schlagworte in schneller Folge, weshalb wir uns zuerst mal die Bedeutung der einzelnen Begriffe näher ansehen sollten:

Unter OLE-Automatisierung versteht man das 'fernsteuern' von Anwendungen aus der eigenen Anwendung heraus, beispielsweise könnten Sie Excel mit Ihrer TurboDB Studio Anwendung so steuern, dass es Tabellen anlegt, formatiert und auch gleich noch mit den Daten aus Ihren Tabellen füttert.

Um dies bewerkstelligen zu können, müssen Sie ein TurboPL-Programm schreiben das mit OLE-Objekten arbeitet. OLE bedeutet Object Linking and Embedding, was im Programmierer-Jargon so viel heisst wie 'fremde Programme und Objekte im eigenen Code benutzen'. Das ganze funktioniert zwar nur mit ActiveX-Objekten, aber das sollte Sie momentan nicht weiter stören, da eigentlich alle größeren Anwendungen ActiveX-fähig sind. ActiveX ist ein Begriff aus der Microsoft'schen Marketingabteilung der bedeutet, dass die Anwendung oder die DLL-Datei COM unterstützt. COM steht übrigens für Component Object Model und ist nichts anderes als eine vereinheitlichte Schnittstelle für Objekte, damit man sie in Form von  (COM-fähigen) EXE- oder DLL-Dateien mit einer beliebigen (COM-fähigen) Programmiersprache für eigene Zwecke benutzen kann.

Der langen Rede kurzer Sinn:
Wenn Sie Ihre Daten beispielsweise in Ihrer Tabellenkalkulation oder Ihrer Textverarbeitung benutzen möchten, dann haben Sie mit TurboDB Studio die Möglichkeit dazu.

Eines sei allerdings sei gleich vorweggenommen: Das Thema OLE-Automatisierung hat durchaus seine Tücken und ist mehr für fortgeschrittene Anwender mit etwas Programmier-Erfahrung denn für Einsteiger geeignet. Dennoch wollen wir dieses Thema hier anschneiden, denn jeder fängt mal klein an und wir hoffen, dass wir Ihr Interesse wecken können. Wenn Sie in dieses Thema etwas tiefer einsteigen möchten, sehen Sie sich bitte das Beispielprojekt OleDemo an, dort finden Sie im Kommentar des Moduls auch noch wertvolle Tipps für den Einstieg in die OLE-Programmierung mit TurboDB Studio.

 

Um im Rahmen dieses Tutorials zu bleiben bedienen wir uns für dieses Beispiel dem mitgelieferten Modul OleWord.mod, das Sie im Installationsverzeichnis von TurboDB Studio im Unterverzeichnis Lib finden. Dieses Modul enthält einige Funktionen, die einfach zu benutzen sind und Ihnen die eigentliche Programmierung mit OLE-Objekten abnehmen. Fügen Sie dieses Modul dem Ordner Kunden hinzu.

 

F

Unser Beispiel setzt voraus, dass Sie eine deutsche oder englische Version von Microsoft Word 2000 (oder eine neuere Version) auf Ihrem Computer installiert haben. OLE-Automatisierung würde zwar auch mit anderen Anwendungen funktionieren aber aufgrund der großen Verbreitung von Microsoft Word haben wir uns für ein Beispiel mit dieser Anwendung entschieden.

 

Für unseren Serienbrief mit Word benötigen wir zunächst eine Vorlage in Form eines Word-Dokuments, in das unser TurboPL-Programm dann seine Daten schreibt. Um die Daten zielgenau positionieren zu können, unabhängig vom restlichen Inhalt und der Formatierung, benutzen wir die sogenannten Textmarken (engl. "Bookmarks", siehe auch: VisualBasic-Hilfe von Word). Diese werden folgendermaßen definiert:

Starten Sie Word und laden Sie gegebenenfalls ein Dokument. Positionieren Sie den Cursor an die Stelle im Text, an der Sie später die Daten einfügen möchten. Wählen Sie dann im Menü Einfügen/Textmarken... (engl.: Insert/Bookmark) um den Textmarken-Dialog zu öffnen. Tragen Sie hier im Feld Textmarkenname (Bookmark name) den Namen ein, mit dem Sie die Textmarke später im TurboPL-Programm aufrufen möchten und fügen Sie mit dem Hinzufügen-Schalter (Add-Schalter) die Textmarke der Liste hinzu.

 

Tut_12_BookmarksDlg

Mit den Textmarken von Word können Sie festlegen, an welche Stellen das TurboPL-Programm seine Texte später schreiben soll.

 

Als Beispiel erstellen wir ein Einladungsschreiben anlässlich des 10jährigen Bestehens der Firma. Schreiben Sie das Anschreiben so, wie Sie es gewöhnt sind und fügen Sie dann an allen Stellen, an denen später der Text aus der Tabelle stehen soll, eine Textmarke nach obigem Schema ein. Die Textmarken selbst sind leider unsichtbar.

 

Tut_12_DocumentEmpty

Ein erster Entwurf der Vorlage für den Serienbrief der später über OLE-Automatisierung mit Daten gefüllt wird

 

Speichern Sie Ihr Word-Dokument in das Projektverzeichnis des Beispielprojekts Tutorial.

Sofern Sie dies noch nicht gemacht haben, fügen Sie bitte das Modul OleWord.mod (zu finden im Ordner Lib im Installationsverzeichnis von TurboDB Studio, also üblicherweise C:\Programme\dataWeb\TurboDB Studio 4\Lib) dem Ordner Kunden hinzu.

Öffnen Sie nun das Formularmodul Modul_Kunden des Formulars Kunden im Moduleditor: Klicken Sie zuerst mit dem + Symbol vor dem Formularsymbol. Klicken Sie dann das Modul Modul_Kunden mit der rechten Maustaste an und wählen Sie den Menüpunkt Entwerfen aus dem Kontextmenü.

Im Moduleditor sehen Sie bereits 2 Zeilen:

..formulargebundenes Modul für Formular Kunden

.SV 1

Schreiben Sie in die Zeile darunter folgende Anweisung:

uses OleWord

Mit dieser Anweisung wird die TurboPL-Funktions-Sammlung, die in OleWord.mod definiert ist, für das aktuelle Modul nutzbar gemacht.

Nun können wir mit dem eigentlichen TurboPL-Programm beginnen:

procedure DruckeEinladungen

OleWordCreate(1)

MoveBegin(Kunden)

while ReadNext(Kunden)

   OleWordOpenDoc(BaseDir + 'Einladungsschreiben.doc')

 

   OleWordInsertText('Nachname', Kunden.Name)

   OleWordInsertText('Vorname', Kunden.Vorname)

   OleWordInsertText('Adresse', Kunden.Straße)

   OleWordInsertText('PLZ', Kunden.PLZ)

   OleWordInsertText('Ort', Kunden.Ort)

   OleWordInsertText('Datum', DateStr(Today))

   OleWordInsertText('Anrede', CHOICE(Kunden.Geschlecht, 'r Herr ', ' Frau ') + Kunden.Name)

 

   OleWordPrintDoc;

   OleWordCloseDoc(0);

end;

OleWordQuit;

endproc;

Diese Prozedur enthält nur die unbedingt benötigten Befehle um das Word-Dokument mit Daten zu füllen. Normalerweise sollten in einem guten Programm noch einige Dinge auf Ihre Richtigkeit geprüft werden, damit das Programm nicht bei jedem kleinen Fehler aus dem Tritt kommt. Beispielsweise sollte geprüft werden ob denn die Word-Datei, die als Vorlage dient, wirklich im Projektverzeichnis liegt und es sollte auch sichergestellt werden, dass trotz eines Fehlers das erzeugte, ferngesteuerte Word wieder beendet wird, da dieses sonst im Hauptspeicher bleibt bis Windows heruntergefahren wird (oder bis man den Windows Taskmanager zum Beenden des Prozesses benutzt). Da all diese Prüfungen den Programmcode jedoch unübersichtlicher machen, ist diese Version hier auf das wesentliche beschränkt.

Eine vollständige, mit Kommentaren versehene Version dieses Programms finden Sie im Modul Modul_Kunden. Um das vorgefertigte Programm auszuprobieren, müssen Sie lediglich die Kommentarzeichen '..' vor jeder Zeile entfernen. Markieren Sie dazu alle Zeilen die mit '..' beginnen und  wählen Sie dann im Menü Bearbeiten/Zeilen ent-kommentieren oder drücken Sie [Strg]+J.

 

Das Programm startet Word, lädt automatisch das vorher erzeugte Word-Dokument und fügt Text an den Textmarken ein. Danach wird das Dokument gedruckt und wieder geschlossen. Dieser Vorgang wird für jeden Kunden in der Datenbank einmal ausgeführt bevor Word wieder beendet wird.

Wenn Sie vermeiden wollen, dass alle 36 Briefe gedruckt werden, entfernen Sie bitte vor dem Start des TurboPL-Programms das Papier aus Ihrem Drucker. Die von Word an Windows gesendeten Druckaufträge können Sie in der Systemsteuerung unter Drucker wieder löschen.

Mit dem Menübefehl Modul/Prozedur ausführen..., dem Schalter Tut_12_IconStartMacro in der Schalterleiste oder der Taste [F9] können Sie die OLE-Automatisierung testen. Je nachdem ob Sie die Funktion WordCreate() mit 1 oder 0 aufgerufen, können Sie Word bei der Arbeit zusehen (1) oder es bleibt unauffällig und unsichtbar im Hintergrund (0). In jedem Fall können Sie es (unter Windows 2000 und Windows XP) im Windows Taskmanager unter Prozesse als WinWord sehen.

 

Tut_12_DokumentFilled

Der mit Word und TurboDB Studio erstellte Serienbrief