Lernen · Leitfaden

Modelldaten in Charis

Der vollständige Leitfaden zu Modelldaten: was sie sind, wann du sie brauchst und wie du sie definierst, mit Daten füllst, im Code ansprichst und in die Anwendungsdatenbanken bringst.

Modellierungca. 8 Min. Lesezeit← Alle Lernmaterialien

Einführung

In einer Charis-Lösung gibt es zwei verschiedene Arten von Datenbanken:

  • die Modelldatenbank und
  • die Anwendungsdatenbank.

Die Modelldatenbank wird von den Modellierern angelegt und gepflegt, also von den Entwicklern der Lösung. Sie entsteht zur Entwurfszeit und speichert das Modell der Lösung.

Die Anwendungsdatenbank dagegen nutzt die fertige Anwendung zur Laufzeit. Gepflegt wird sie von den Anwendern, also den Endanwendern der Lösung. In der Regel hat jeder Kunde seine eigene Anwendungsdatenbank. Selbst innerhalb einer Organisation kann es mehrere geben, zum Beispiel für Entwicklung, Test und Produktion.

Als Charis-Entwickler legst du viele Aspekte des Modells fest. Der wichtigste ist die Entität: Du definierst Entitäten (die Struktur der Daten), und die Endanwender pflegen die Daten dazu.

Manche Teile einer Lösung verlangen aber, dass du nicht nur die Struktur festlegst, sondern auch gleich die Daten dazu. Weil diese Daten schon beim Modellieren existieren, kannst du sie

  • von anderen Modellelementen aus referenzieren und
  • direkt im Code der Lösung verwenden.

Anders als Anwendungsdaten sind diese Daten Teil des Modells selbst. In Charis heißen sie Modelldaten.

Modelldaten werden in die Anwendungsdatenbank repliziert und stehen so zur Laufzeit zur Verfügung. Dadurch können auch Anwendungsdaten auf Objekte des Modells verweisen.

Modelldatenbank Anwendungsdatenbank Replikation Modelldaten Anwendungsdaten
Modelldaten finden sich in beiden Datenbanken.

Obwohl diese Objekte in beiden Datenbanken vorkommen, bleiben sie „Modelldaten“, denn:

  • Sie stammen aus dem Modell.
  • Sie werden von den Entwicklern festgelegt und kontrolliert, und zwar zur Entwurfszeit.
  • Endanwender können sie nicht grundlegend verändern.

Beispiel: Berechtigungen

  • Ein Charis-Modell definiert eine Entität (eine Struktur für Daten) namens Berechtigung (privilege).
  • Die Entwickler liefern dazu auch die Daten, nämlich als Modelldaten.
  • Einstiegspunkte (user entry points), die ebenfalls zum Modell gehören, können bestimmte Berechtigungen voraussetzen. Deshalb müssen sich Berechtigungen schon beim Modellieren auswählen lassen.
  • Zur Laufzeit legen die Anwender beim Kunden Benutzer an (Anwendungsdaten).
  • Diesen Benutzern müssen Berechtigungen zugewiesen werden, und zwar genau die, die die Entwickler definiert haben.

Weil die Berechtigungen hier im Modell definiert, aber sowohl von Modellobjekten (Einstiegspunkten) als auch von Anwendungsobjekten (Benutzern) verwendet werden, müssen sie in beiden Datenbanken vorhanden sein.

Wozu Modelldaten?

Es gibt zwei Hauptgründe, Modelldaten zu verwenden.

Vordefinierte Daten

Wenn bestimmte Objekte im System auf jeden Fall vorhanden sein sollen, kannst du sie als Modelldaten definieren und schon zur Entwurfszeit anlegen.

So sind diese Objekte zur Laufzeit bereits da, selbst wenn die Anwendungsdatenbank gerade erst neu angelegt wurde. Die Endanwender können sofort damit arbeiten, ohne sie vorher selbst anlegen zu müssen.

Code, der von Daten abhängt

Wenn sich zur Laufzeit ändern kann, auf welches Objekt verwiesen wird, deine Anwendungslogik aber davon abhängt, worauf verwiesen wird, kannst du diese Objekte als Modelldaten definieren.

Dann sind die Objekte schon zur Entwurfszeit bekannt. Du kannst sie sicher im Code referenzieren und Logik bauen, die davon abhängt.

Das Modell für Modelldaten definieren

  1. Entität als model data markieren
  2. Behavior assure usable ausführen

Wenn du Entitäten definierst, beschreibst du die Struktur der Daten, also welche Daten es gibt und wie sie organisiert sind. Die Anwender füllen diese Struktur zur Laufzeit mit Inhalten.

Bei Modelldaten gehst du einen Schritt weiter: Du definierst nicht nur die Entität, sondern legst auch gleich Objekte dieser Entität in der Modellierungsumgebung an. Diese Objekte werden Teil des Modells.

Modelldaten zu definieren beginnt also mit einer Entität, genau wie bei jeder anderen. Anschließend aktivierst du auf dem Reiter additional details die Option model data.

Sobald diese Option aktiv ist, schaltet Charis automatisch dazu:

  • copy model data, damit die Daten auch in der Anwendungsdatenbank landen, und
  • referenced by LOID, damit sich die Objekte zuverlässig referenzieren lassen.
Entitätsfenster „Berechtigung (Core)“ in Charis: Auf dem Reiter „additional details“ sind die Optionen „model data“, „copy model data“ und „referenced by LOID“ angehakt.
Eine Entität als Modelldaten definieren: Reiter „additional details“, Option „model data“.

Wie bei jeder anderen Entität kannst du auch für Modelldaten-Entitäten eine Verwaltungsschicht erzeugen, indem du das Behavior assure usable ausführst. Es sorgt dafür, dass zur Modelldaten-Entität folgende Struktur existiert:

  • eine Formularansicht (form view),
  • eine Tabellenansicht (table view),
  • eine Verwaltungsentität (administration entity) und
  • ein Einstiegspunkt (user entry point).

Verwaltungsentität und Einstiegspunkt werden in diesem Fall ebenfalls als model data markiert.

Daten für Modelldaten erfassen

  1. Code generieren
  2. Charis schließen
  3. Sicherstellen, dass sich das Anwendungsprojekt (custom project) kompilieren lässt
  4. Charis neu starten
  5. Den Einstiegspunkt für die Modelldaten öffnen
  6. Objekte anlegen, ändern oder löschen

Wie bei jeder anderen Entität musst du nach dem Definieren erst Code generieren, bevor du sie verwenden kannst. Danach muss die Anwendung neu gestartet werden, damit die Änderungen wirksam werden.

In diesem Fall ist die Anwendung, die neu starten muss, allerdings Charis selbst. 🤯

Nach dem Neustart fasst Charis alle Einstiegspunkte für Modelldaten in einem eigenen Fenster mit dem Titel model data zusammen.

Siehst du dieses Fenster nicht? Klicke ins Hauptfenster von Charis und drücke F8.

Tipps für einen reibungslosen Ablauf

Code zu generieren und das Anwendungsprojekt kompilierbar zu halten, kann während der Entwicklung manchmal knifflig sein. Diese Tipps helfen dir dabei:

Ändere das Modell in kleinen Schritten und generiere oft Code.So findest du leichter heraus, welcher Modellierungsschritt ein Problem verursacht hat.
Ändere den Code in kleinen Schritten und committe oft.So behältst du den Überblick über deine Änderungen und kannst bei Bedarf zurückgehen.
Committe deine Codeänderungen, bevor du Code generierst.Geht etwas schief, verwirfst du den generierten Code einfach und versuchst es noch einmal.
Nutze die Optionen der Codegenerierung.
validate model
Die Prüfung des Modells vor der Codegenerierung lässt sich überspringen.
assure objects project is published
Das Bauen und Veröffentlichen des Anwendungsprojekts vor der Codegenerierung lässt sich überspringen.
re-generate all entities
Ohne diese Option wird nur Code für geänderte Entitäten, Attribute usw. erzeugt. Das beschleunigt die Codegenerierung erheblich.
generate application project und generate service project
Erzeugt das App-Projekt (die eigentliche App, zum Beispiel für Windows Forms) und das Dienstprojekt. Schaltest du beides ab, beschränkt sich die Generierung auf das Anwendungsprojekt (custom project), und das geht deutlich schneller.
generate database backup
Das Erzeugen der Sicherungsdatei der Modelldatenbank lässt sich überspringen, um die Codegenerierung zu beschleunigen.

Auf Modelldaten im Code zugreifen

  1. Modelldatenobjekte anlegen, ändern oder löschen
  2. Code generieren
  3. Modelldatenobjekte über die automatisch generierten statischen Variablen ihrer Basisklasse ansprechen

Für jedes Modelldatenobjekt wird in der zugehörigen Basisklasse eine statische Variable erzeugt. Ihr Name leitet sich aus dem Wert des identifizierenden Attributs ab. Der Wert wird dabei automatisch in einen gültigen Bezeichner der Programmiersprache umgewandelt.

Eine Berechtigung namens „Administrator“ erreichst du zum Beispiel über die statische Variable Administrator in der Klasse PrivilegeBase:

var privilege = PrivilegeBase.Administrator;

Der Zugriff über statische Member bringt dir einige Vorteile:

  • sicherer und direkter Zugriff
  • Prüfung schon beim Kompilieren dank starker Typisierung
  • klarer, gut lesbarer Code beim Arbeiten mit vordefinierten Daten
  • Verweise auf Modelldatenobjekte lassen sich leicht finden

Modelldaten im Modell referenzieren

Wie jede andere Entität kann auch eine Modelldaten-Entität die referenzierte Entität eines Attributs sein.

Ist für die Modelldaten-Entität die empfohlene Option referenced by LOID aktiv, muss das zugehörige Attribut den Typ reference by LOID verwenden.

So bleiben Verweise auf Modelldatenobjekte konsistent, stabil und sicher, auch über Deployments und Updates hinweg.

Technisch lassen sich Modelldaten auch über die ID referenzieren. Das empfehlen wir aber nicht.

Replikation in die Anwendungsdaten

Wird eine neue Version der Lösung ausgerollt, werden die Modelldaten in jede Anwendungsdatenbank repliziert. So stehen zur Laufzeit alle benötigten vordefinierten Objekte bereit. Wie das genau passiert, hängt davon ab, wie die Modelldaten referenziert werden.

Empfohlen

Verweis über LOID

Charis überschreibt vorhandene Modelldaten in der Anwendungsdatenbank nicht einfach, sondern führt sie mit den Modelldaten aus dem aktualisierten Modell zusammen:

  • Neue Modelldatenobjekte kommen in der Anwendungsdatenbank hinzu.
  • Vorhandene Objekte werden aktualisiert, wenn sie sich im Modell geändert haben.

Weil Modelldaten über stabile Kennungen (LOIDs) identifiziert werden, kann Charis die passenden Objekte über Versionen hinweg zuverlässig zuordnen und aktualisieren.

Dadurch kann eine einzige Tabelle Objekte aus mehr als einem Modell enthalten. Das ist ein großer Vorteil, denn oft teilen sich mehrere Charis-Lösungen dieselbe Anwendungsdatenbank.

Modelldatenobjekte zu löschen musst du allerdings ausdrücklich über eine Datenmigrationsaufgabe erledigen.

Nicht empfohlen

Verweis über ID

Um die Kennungen konsistent zu halten, braucht es hier einen anderen Weg: Die zugehörige Tabelle in der Anwendungsdatenbank wird geleert. Alle Daten werden gelöscht und die Sequenzen zurückgesetzt. Danach legt Charis die Objekte anhand der Modelldefinition neu an.

Damit lassen sich Modelldaten aus mehreren Modellen nicht kombinieren, denn jede Replikation überschreibt die vorherige vollständig.

Noch Fragen zu Modelldaten?

Schreibe uns, wenn dir etwas unklar ist oder du ein Beispiel aus deinem eigenen Modell besprechen möchtest. Wir helfen dir gern weiter.

Frage stellen
horaios GmbH
Lindenstraße 40
89134 Blaustein
Telefon 0731 950 334-0
info@horaios.de