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