So verwenden Sie benutzerdefinierte Datenfelder

Mit iGrafx Professional haben Sie die Möglichkeit, Objekte mit Daten zu hinterlegen - der Prozeßmodus erlaubt alle Angaben bezüglich der Dauer, der Art und der jeweiligen Ressourcen einer Aktivität. Durch einen Doppelklick auf ein Symbol blenden Sie das »Eigenschaften«-Fenster ein.

Der Befehl »Verknüpfungen« befindet sich im Menü »Einfügen | Verknüpfungen«. Hier bestimmen Sie die Art der Verknüpfung und legen im Register »Benutzerdefinierte Daten« über »Einrichten« neue benutzerdefinierte Felder an. Diese Felder können allerdings nur per VBA ausgelesen werden. Zudem können Sie mit einigen Kommandos die Feldinhalte in einer Textdatei speichern und diese Datei etwa in eine Datenbank importieren.

Starten Sie iGrafx und wählen Sie ein neues »Basic Diagram«. Öffnen Sie das »Tools«-Menü und wählen darin »Visual Basic | Visual Basic Editor«. Das Aussehen des VBA-Editors entspricht dem in Word oder Excel.

In der linken oberen Ecke befindet sich ein Bereich, in dem die einzelnen Projekte aufgelistet sind. Mit einem Doppelklick auf »Diagram1« öffnen Sie die Arbeitsfläche. Hier können Sie nun für das geöffnete Dokument Formulare und VBA-Code erzeugen. Im linken unteren Bereich des VBA-Fensters sehen Sie die Eigenschaften der ge- rade bearbeiteten Ebene.

Zuerst definieren Sie die einzelnen Variablen. Dies erledigen die »DIM«-Befehle im ersten Block des Listings im Kasten. Die folgenden »Set«-Befehle aktivieren das benutzte Diagramm und rufen die »CustomDataDefinitions« auf, was eine Liste mit den Werten der benutzerdefinierten Daten ist.

Die nächsten Methoden, »CreateObject« und »CreateTextFile«, legen den Text an. Wenn Sie die Textdatei nicht in »C:\Temp« anlegen wollen, ändern Sie den Pfad. Mit der letzten Set-Anweisung wird festgelegt, daß Daten in die Textdatei geschrieben werden können. Diese Daten müssen aus den benutzerdefinierten Daten ausgelesen werden.

Der »Write«-Befehl im nächsten Befehlsblock legt Spaltenüberschriften an und bereitet den Text zum Import in die Datenbank vor. Die erste Spalte bekommt den Titel »Name«. Dieses Feld enthält den Text des Objekts. Die Namen der benutzerdefinierten Felder werden global innerhalb eines Dokuments verwaltet, jedes Objekt erhält die gleichen Felder, kann aber mit unterschiedlichen Werten belegt werden.

Daher ist eine genaue Identifikation notwendig. Die Bezeichnungen der benutzerdefinierten Felder werden über das Objekt »AnObject.Name« ausgelesen. Abschließend liest das Makro die Objektinformation aus und schreibt sie in die Textdatei. Dafür werden per Schleife so lange die Inhalte der Felder abgefragt, bis alle Felder ausgelesen sind. Dies geschieht mit der »Count«-Methode des »CustomDataDefinitions«-Objekts. Außerdem sollen nur Shapes ausgelesen werden, nicht Linien oder andere Objekte. Dies wird durch eine If-Then-Abfrage gewährleistet.

Die einzelnen Werte sind auch hier mittels Komma getrennt in die Textdatei geschrieben. Am Ende jeder Zeile wird dann noch ein Zeilenumbruch eingefügt. Tragen Sie nun Werte in die benutzerdefinierten Felder ein.

Listing »igrafx«

Dim igxDocumentAs igrafx3.Document

Dim igxDiagram As Diagram

Dim igxShape As Shape

Dim igxCustomDataDef As CustomDataDefinitions

Dim line As Recordset

Dim AnObject As Object

Dim i As Integer '

Const ForReading = 1, ForWriting = 2, ForAppending = 3

Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0

Dim fs, f, ts, s

Dim defvol As CustomDataValue

Set igxDocument = Application.ActiveDocument

Set igxDiagram = Application ActiveDocument.ActiveDiagram

Set igxCustomDataDef = igxDocument.CustomDataDefinitions

Set fs = CreateObject ("Scripting.FileSystemObject")

fs.CreateTextFile "C:\temp\test1.txt"

Set f = fs.GetFile ("C:\temp\test1.txt")

Set ts = f.OpenAsTextStream (ForWriting, TristateUseDefault)

ts.write "Name"

For Each AnObject In igxDocument.CustomDataDefinitions

ts.write ", " & AnObject.Name

Next

ts.write vbCrLf Leerzeile nach Spaltenkopf

ts.write vbCrLf

For Each AnObject In igxDiagram.DiagramObjects

If AnObject.Type = ixObjectShape Then

ts.write AnObject.Shape.Text

For i = 1 To igxDocument.CustomDataDefinitions.Count

ts.write ", " & AnObject.CustomDataValues.Item (CInt (i)).Value

Next

End If

ts.write vbCrLf Zeilenumbruch

Next