Erweiterte Programmierung


Bei klassischen WPF-Anwendungen wird XAML per x:Class-Direktive zu BAML kompiliert und mit der Code-Behind-Datei verbunden. Nachteil dieser Vorgehensweise ist, dass man während der Laufzeit, oder projekt- bzw. kundenspezifisch keine Anpassungen mehr machen kann. Bei iPlus dagegen werden alle Designs in der SQL-Datenbank gespeichert und erst zur Laufzeit Just-In-time geladen.

So wie Eigenschaften, Methoden, Ereignisse und Konfigurationswerte einer Klasse angehören und im objektorientierten Sinne vererbt und überschrieben werden können, so verhält es sich auch bei den Designs.

Designs sind in der Tabelle ACClassDesign gespeichert und werden, wie auch Eigenschaften und Methoden, per IACObjectBase.ACIdentifier eindeutig identifiziert.

Die Präsentation von Daten und Zuständen einer ACComponent erfolgt per WPF-Data-Binding. Der DataContext ist in der Regel die zu präsentierende ACComponent selbst:

 

GUI

Bitte machen Sie sich zuerst etwas mit der WPF vertraut, bevor Sie hier weiterlesen, um ein besseres Verständnis zu bekommen. Dies hilft Ihnen auch XAML besser zu verstehen und dann sind Sie auch in der Lage Designs direkt im XAML-Codefenster zu erstellen ohne Zuhilfenahme des iPlus-GUI-Designers. Diese Vorgehensweise ist oft schneller als die Benutzung des grafischen Werkzeugs.

Alternativ zum iPlus-GUI-Designer können Sie Microsoft Blend oder die ältere Version Microsoft Expression Design (Download-Link) verwenden und den dort generierten XAML-Code per Zwischenablage in den XAML-Editor von iPlus kopieren. Anschließend können Sie die restlichen Arbeiten mit dem iPlus-Designer erledigen:

 

Berichte

Berichte sind ebenfalls Designs, die als Flussdokumente in XAML beschrieben sind. In iPlus sind die Flussbezogenen Klassen des .NET-Frameworks erweitert worden, damit die Daten wie bei GUI-Klassen gebunden und schließlich auf einem Drucker bzw. als XPS/PDF-Dokument ausgegeben werden können.


Designs verwalten Sie in der iPlus Entwicklungsumgebung in der Registerkarte "Designs". Vor jeder neuen Design-Anlage müssen folgende Punkte bedacht werden:

 

1. Abstraktionsebene

Da Designs immer einer Klasse angehören, müssen Sie zuerst das Projekt auswählen unter der die Klasse organisiert ist.

Designs, die Sie Klassen hinzufügen die sich im Projekt "Variolibrary" befinden, sind Designs die Sie für künftige Projekte wiederverwenden wollen. Hier müssen Sie zudem Bedenken auf welcher Abstraktionsebene Sie das Design definieren wollen, da Designs im objektorientierten Sinne vererbt werden wie auch Eigenschaften und Methoden.

Designs, die Sie Klassen hinzufügen die sich im Projekt "Root" befinden, sind Designs für Businessobjekte und Entity-Klassen. Auch hier gelten die Vererbungsregeln!

Designs, die Sie Klassen hinzufügen die sich in Anwendungsdefinitions- und Anwendungsprojekten befinden, sind Designs für Ihr Kundenprojekt. Da Klassen im Anwendungsprojekt von den Klassen aus dem Anwendungsdefinitionsprojekt oder der Klassenbibliothek erben, müssen Sie auch hier entscheiden auf welcher Abstraktionsebene Sie Ihr Design hinzufügen.

Merksatz: Wenn Sie Designs anlegen oder ändern, die auf einer höheren Abstraktionsebene angesiedelt sind, dann hat das Auswirkung auf viele Instanzen. Wenn Sie Designs anlegen oder ändern, die sich auf der letzten Ableitungsstufe befinden, dann hat das Auswirkung nur auf die konkrete Instanz.

 

2. Überschreiben

Der Designname (Feld ACIdentifier in ACClassDesign) dient zur eindeutigen Identifizierung des Designs innerhalb einer Klasse. Wenn Sie ein Design in einer abgeleiteten Klasse ändern wollen, legen Sie ein zusätzliches Design mit demselben Designnamen (ACIdentifier) an, wie es in der Basisklasse benannt wurde. Damit haben Sie das Design überschrieben. Im folgenden Beispiel wurde bei der zweiten Klasse das Design mit dem Namen "Design1" überschrieben:

 

3. Kategorisierung

Designs werden in iPlus in unterschiedlichen Kontexten angezeigt, z.B. als Steuerelement in der Visualisierung, oder zur Konfiguration einer ACComponent im Steuerungsdialog, oder zur Anzeige von Datenbankdaten in Businessobjekten.
Beim Anlegen eines Designs (Taste "Neues Design") werden Sie aufgefordert das Design durch die Combobox "Verwendung" zu kategorisieren:

 

4. Schachtelung

XAML-Code kann oft sehr unübersichtlich werden, wenn z.B. viele Animationen beschrieben werden oder Ansichten erstellt werden, die viele Datenfelder enthalten. Aus diesem Grund ist es empfehlenswert das gesamte Design in mehrere kleinere Designs aufzuteilen (Vergleichbar mit dem Schachtelungsprinzip in der Informatik) die dann später ineinander eingebettet sind. Die Einbettung eines Unterdesigns in ein anderes übergeordnetes Design wird mit dem Steuerelement VBDesign gemacht.

Das Schachtelungsprinzip bietet folgende Vorteile:

  • Wiederverwendung von Designs. 
  • Reduktion der Komplexität.
  • Bessere Übersichtlichkeit und Wartbarkeit.
 

Abhängig davon, welche Kategorie dem Design zugeordnet wurde, wird ein entsprechendes Designwerkzeug benötigt, das Ihnen die iPlus-Entwicklungsumgebung von selbst auswählt:

Oberflächendesigner

Der Oberflächendesigner wird aktiviert, wenn es sich um Designs handelt die zur Kategorie  Hauptansicht, Teilansicht, Steuerelement, Steuerungsdialog und Visualisierung gehören. Der Oberflächendesigner kann zudem direkt während der Laufzeit geöffnet werden in dem im Kontextmenü der Befehl "Designmodus an" ausgeführt wird. Es wird immer das Design editiert wo sich gerade der Mauszeiger befindet. Alternativ, kann der Designer über  das Geodreieck-Symbol unten in der Statusleiste aktiviert werden. 

Wie man den Oberflächendesigner verwendet lesen Sie bitte im ersten Unterkapitel nach.

 

Berichtsdesigner

Der Berichtsdesigner wird aktiviert, wenn es sich um Designs handelt die zur Kategorie "XAML Bericht" gehören. Der Berichtsdesigner wird über das Geodreieck-Symbol oben im Menüband geöffnet.

Wie man den Berichtsdesigner verwendet lesen Sie bitte im zweiten Unterkapitel nach. 

 

Menüeditor

Der Menüeditor wird aktiviert, wenn es sich um Designs handelt die zur Kategorie "Hauptmenü" gehören. Menüs gehören der Wurzelklasse "Root" im Root-Projekt an und sollten auch nur dort angelegt werden.

 

Sonderfall: Workflowdesigner

Zur Vollständigkeit: Workflows sind Methoden und keine Designs! Da die Präsentation ebenfalls per XAML erfolgt werden Sie auch einem grafischen Werkzeug erstellt. Ihr Design, wird nicht in der Tabelle ACClassDesign gespeichert, sondern in der Tabelle ACClassMethod.