Erweiterte Programmierung


Eine ACComponent kann eine unbeschränkte Anzahl von Kindelementen besitzen, bei denen es sich ebenfalls um ACComponents handelt. Somit können Sie eine rekursive Baumstruktur in beliebiger Tiefe schaffen. Jede Kind-Komponente muss innerhalb derselben Liste einen eindeutigen Namen besitzen (Property ACIdentifier). Dieses Prinzip ähnelt dem eines Dateisystems. Daher ist auch die Adresse einer ACComponent-Instanz eindeutig identifizierbar. Die Adresse wird als ACUrl  bezeichnet und jeder ACIdentifier ist durch einen "Backslash" getrennt:


Die Erzeugung der Kind-ACComponent Instanzen erfolgt entweder:

  1. Statisch,
  2. Dynamisch oder
  3. Programmgesteuert.

Bei der statischen Instanziierung erfolgt die Instanziierung der Projekte per Datenbank, über den in der iPlus Entwicklungsumgebung konfigurierten Projektbaum. Die statische Instanziierung erfolgt nur einmal beim Startvorgang von iPlus. Dabei werden die Bäume bzw. Projekte instanziiert, die der entsprechenden Benutzeranmeldung zugeordnet wurden.


Die dynamische Instanziierung erfolgt während der Laufzeit zu beliebigen Zeitpunkten. Diese erfolgt durch:

  1. das Laden eines Workflows,
  2. das Öffnen von Businessobjekten.

Erläuterung der Aufrufe:

  1. Methodenaufrufe vom Typ Workflow laden Workflows. Diese fügen die entsprechenden ACComponent Instanzen in dem statischen Baum eines Projekts hinzu. Bei der Abarbeitung eines Workflows entlädt sich dieser und die entsprechenden Instanzen stoppen.
  2. Businessobjekte sind ACComponent's (Ableitungen von ACBSO), die in der Regel über die Benutzeroberfläche durch den Benutzer instanziiert werden (z.B. durch Aufruf über das Menü). Businessobjekte werden im Baum unterhalb der Adresse \Businessobjects\... angehängt. Das Stoppen erfolgt ebenfalls über die Benutzeroberfläche.

Dynamische Instanzen haben die Besonderheit, dass deren ACIdentifier bei der Instanziierung mit einer fortlaufenden Instanznummer erweitert werden. Z.B. wenn es ein Businessobjekt der Klasse "BSOMaterial" gibt, dann erhält die erste Instanz die ID 1 und somit den ACIdentifier "BSOMaterial(1)". Öffnet der Benutzer eine zweite Karteikarte, dann lautet der ACIdentifer "BSOMaterial(2)" usw.
Genauso verhalten sich die Wurzel-Instanzen eines Workflows der geladen werden soll. Sie erhalten ebenfalls eine fortlaufende Nummer. Die Kindelemente (Workflowknoten) benötigen keine dynamische zu vergebende Nummer mehr, da diese bereits durch den Workfloweditor gewährleistet und vorgegeben wurde.


Das Starten von ACComponenten erfolgt über die Methode StartACComponent(). Der erste Parameter ist der Klassenname der ACComponent.

Beim Starten wird:

  1. zuerst der Konstruktor aufgerufen,
  2. die ACInit-Methode aufgerufen und die neue Instanz als Kindobjekt bei der aktuell aufrufenden ACComponent hinzugefügt,
  3. die ACPostInit-Methode aufgerufen.

Nach diesen Schritten kann mit der Instanz gearbeitet werden. Wird eine Instanz nicht mehr benötigt, können Sie diese durch die Stop()-Methode beenden:


In dem obigen Beispiel ist noch eine zusätzliche Überprüfung eingefügt:

Setzten Sie beim Aufruf der Methode ACUrlCommand() ein Fragezeichen "?" vor den Klassennamen, findet zuerst eine Prüfung statt ob bereits eine Instanz als Kindobjekt vorhanden ist.


Mehr zum Lebenszyklus eine ACComponent und dem Befehl ACUrlCommand finden Sie im nachfolgenden Unterabschnitt.


  • Ein Root Projekt setzt sich aus ACComponenten zusammen welche in einer Baumstruktur im Projekt angeordnet sind.
  • Es ist vergleichbar mit einer *.csproj-Datei von Microsoft Visual-Studio.
  • iPlus-Projekte sind in der Datenbank in der Tabelle "ACProject" gespeichert und repräsentieren die Wurzel eines ACComponent-Baumes indem sie auf eine Wurzel-Klasse in der Tabelle ACClass verweisen.
  • Alle weiteren Kind-Klassen bzw. Instanzen sind in der ACClass-Tabelle gespeichert. Auswählen der Projekte erfolgt über die Explorer Liste in der Entwicklungsumgebung.

    Es gibt vier verschiedene Typen von Projekten:
  1. Root Projekt: Dieses Projekt repräsentiert, die eigentliche Runtime. Es existiert nur einmal und kann auch nicht gelöscht werden. Das Root-Projekt ist die Wurzel für alle weiteren Bäume/Projekte. Es ist ebenfalls eine ACComponent und Sie können über die Eigenschaft "Root" der ACComponent auf diese Root-Instanz zugreifen. Die Kinder von Root sind entweder weitere Anwendungs-Projekte oder fest vorgegebene Instanzen (Businessobjects, Communications, Environment, Messages, Queries, LocalServiceObjects und Database).
  2. Anwendungs-Projekte können Sie beliebig oft anlegen. Hier definieren Sie die Instanzen, die beim Hochfahren des Root-Dienstes, Ihre Anlage bzw. Ihre Automatisierungslösung repräsentieren. In der Benutzerverwaltung können Sie definieren welche Projekte beim Start von Root instanziiert werden sollen. Die Namen der Anwendungsprojekte müssen eindeutig sein, da sie direkt als Kindelemente und der Root-Instanz angelegt werden. Daher dürfen sie als Projektnamen auch nicht die vorresservierten Wörter verwenden, die zuvor als fest vorgegebene Instanzen aufgezählt wurden. Anwendungsprojekte können Ableitungen von sogenannten "Anwendungs-Definitions"-Projekten sein.
  3. Anwendungs-Definition Projekte repräsentieren eine abstrakte Zwischenschicht für Automatisierungslösungen. Sind enthalten Basisklassen für die Klassen/Instanzen die in den Anwendungsprojekten definiert sind. Wir empfehlen Ihnen die Nutzung von Anwendungs-Definitionen. Sie hilft Ihnen redundaten Code und Designs in den Anwendungsprojekten zu vermeiden. Ausserdem macht das Ihre Endlösung wartbarer, flexibler und mächtiger bei Änderungen. Anwendungs-Definitions-Projekte können wiederum von anderen Anwendungs-Definitions-Projekten erben. Umgekehrt empfehlen wir Ihnen nicht zu viele Abstraktions-Zwischenebenen einzufügen weil Sie dadurch schnell den Überblick verlieren könnten. In der Regel reicht eine "Anwendungs-Definitions"-Ebene aus. Übrigens ist mindestens eine Anwendungsdefinitions-Ebene Pflicht wenn Sie mit Workflows arbeiten wollen.
  4. Wenn Sie mehrere Projekte mit iPlus umgesetzt haben, werden Sie mit der Zeit entdecken dass Sie für Ihre Automatisierungslösung immer die gleichen Klassen und Kompositionsmuster verwenden. Eventuell möchten auch andere Kollegen oder Firmen Ihre Kompositionsmuster wiederverwenden. Hier sollten Sie dann das Projekt Variolibrary verwenden. Das Variolibrary-Projekt gibt es ebenfalls nur einmal. Es enthält zum einen alle Klassen, die per ACClassInfo-Attribut in den Assemblies der iPlus-Runtime bekanntgegeben worden sind und zum anderen Ihre wiederverwendbaren Kompositionsmuster.