Im Allgemeinen dient das Netz-Modul dazu, die Verbindungen zwischen den Objekten in der Datenbank zu visualisieren. Hierzu wird ein ActiveX-Control genutzt, welches die Darstellung des Netzes übernimmt.
Dieses Dokument enthält nur die technische Dokumentation zum Objektnetz, da das Modul objnet.mod gar nicht alleine verwendet werden kann, sondern immer Ableitungen des Moduls für spezifische Aufgaben erstellt werden müssen. Wie das geschieht und was dabei zu beachten ist, steht in diesem Dokument. Für die Dokumentation der abgeleiteten Module gibt es eigene Hilfe-Dokumente.
Von diesem Modul abgeleitete, weiter spezialisierte Objektnetz-Module:
objnet.mod
Das Interface zu den abgeleiteten Modulen ist mit Hilfe einer Reihe von Funktionen realisiert, die überladen werden können/müssen um für den Anwendungsfall spezifische Arbeiten zu erledigen. Einige müssen überladen werden, andere können überladen werden. Im Nachfolgenden findet sich eine Aufstellung mit genaueren Angaben zu Parametern, Vorbedinungen etc.
Standardmässig unterstützt das Objekt-Netz diverse Optionen die das Verhalten des Moduls beeinflussen. Um dieses Parameter zu steuern, sind entsprechende GUI-Elemente nötig. Um das Design der Oberfläche der abgeleiteten Module jedoch in keiner Weise zu beeintröchtigen, stehen einige Funktionen zur verfügung, um die GUI-Elemente zu steuern. Das überladen all dieser Funktionen ist optional.
| Funktion | Parameter | Beschreibung |
|---|---|---|
| GetMaxColl | Keine | Diese Funktion muss die Anzahl der max. Größe einer Collection zurückliefern, bis zu welcher die Objekte der Collection noch einzeln dargestellt werden. Wird diese Funktion nicht überladen, ist der Standardwert 5. |
| GetDepth | Keine | Diese Funktion muss die gewünschte Rekursionstiefe zurückliefern, wie weit die Objekte verfolgt werden sollen. Wenn diese Funktion nicht überladen wird, ist der Standardwert 1. |
| PutXRef | STRING | Zur Anzeige des Datums der Cross-Reference-Datenbank, bzw. einer Meldung falls diese nicht gefunden wurde. |
| SetObjects | CX_CLASS | Wird Aufgerufen wenn das erste Objekt dargestellt wird (mit diesem als Parameter) und immer dann, wenn per Doppelklick das Netz weiter aufgebaut wird (das geklickte Objekt als Parameter). So lässt sich z.B. eine Liste mit der Historie der geklickten Objekte im Netz realisieren. |
|
SetLeftRight/ SetTopDown |
BOOLEAN | Wird aufgerufen wenn sich die Flussrichtung ändert und bekommt im Parameter den entsprechenden Status. Hier gibt es keine Optionsfunktion, wenn die Flussrichtung in einem abgeleiteten Modul gesetzt werden soll, muss dies per Hand geschehen. |
Diese Funktionen dienen alle dem Ändern der Optionen und dem wiedergeben dieser Änderungen auf der Oberfläche. In der Spalte "Zugehörige Optionsfunktion" ist der Name der Funktion angegeben, um die Option zu ändern. Da es sich immer um Ja/Nein Optionen handelt, schaltet die Funktion einfach nur den aktuellen Status um. Um die Änderung sichtbar zu machen, wird dann innerhalb der Optionsfunktion die entsprechende Set-Funktion aufgerufen, die den geänderten Status als Parameter bekommt. So lässt sich die Änderung dann auf der Oberfläche anzeigen.
| Funktion | Parameter | Beschreibung | Zugehörige Optionsfunktion |
|---|---|---|---|
| SetRef | BOOLEAN | Diese Option gibt an, ob die normalen Vorwärtsreferenzen angezeigt werden sollen. Eigentlich immer TRUE. | OptionRef |
| SetXRef | BOOLEAN | Gibt an, ob auch die Rückreferenzen angezeigt werden sollen. Hierzu ist allerdings eine Cross-Reference-Datenbank nötig. | OptionXref |
| SetConc | BOOLEAN | Diese Option gibt an, ob Collections zussammengefasst werden und nur als ein Knoten dargestellt werden. Siehe auch GetMaxColl. | OptionConc |
| SetLog | BOOLEAN | Gibt an ob ein Logfile geschrieben werden soll. Primär fürs debugging nützlich. | OptionLog |
| SetGroup | BOOLEAN | Gibt an ob das Netz gruppiert werden soll. | OptionGroup |
| SetView | BOOLEAN | Diese Option schaltet das kleine Gesamtübersichtsfenster ein und aus. | OptionView |
| SetFilter | BOOLEAN | Gibt an, ob gefiltert werden soll oder nicht. | OptionFilter |
| SetTracks | BOOLEAN | Gibt an ob schräge Verbindungen genutzt werden sollen oder nicht. | OptionTracks |
Die folgenden Funktionen dienen dazu, das Verhalten des Moduls beim auftreten bestimmter Events im Netz zu steuern. Auch hier ist das überladen optional.
| Funktion | Parameter | Empf. Rückgabewert | Beschreibung |
|---|---|---|---|
| LDblClick | siehe XNet Doku | 0 (vcRetStatFalse) | Diese Funktion wird aufgerufen wenn ein Knoten im Netz mit der linken Maustaste doppelt geklickt wird. Es sollte immer 0 als Returncode zurückgegeben werden, da sonst der Knoten-Bearbeitungsdialog des ActiveX-Controls aufgerufen wird. |
| RClick | siehe XNet Doku | 4 (vcRetStatNoPopup) | Diese Funktion wird beim Rechtsklick auf einen Knoten aufgerufen und dient im allg. dazu, ein eigenes Kontext-Menu zu implementieren. Daher auch der empfohlene Retruncode zur Ünterdrückung des Control-Eigenen Menüs. |
| ToolTip | siehe XNet Doku |
1 (vcRetStatOk) [Text] |
Diese Funktion wird immer aufgerufen, wenn im Control der Tooltip-Event auftritt. So lassen sich eigene Tooltips realisieren. Dazu wird als Rückgabe einfach der gewünschte Text auf dem Stack liegengelassen, zusammen mit einer 1 die das Control anweist, den Text anzuzeigen. Statt der 1 kann auch eine 0 genommen werden, um ein Tooltip an dieser Stelle zu unterdrücken. |
Diese Funktionen beeinflussen die interne Abarbeitung der Objekte und sollten mit sinnvollen Funktionen überladen werden. Zwingend ist dies allerdings bei keiner der Funktionen nötig.
| Funktion | Parameter | Rückgabewert | Beschreibung |
|---|---|---|---|
| GetNodeInfo | CX_CLASS | STRING | Diese Funktion wird aufgerufen wenn ein Knoten in das Netz eingefügt wird und sollte zusätzliche Informationen über den Knoten zuruückliefern, welche dann mit gespeichert werden. Dies kann z.B. ein bestimmtes Datenfeld sein. Diese Informationen können später z.B. für einen Tooltip genutzt werden. Der Typ des Objektes wird immer mit gespeichert, brauch hier also nicht behandelt werden. |
| RealObjectInfo | CX_CLASS | Kein | Diese Funktion dient einem ähnlichen Zweck wie "GetNodeInfo", wird jedoch schon aufgerufen bevor z.B. ein gewrapptes Objekt ge-unwrappt wird und bevor das "richtige" Objekt zu einem CX_FCONDITION geholt wird. Da an dieser Stelle die Informationen noch nicht eingefügt werden, sollten sie in einer Variable gesichert werden und können dann später z.B. mit GetNodeInfo an der richtigen Stelle ausgegeben werden. |
| GetLinkInfo |
CX_CLASS STRING |
STRING | Diese Funktion entspricht GetNodeInfo, nur jetzt für die Verbindungen zwischen den Knoten. Daher wird in dem zweiten Parameter auch noch der Name des Datenfeldes mit übergeben, welches von der aktuellen Verbindung repräsentiert wird. |
| GetStartGroupId | CX_CLASS | STRING | Liefert Gruppen-Code sowie Gruppen-Name für das Startobjekt im Netz. Wird daher auch nur zu Beginn bzw. nach Aktualisieren des Netztes aufgerufen. Standardwert ist der Typ des Objektes, sowohl fuer Name als auch Gruppen-Code. Die Werte müssen in einem String in der Form "<gruppencode>;<gruppenname>" zurückgeliefert werden. |
| GetElementGroupId |
STRING CX_CLASS |
STRING | Wie oben, jedoch für Elemente einer zusammengefassten Collection. Der String-Parameter ist die ID der Collection, der CX_CLASS-Parameter das gewählte Element der Collection. |
| GetCollGroupId | COLLECTION | STRING | Wie oben, jedoch für eine zusammengefasste Collection. |
| GetGroupId | CX_CLASS | STRING | Wie oben, jedoch für alle anderen Objekte. |
| InsertExtras | Keine | Keine | Dieses Macro kann benutzt werden, um nach dem Einfügen des aktuellen Objektes in das Netz noch weitere Aktionen durchzuführen, z.B. irgendwelche Member zusätzlich mit einfügen. Das Macro bekommt zwar keine Parameter, aber die Variablen 'currObject' und 'nodeId' sind gesetzt, wobei 'currObject' das soeben eingefügte Objekt und 'nodeId' die Knoten-ID enthält. |
| MakeNodes |
INT STRING CX_CLASS |
Keine |
Diese Funktion ist ein Teil des internen Rekursionsprozess. Sie ist für die Auswahl der darzustellenden Objekte zuständig.
Standardmässig wird über das gesamte DDI iteriert und alle Referenzen werden verfolgt und dargestellt. In speziellen Fällen
ist dies nicht immer wünschensert, daher kann diese Funktion überladen werden um z.B. eine "Vorauswahl" zu treffen, oder aber
um die Performance zu verbessern, z.b. falls man sicher sein kann, das ein Index für die gewünschten Objekte existiert. Die drei Parameter haben folgende Bedeutung: Der INT ist die aktuelle Rekursionstiefe, so das man prüfen kann, ob die gewünschte Tiefe schon erreicht ist. Der STRING ist die Id des übergeordneten Knotens und wird benötigt, um die Verbindung zwischen den Knoten korrekt zu erstellen. Der letzte Parameter ist das aktuelle Objekt, dessen Nachfolger nun bestimmt werden müssen. Die Hauptarbeit macht die Funktion "DisplayObject", welche innerhalb von MakeNodes aufgerufen werden muss. Für mehr Informationen am besten den Quelltext anschauen bzw. eine geänderte Version in einem der abgeleiteten Module. |
Hier sind Funktionen aufgelistet die dem Laden und Initialisieren des Moduls dienen. Zusätzlich werden hier auch einige weitere nützliche Funktionen aufgelistet, welche grundlegende Funktionalitäten bereitstellen.
| Funktion | Rückgabewert | Beschreibung |
|---|---|---|
| CreateCurrentControl | Kein | Diese Funktion erzeugt das ActiveX Control. Aufgrund technischer Bedingungen muss dies Modulabhängig geschehen. Allerdings kann immer der gleiche Code verwendet werden, welcher in den abgeleiteten Modulen zu finden ist. Muss zwingend überladen werden! |
| GetConfigName | STRING | Liefert den Pfad zur .ini-Datei für die Konfiguration des ActiveX-Controls. Wenn diese Funktion nicht überladen wird, wird eine Standard .ini Datei verwendet. |
| LoadNet | Kein | Diese Funktion muss verwendet werden um das Modul zu laden. Sie öffnet dann das Fenster und erlidigt alle anderen Initialisierungsaufgaben. Optional kann ein Objekt mit übergeben werden, welches dann gleich angezeigt wird. |
| RefreshNet | Kein | Lädt das gesamte Netz ausgehend vom ersten Objekt neu. Momentan kann aus technischen Gründen der vom Benutzer weiter verfolgte Pfad in der Hierarchie nicht wieder mit aufgebaut werden. |
| DisplayIt | Kein | Diese Funktion bekommt ein Objekt übergeben, welches dann dargestellt wird. |
Das Modul allein wird nie aufgerufen und empfängt daher von extern auch keine Messages. Nur einige interne Messages werden angenommen. Versenden tut das Modul nur die folgenden zwei Messages:
| Message | Parameter | Funktion | Empfangs-Modul |
|---|---|---|---|
| INSPECT_OBJECT | Das selektierte Objekt | Objektinspektor für das aktuell selektierte Objekt aufrufen. | Objektinspektor |
| EDIT_OBJECT | Das selektierte Objekt | Editier-Modul für selektiertes Objekt aufrufen. | Editiermodul |
Da das Modul gebrauch von einem ActiveX-Control macht, muss dieses natürlich auch installiert sein.
Es handelt sich dabei um das 'Varchart XNet'-Control von der Firma NETRONIC. Weitere Information zur
Installation findet sich in der Dokumentation zu dem Control bzw. im Bereich Installation
der Infothek.
Die Standard Konfigurationsdateien des Moduls tragen die folgenden Namen:
objnet.ini objnet.IFD
Diese zwei Dateien müssen im selben Verzeichnis wie das Modul selbst liegen. Keinesfalls sollten manuell Änderungen an diesen Dateien vorgenommen werden!