Was soll denn dieses Buch?

Dieses Buch sammelt verschieden Ideen, Aspekte und Themen resultierend aus meiner täglichen Arbeit im Büro und Gedanken von zu Hause. Dieses Buch enthält natürlich keine konkreten Interna meines Arbeitgebers oder identifizierbare Anekdoten.

Fokussiert wird sich hier auf das Systems Engineering, die Modellierung von Elemeenten, Schnittstellen und Eigenschaften komplexer Systeme. Zerlegung ist die Kunst. Hierbei betrachten wir auch die großen Standards wie UML, SysML and MOF. Weiterhin gibt es hier Anforderungen, Architektur, Aufgaben, Projektmanagement und anderer bekloppeter Dinger.

Das komplette Buch ist zur besseren Verständlichkeit in deutsch geschrieben. Erreiche ich nicht das weltweite Publikum besser? Darüber habe ich lange nachgedacht, aber mich aus folgenden Gründen doch für die deutsche Sprache entschieden:

  • Ich schreibe eleganter uns effizienter

  • Die Erläuterungen sind plastischer und besser verständlich

  • Es gibt ausreichend gute Übersetzungsmaschinen

Die Quelle des Buchs ist verfügbar unter The source of the book is available in Github und Pull Requests sind immer willkommen.

Aber nun…​ lass uns einfach starten!

Gute Tools

Asciidoctor

https://asciidoctor.org/

Ein Konvertierungstool um aus .adoc-Dateien ein Html zu erzeugen. Auch das Geschriebene, welches du gerade liest, ist ein .adoc-Dokument. In Kombination mit Jenkins ein einfach gutes Tool.

Jenkins

https://www.jenkins.io/

Mittlerweile das Standard-Tool der automatisierten Ausführung von Skripten, wie zum Beispiel Build-Skripte, Test-Ausführungs-Skripte oder Konvertierungs-Skripte.

Visual Studio Code

https://code.visualstudio.com/

Ein sehr populärer Editor zum Bearbeiten von Code-, Markup und Daten-Dateien welcher unter allen großen Betriebssystemen läuft. Nutze ich täglich, wenn ich nicht Rider oder Visual Studio für C# nutze.

Visual Studio

https://visualstudio.microsoft.com/de/

Das Tool für Windows-Entwicklung, allerdings für C# nutze ich persönlich den Rider

JetBrains Rider

https://www.jetbrains.com/de-de/rider/

Ein platform-übergreifendes Tool zur C#/.Net Entwicklung unter Windows und Linux. Mein persönliches Entwicklungstool.

Kostet ein wenig Geld, aber ist in meinen Augen das Abo wert.

DotNet Benchmark

https://github.com/dotnet/BenchmarkDotNet

Gehört mit NUnit zu einer der Standard-Tools für die Bestimmung der Laufzeit von Methoden. Das Tool kümmert sich automatisch um die Analyse des Overheads und der notwendigen Wiederholraten um eine gewisse Konfidenz zu erreichen. Bevor man mit "StopWatch" sein eigenes Benchmarking aufbaut, empfehle ich eine Prüfung dieser Bibliothek.

SmartGit

https://www.syntevo.com/smartgit/

Aktuell mein Lieblings-Git-Tool. Sieht nicht hypig aus, funktioniert sehr zuverlässig und besitzt eine gute grafische Darstellung der Revisions-Logs. Insgesamt auch, wie Git halt so ist, sehr schnell.

Alkoholfreie Bier

Anbei ein Rating verschiedener alkoholfreier Biere…​ Welche mag ich, welche mag ich nicht…​

Mönchshof - Original Naturtrüb’s Alkoholfrei

Getrunken habe ich es gut gekühlt. 6/10 Punkte

Gibt es in einer 0,5er Ploppflasche. Den Plopp-Test hat das Bier gut überstanden, es ploppt. Ausreichen Kohlensäure, schmeckt ein wenig dünn und verstopft nicht den Geschmack…​ Der Alkohol fehlt. Vom Geschmack her ist das Bier bierig, schmeckt beim Abgang nur leicht süßlich und eine Malznote findet sich, bei herbigem Grundgeschmack. Nach dem Genuss einer vollen Flasche habe ich spontan keine Lust auf ein zweites Bier.

System Engineering

Objekte

Lass uns mit den Objekten starten. In diesen Kapitel lernen wir etwas über die Schwierigkeite Dinge zu Objekten zu machen und zwar in einer Art und Weise, dass die beabsichtigte Aussage über das Objekt auch deutlich kommunizierbar ist.

Fragt man 10 verschiedene Persoenen über die Definition eines konkreten Objektes, kann man, vereinfacht gesagt, 10 verschiedene Antworten erhalten, die sich teilweise überlappen, aber auch teilweise völlig widersprechen.

Wir werden hier auch eine angemessene Definition des Terminus "Objekt" reden. Aber bevor wir das tun sollten wir darüber nachdenken, ob es überhaupt Sinn ergibt, eine Definition für das "Objekt" suchen. Wäre das Leben nicht schön, wenn wir einfach die Nicht-Definition akzeptieren und jeden mit seine eigenen Mindset denken, reden und handeln lassen.

Ja, das Leben ist schön…​ je unkonkreter, des besser…​ allerdings fangen die Schwierigkeiten an, wenn wir mit Menschen zusammenarbeiten. Für eine gute Zusammenarbeit ist es wichtig ein Objekt beschreiben zu können und man versteht, warum man ein Objekt in einer Art und Weise so beschreibt, wie man es tut und wie man es am Besten beschreiben soll und warum es für eine sachliche Diskusssion wichtig ist, ein Objekt sauber zu beschreiben und abzugrenzen.

Einige Dinge sind einfach…​ Wie ein Fahrzeug, aber selbst ein Fahrzeug kann in völlig unterschiedlichen Formen auftreten. Ist ein Auto ein Fahrzeug? Ist ein Fahrrad ein Fahrzeug oder ist ein Inline-Skater ein Fahrzeug? Oder reden wir über ein 'Eis'. Ist eine Eis zum Schlecken oder Gletscher-Eis genannt?

Was werden wir in unserem fachlichen Leben alles beschreiben wollen? Gibt es überhaupt eine Unschärfe zum privaten Leben? Während man im privaten Leben gerne mit der Ungenauigkeit auskommt und dies auch den Reiz des Zwischenmenschlichen ausmachen kann, führen Ungenauigkeiten spätestens bei der Auslieferung zu Konflikten…​ Dann ist es nämlich nicht süß, dass der andere komplett daneben lag, sondern für ein Projekt und damit dem schnöden Mammon gegebenenfalls fatal!

Zurück…​ was wollen wir eigentlich beschreiben?

  • Dinge und Sachen…​ klar!

  • Menschen, Tiere, Pflanzen…​ Würde schon sagen. Wenn man sagt, dass eine Sache einem Menschen gehört, muss klar sein, was ein Mensch ist und welche Eigenschaften er gegebenenfalls hat, da das Alter darlegt, ob dieser Mensch dies überhaupt besitzen darf.

  • Geometrische Figuren, Flächen, Volumen…​ Hört sich erstmal abstrakt an, aber das Volumen ist auch etwas, was man beschreiben muss. Oder ist es mehr eine Eigenschaft? Dazu später, aber spätestens wenn man ein Grundstück definiert, kommt man um die flächige Eigenschaft nicht drum herum.

  • Emotionen, Liebe und Gefühle…​ Wäre schön…​ Aber zu welchem Zweck im fachlichen Leben? In der Entertainmentbranche wäre es wahrscheinlich sinnig, wenn man die Wirkung eines Films messen und erfassen können

  • Handlungen, Taten…​ Nun wird es wirklich abstrakt, aber in meinen Augen ganz wichtig. Einer handelnden Person im Auftrag ist es je nach Arbeitsmodell sehr wichtig, was zu handeln ist.

  • Wetter, Schneefall, Sonnenstand…​ Ok, an Beispielen kommen wir nicht wirklich weiter.

  • …​ Es gibt hier noch ganz viele Dinge.

Wikipedia: Objekt

Nutzen wir mal Wikipedia…​ Objekt hilft eigentlich gar nicht. Hier fangen wir maximal die ersten zwei Punkte der obigen Liste, die wir beschreiben wollen.

Das Ding an sich

Hier haben wir eine Definition: Ding an sich - OK, die Definition ist so "hübsch", dass sie anstrengend ist…​ gehen wir mal weiter.

Res

Suchen wir was Anderes: Res. Gefällt mir irgendwie, holen wir das für uns Relevante heraus:

  • Eine Sache kann körperlich oder unkörperlich sein

  • Eine Sache kann beschrieben werden

  • Der Name einer Sache ist zweitrangig zu der Sache selbst

Damit kann man schon ein wenig anfangen, aber reicht mir noch nicht.

Die Sache im rechtlichen Sinne

Man denkt immer, dass im Recht viele Dinge sauber definiert sind…​ Aber das BGB ist in meinen Augen eine Besonderheit, da man hier in vielen Dingen vom gesunden Menschenverstand ausgehent. Wie ist die Sache hier definiert:

§90 BGB sagt: "Sachen im Sinne des Gesetzen sind nur körperliche Gegenstände"

Macht mich nicht glücklich, denn ich möchte ja auch Personen, nichtkörperliche Dinge, Grundstücke, Flächen, aber auch Tier bezeichnen (§90a BGB: Tiere sind keine Sachen, sie werden nur so behandelt, wenn es kein besonderes Recht gibt).

Ach ja, das Recht…​

Die Entität - Axiom

Drehen wir den Spieß mal um. Was ergibt denn überhaupt Sinn zu beschreiben, damit man in der fachlichen Welt damit umgehen kann?

  • Das Objekt muss beschreibbar sein…​ Bekloppte Forderung, aber wichtig. Nichtbeschreibbare Phantasie-Wesen, wie Gott [Sorry], sind nicht beschreibbar und lässt sich nur schwer arbeiten.

  • Das Objekt muss abgrenzbar sein. Das heißt, dass ganz klar ersichtlich ist, was in dem Objekt inkludiert und was nicht. Nur so wissen wir, ob jedes Teilelement beschrieben, übergeben oder erfasst worden ist.

Daraus entwicklen wir mal folgendes Axium zur Objekt-Definition und nennen sie Entität. (Ich war nicht der Erste!)

Important

Eine Entität ist von außen durch seine Beschreibung abgrenzbar.

BÄNG!

Der DatenMeister

Inhalte

Dieses Dokument gibt dir einen kurzen, ungeordneten Überblick über verschiedene Aspekte des DatenMeisters.

Jedes Feature wird in einem Kapitel des Dokumentes behandelt und ist in jeweils drei Unterbereiche unterteilt:

  1. Eine Beschreibung für den Endnutzer

  2. Eine Beschreibung für den Modellierer des Datenmodells

  3. Eine Beschreibung des internen Verhaltens des DatenMeisters für Entwickler

  4. Eine Beschreibung der Software-Architektur und des Sourcecodes

Jedes Feature wird in Bezug auf diese vier Aspekte durchgegangen. Im Abschluss wird nochmals insgesamt über die SW-Architektur diskutiert.

Aktionen und Aktionssammlungen

Über die Aktionen kann der Nutzer des Datenmeister eine Sequenz von Aktivitäten definieren, die im DatenMeister-Kontext ausführbar sind.

Hierzu gibt es die beiden Basisklassen: . Action . ActionSet

ActionSet

Ein ActionSet (Aktionssammlung) sammelt verschiedene Aktionen.

Name Beschreibung

name

Name der Aktionssammlung

Action

Die Basisklasse Action repräsentiert eine Aktion. Allerdings muss diese Klasse abgeleitet werden, damit die Aktion konkretisiert wird.

Name Beschreibung

name

Name der Aktion

LoggingWriterAction

Schreibt einen fixen Text in das konfigurierte Logging.

Neben der Eigenschaften der Klasse Action werden folgende Eigenschaften unterstützt

Name Beschreibung

message

Nachricht, die in das Log geschrieben werden soll.

CommandExecutionHandler

Führt einen Prozess aus und wartet bis der Prozess abgeschlossen worden ist.

Neben der Eigenschaften der Klasse Action werden folgende Eigenschaften unterstützt

Name Beschreibung

command

Prozess, der gestartet wird. Der Prozess wird über System.Diagnostics.Process gestartet und sollte eine ausführbare Datei bezeichnen

arguments

Argumente, die dem Prozess mitgegeben werden

DropExtentAction

Löscht einen Extent aus der Datenbank.

Neben der Eigenschaften der Klasse Action werden folgende Eigenschaften unterstützt

Name Beschreibung

workspace

Workspace aus dem der Extent gelöscht werden soll.

extentUri

Uri des Extents welches gelöscht werden soll.

CreateWorkspaceAction

Erstellt einen neuen Workspace.

Neben der Eigenschaften der Klasse Action werden folgende Eigenschaften unterstützt

Name Beschreibung

workspace

Name des Workspaces welcher erzeugt werden soll.

annotation

Beschreibung des Workspaces

DropWorkspaceAction

Löscht einen Arbeitsbereich aus der Datenbank.

Neben der Eigenschaften der Klasse Action werden folgende Eigenschaften unterstützt

Name Beschreibung

workspace

Workspace aus der Datenbank gelöscht werden soll.

Plugins

Phasen

BeforeBootstrapping

Bevor der MOF und UML-Extent eingeladen wird und die Workspaces for MOF und UML zur Verfügung stehen

AfterBootstrapping

Nachdem die Workspaces for MOF und UML zur Verfügung stehen

AfterInitialization

Nachdem die internen Datentypen und der Extent Manager initialisiert worden sind.

AfterLoadingOfExtents

Nachdem der ExtentManager alle aktiven Extents eingeladen hat.

:leveloffset: 1

:leveloffset: +1

= Extents

== Das Laden von Extents

=== Konfigurationen

==== ExtentLoaderConfig

==== ExtentFileLoaderConfig

|Abgeleitet|ExtentLoaderConfig |Registriert über|Abstrakte Konfiguration

==== ExcelExtentLoaderConfig

Abgeleitet|ExtentFileLoaderConfig |Registriert über|Abstrakte Konfiguration

==== ExcelImportExtentLoaderConfig

Abgeleitet|ExcelExtentLoaderConfig |Registriert über|DatenMeister.Excel.Integration.ExcelPlugin

==== ExcelReferenceExtentLoaderConfig

|Abgeleitet|ExcelExtentLoaderConfig |Registriert über|DatenMeister.Excel.Integration.ExcelPlugin

==== InMemoryLoaderConfig

|Abgeleitet|ExtentLoaderConfig |Registriert über|DatenMeister.Integration.Integrator

==== XmiStorageLoaderConfig

|Abgeleitet|ExtentFileLoaderConfig |Registriert über|DatenMeister.Provider.XMI.XmiPlugin

==== XmlReferenceLoaderConfig

|Abgeleitet|ExtentFileLoaderConfig |Registriert über|DatenMeister.Integration.Integrator

==== CsvExtentLoaderConfig

|Abgeleitet|ExtentFileLoaderConfig |Registriert über|DatenMeister.Provider.CSV.CsvPlugin

:leveloffset: 2

:leveloffset: +1

= Datenansichten (DataViews)

Über Datenansichten erhält der Modellierer und Nutzer Zugriff auf Sammlungen von Objekten oder Instanzen von Objekten.

Die Datenansichten sind im Namespace DatenMeister.Models.Namespace definiert.

Eine Datenansicht referenziert einen Ansichtsknoten (ViewNode), der eines oder mehrere Objekte zurückgibt. Dieser Knoten können miteinander verkettet werden, damit auch komplexe Datenaggregationen möglich sind.

Wenn ein Datenknoten ein Objekt repräsentiert, so ist es alleinig in der Datensammlung vorhanden.

:leveloffset: 2

:leveloffset: +1

= Evaluierte Texte

Der DatenMeister bietet neben der statischen Zuordnung von Inhalten von Objekteigenschaften zu Texten auch eine Möglichkeit diese Eigenschaften mit Hilfe des Scriban Frame-Works zu evaluieren und so dynamischer die Inhalte der Objekte darstellen.

Das Scriban-Objekt {{i}} enthält das aktuelle Element, welche bearbeitet wird. Ist das aktuelle Objekt eine Person, so erhält man über "{{i.name}}"" den Namen der Person zurück. Über "Hallo {{i.prename}} {{i.name}}" begrüßt man ihn.

Das Präfix <% ist reserviert, um zukünftige Alternativen Evaluierer zu unterstützen.

Typischerweise kann die Evaluierung eines Texts über die Eigenschaft 'eval{Property}' gesteuert werden, wobei Property der Name der Eigenschaft ist, die üblicherweise die statische Zuordnung zwischen anzuzeigenden Inhalt und Objekt-Eigenschaft festlegt.

[%header,cols="1,5"]

===

Item Name

Description

i

Das Element, welches im Parser genutzt wird. Je nach Kontext kann dies ein Extent, eine Sammlung oder ein Element selbst sein.

v

Befindet sich der Parser gerade im Kontext eines Ansichtsobjektes, so enthält die Variable 'v' die Instanz des Ansicht. Dies kann zum Beispiel der Absatz sein, die Tabellen- oder Zellenbeschreibung.

===

:leveloffset: 2

:leveloffset: +1

= Formulare

Es gibt drei Arten von Hauptformularen:

* Detail-Formular * Listen-Formular * Extent-Formular (eigentlich sollte es Objekt-Formular heißen)

== Form

Das Formular im Allgemeinen unterstützt folgende Eigenschaften. Alle Ableitungen haben auch diese Eigenschaften zu unterstützen.

[%header,cols="1,5"]

===

Name

Bedeutung

name

Name des Formulars

title

Titel, wie er angezeigt wird

isReadOnly

Flag, ob das Formular im schreibgeschützten Modus angezeigt wird

hideMetaInformation

Wahr, wenn im Formular nicht automatisch die Meta-Informationen eines Objektes angezeigt werden soll.

originalUri

Da das Formular bei der Anzeige geklont wird, enthält diese Eigenschaft die Url vor dem Klonvorgang.

===

== ExtentForm

Ein Extent Form ist enthält einen Satz von Formularen um ein konkretes Objekt anzuzeigen.

Das Extent Form wird prinzipiell im Hauptfenster bei der Ansicht der Elemente eines Extents genutzt oder auch wenn der Nutzer im Hauptfenster ein konkretes Objekt ausgewählt hat.

=== Package Form Ein besonderes Formular ist die Listenansicht der Package-Objekte. Hier kann der Nutzer über die 'Eigenschaft' der preferredTypes festlegen, welche Klasseninstanzen bevorzugt in diesem Package angelegt werden können.

==== Implementierung Die Evaluierung erfolg im FormsPlugin per FormsModificationPlugin, welcher hier ein besonderes Regelwerk enthält.

Es können sich hier verschiedene Plugins registrieren, die nachträglich nochmals ein Formular verändern dürfen.

== ListForm Das Listenformular beschreibt eine Tabelle bzw. reine Auflistung einer Sammlung von Objekten:

[%header,cols="1,5"]

===

Name

Bedeutung

property

k.A.

metaClass

k.A.

includeDescendents

k.A.

noItemsWithMetaClass

k.A.

inhibitNewItems

k.A.

inhibitDeleteItems

k.A.

defaultTypesForNewElements

k.A.

fastViewFilters

k.A.

field

Diese Auflistung enthält die Felder, die in der Liste angezeigt werden sollen. Üblicherweise sind dies die Spalten der Tabelle

sortingOrder

Die Reihenfolge in der die Items angezeigt werden sollen.

viewNode

In diesem Formular kann nochmals konkreter über eine Datenansicht gefiltert oder verändert werden. Die eigentliche Liste wird als dynamische Datensammlung input übergeben.

===

== Feld-Typen

Jedes Formular besteht aus einer Sammlung von Feldern. Hier werden folgende Felder unterstützt

=== FieldData

Diese Basis-Klasse stellt die generischen Eigenschaften zur Verfügung, die von jedem Feld unterstützt werden sollten.

[%header,cols="1,5"]

===

Name

Bedeutung

name

Name des Feldes und der dahinterliegenden Eigenschaft des Objektes

title

Titel, der im Formular angezeigt wird

isEnumeration

Flag, ob die Inhalte hinter der Eigenschafte eine Aufzählung sind oder ein einzelnes Element. Diese Eigenschaft wird von manchen Feldtypen zur automatischen Gestatung genutzt.

defaultValue

Falls der Wert nicht gesetzt ist, kann hier der Wert der Standard-Eigenschaft definiert werden.

isReadOnly

Flag, ob das Feld nicht beschreibbar ist.

===

=== TextFieldData

Dieses Feld drückt ein Text-Eingabefeld aus in dem der Nutzer einen freien Text eintragen kann.

Neben der Eigenschaften der FieldData werden noch folgende Eigenschaften unterstützt:

[%header,cols="1,5"]

===

Name

Bedeutung

lineHeight

Anzahl der Zeilen, die angezeigt standardmäßig angezeigt werden sollen

width

Breite in logischen Pixeln, die das Feld standardmäßig haben soll.

===

=== EvalTextFieldData

Diese Erweiterung des Textfelds unterstützt die dynamische Auswertung von Inhalten. Dies ist im besonderen relevant bei der Report-Erstellung, da hier das Format und andere Eigenschaften dynamisch ausgewertet werden können.

Nebenn der Eigenschaften der TextFieldData werden folgende Eigenschaften unterstützt: [%header,cols="1,5"]

===

Name

Bedeutung

evalCellProperties

Das Skript, das zur Erstellung der Zelle ausgewertet wird.

--Die Variable 'i' beschreibt das aktuell betrachtete Element

- Die Variable 'c' die aktuelle Zelle. Die Eigenschaften des Zelle sind abhängig von verwendeten Report.

- Die Variable 'r' der Zustand der aktuellen Zeile, wie sie im ListForm in der Eigenschaft 'evalRowProperties' definiert werden kann.

===

:leveloffset: 2

:leveloffset: +1

= Reports

Prinzipiell gibt es zwei verschiedene Arten von Reports für den Nutzer:

. Die einfachen Reports (SimpleReports) . Der vollständige Html Report (HtmlReportCreator)

== Einfache Reports

Von jedem beliebigen Extent kann über das Auswählen des Menüs 'Create Report' ein einfacher Report über die aktuelle Ansicht generiert werden.

TODO: BILD

Alternativ kann der Nutzer eine Instanz des Elements 'SimpleRpeortConfiguration' anlegen. In der Detailansicht des Elements wird ein Knopf 'Create Report' angelegt. Über diesen kann der Nutzer dann den Extent oder das Element auswählen über den der Report erzeugt werden soll.

TODO: Bild

Es wird eine zufällige Datei auf der Festplatte erzeugt, die dann über den Standardbrowser angezeigt wird.

== Der Html Report

Ein Report wird über zwei Konfiguration definiert:

. Über einer ReportDefinition kann der Nutzer das Format und die Elemente des Reports definieren. Dieses ist noch nicht mit den Datenquellen gekoppelt. . Über die ReportInstance wird dann der eigentliche Report instanziiert. Hier werden die Datenquellen mit der Report Definition verknüpft.

=== Report Definition

=== Report Instance

Die Report Instance besteht aus einer Referenz zur ReportDefinition und den Quellen der Daten. Diese verbinden den Namen der Quelle zu einer Url über die der DatenMeister die Daten einliest.

Das Auflösen der Url in der Quelle erfolgt mit Hilfe des WorkspaceResolvers des dazugehörigen Arbeitsbereiches.

Definition ReportInstance:

===

name

Name der Reportinstanz

reportDefinition

Referenz auf die Definition des Reports

sources

Sammlung von ReportInstanceSources, die dem Nutzer pro Report erlauben unterschiedliche Quellen anzugeben.

===

Definition ReportInstanceSource:

===

name

Name der Quelle

url

Url um das Extent, die Sammlung oder das Objekt zu referenzieren.

===

=== ReportParagraph: Drückt einen Absatz im Report aus. Dieser kann einen statischen Text beinhalten oder auch dynamisch über evalParagraph oder evalProperties erzeugt werden.

===

name

Name des Elements

paragraph

Standardtext, der angezeigt wird

viewNode

Falls eine Evaluierung stattfindet, beschreibt die ViewNode-Abfrage welches Objekt selektiert wurde. Das selektierte Objekt ist über die Instanz 'i' in den Parsern verfügbar.

cssClass

CSS-Klasse der Tabelle

evalParagraph

Wird gesetzt, wenn der Absatztext dynamisch erzeugt wird.

evalProperties

Wird gesetzt, wenn über den TemplateParser die Eigenschaften der Ansicht geändert werden soll. Die Definition des Absatz selbst ist über 'v' erreichbar.

===

=== ReportTable Beschreibt eine Tabelle, die die Elemente eines ViewNodes ausdrückt. Über eine Formulardefinition werden die Spalten der Tabelle definiert.

===

name

Name des Elements

viewNode

Beschreibt die dynamische Abfrage, die die Elemente selektiert, die in der Tabelle angezeigt werden sollen

form

Definiert das Formular. Dieses Formular soll vom Type ListForm instanziiert sein.

cssClass

CSS-Klasse der Tabelle

evalProperties

Führt eine Evaluierung aus. Die Elemente selbst sind über 'items' abrufbar.

===

:leveloffset: 2

:leveloffset: +1

= SW-API

== DatenMeister.dll

=== Module Runtime.ExtentStorage

Prinzipiell ist der DatenMeister in der Lage mit entkoppelten Extents zu arbeiten. Dies bedeutet, dass man Extents laden kann, die ohne zentralisierte Registrierung genutzt, bearbeitet und wieder gespeichert werden können.

Der DatenMeister unterstützt aber parallel eine zentrale Registrierung über den ExtentManager, welcher das Laden, das Sperren und das abgesicherte Abspeichern bei Beendigung der Applikation unterstützt.

Es gibt damit insgesamt zwei Datenbanken in den die Extents gespeichert werden.

. Innerhalb der Workspaces (WorkspaceLogic.GetWorkspaces()) sind die Extents eingefügt. Hierüber können Extents im normalen Datenbankprinzip gefunden werden. Hier ist aber nicht bekannt über welchen ProviderLoader das Extent von welcher Quelle geladen worden ist.

. Über die Registrierung des ExtentManager (ExtentStorageData) werden geladene Extents zum Zwecke der Nachverfolgung bein Locking und Speichern gespeichert. Der ExtentManager weist auch die genutzter ProviderLoader Config dem Extent zu.

Folgende Methoden werden bei der Verwendung von Extents genutzt:

* Beim Einladen über LoadExtent wird das Extent eingeladen und registriert. Beim Einladen wird das Extent über seinen Provider auch gesperrt.

* Beim Entladen über DetachExtent wird das Extent deregistriert, aber nicht gespeichert. Das Extent wird über seinen Provider auch wieder entsperrt.

* Über LoadAllExtents findet das Einladen der ExtentLoaderConfig statt, die von der vorherigen Instanz speichert, welche Extents beim Hochfahren einzuladen sind. Das Einladen erfolgt dann auch über LoadExtent und führt damit zu einer Sperrung der Extents.

* Über StoreAllExtents findet ein Write Trigger über alle geladenen und registrierten Events statt.

* Über DeleteExtent wird das Extent nicht nur aus der Registrierung entfernt, sondern auch aus dem Workspace genommen.

* Über UnloadManager werden die Extents entladen und der Zugriff auf die Registrierungs-Datei komplett aufgehoben. Die Extents selbst sind noch in den Workspaces, werden aber nicht mehr über den ExtentManager nachverfolgt.

== Module.Reports

Die Generierung von Reports wird von zwei Report Generatoren unterstützt:

* SimpleReport * TextReport

=== Simple Report

Implementiert in den Klassen SimpleReportConfiguration und SimpleReportCreator

=== Text Report

:leveloffset: 2

:leveloffset: +1

= Übersetzungen

Folgende Übersetzungen gelten zwischen dem Deutschen und dem Englischen

[%header]

===

Deutsch

Englisch

Arbeitsbereich

Workspace

Datenansicht

Dataview

:leveloffset: 2

:leveloffset!: