Systemstruktur - mehr als nur Mandanten

Die sogenannte Systemstruktur in Schleupen.CS ist in erster Näherung ein erweitertes Mandantenkonzept: Hiermit ist es möglich, organisatorische Strukturen, die über Mandanten hinausgehen, abzubilden. Damit ist es möglich, mehrere Werke in einem Schleupen.CS-System mit unterschiedlichen Konfigurationen zu betreiben. Die Systemstruktur kommt direkt beim Login des Portals zum Vorschein. In dem Login-Dialog wählt man einen Knoten - das Systemstrukturelement - aus, so dass man in dem entsprechenden Kontext arbeitet.

Systemstruktur - konzeptionell und im Login-Dialog des Portals

Die Systemstruktur ist prinzipiell sehr flexibel. So können Systemstrukturelementknoten, bestehend aus einem Typ und einem Namen definiert werden. Aber auch Systemstrukturelementtypen können selber definiert werden.

Schleupen.CS liefert folgende Standard-Systemstrukturelementtypen aus: System, Systemkatalog, Gesellschaftskatalog, Gesellschaft, Werkskatalog, Werk, Mandant. Standard-Systemstrukturelementtypen sind zu bevorzugen, da hier Konventionen angewendet werden, die das Einrichten des Systems vereinfachen. 

Im Beispiel der Abbildung gibt es also u.a. folgende Systemstrukturelemente:

  • System vom Typ System
  • Systemkatalog vom Typ Systemkatalog
  • StadtwerkMoers Huelsdonk vom Typ Gesellschaftskatalog
  • LieferantMoers Huelsdonk1 vom Typ Mandant

Ein Systemstrukturelement definiert aus technischer Sicht einen Datenkontext auf dem die Services zur Laufzeit operieren.

Systemstruktur und Datenbanken

Jeder Service erhält dazu im SOAP-Header ein sogenanntes SessionToken, das ein Systemstrukturelement adressiert. Mithilfe dieses SessionTokens ermittelt der Service die zugehörige Datenbank des Systemstrukturelements. 

SOAP-Message mit SessionToken
Echtes SessionToken in Postman

Die Systemstruktur und die Zuordnung der Datenbanken zu Systemstrukturelementen kann einfach administriert werden.

Wie passen der Datenkontext und die Möglichkeit, jeden Microservice in einer Datenbank zu betreiben, zusammen?

Dies sind zwei querschnittliche Aspekte. Jeder Micorservice hat sein eigenes Datenbank-Schema. In welcher Datenbank dieses deployed wird, ist dabei nicht relevant. Aus Microservices-Sicht ist relevant, dass keine Kopplung auf DB-Ebene zwischen den verschiedenen Microservices existiert. Somit ist es möglich, jedes Datenbank-Schema in einer eigenen Datenbank zu deployen. Rechnet man Systemstruktur und die Anzahl der Bausteine zusammen, entsteht schnell eine Anzahl von über 1000 Datenbanken.

Betrachten wir hierzu folgendes Beispiel:

Die Anwendung Schleupen.AS.MT.BIB_Bibliotheksverwaltung kann für den Knoten Mandant 11 ihr DB-Schema MT_BIB in der "Standard-Datenbank" DB_11 deployed haben. Diese "Standard-Datenbank" beinhaltet im Standard alle Schemata aller Länder. Es ist aber sehr einfach möglich, das System so zu konfigurieren, dass das DB-Schema MT_BIB in einer anderen Datenbank DB_11_2 separiert wird und über den Knoten Mandant 11 automatisch verwendet wird. Somit ist es prinzipiell möglich, dass jeder Microservice eine eigene Datenbank besitzt. Hierauf wird in kleinen Systemen verzichtet, da man schnell auf eine hohe Anzahl an Datenbanken kommt.

ServiceImplementationGroups und Katalog-Services

Eine ServiceImplementationGroup (oder auch kurz SIG) ist eine Menge von Services, die zusammen auf dem gleichen Systemstrukturknoten registriert werden können. Diese Menge an Service kann durch ein Land definiert sein, ist im Allgemeinen aber auch bausteinübergreifend konfiguriert. Diese Menge an Services kann wiederum per Konfiguration einem Systemstrukturknoten zugeordnet werden. Dann operieren diese Services dann quasi auf "immer" auf diesen Knoten, haben also immer denselben Datenkontext.

Definition und Registrierung einer Serviceimplementierungsgruppe

Das nachfolgende Beispiel versucht, das Konzept genauer zu erläutern: es ist mehr als der reine Datenkontext!

Wechsel des Datenkontextes in der Systemstruktur

Gegeben sei die in der vorstehenden Abbildung dargestellte Systemstruktur u.a. mit den Systemstrukturelementen Mandant B vom Typ Mandant sowie Gesellschaft vom Typ Gesellschaftskatalog. Bei der Anmeldung im Portal wird ein SessionToken für den Kontext Mandant B erstellt. Zum Abschluss des Dialogablaufs zur Ausleihe eines Buchs werde in unserem Beispiel ein Activity Service mit der ServiceId Schleupen.CS.MT.BIB.Benutzerkonten.BuecherAusleihenActivityService_3.2 aufgerufen. Dieser sei der Serviceimplementierungsgruppe Bibliotheksverwaltung zugeordnet. Diese Serviceimplementierungsgruppe sei wiederum dem Knoten Gesellschaft vom Typ Gesellschaftskatalog zugeordnet. Da jeder Service-Aufruf in Schleupen.CS über den Broker geht, wird das SessionToken auf den Datenkontext umgeschrieben, auf dem die Serviceimplementierungsgruppe registriert ist. In unserem Beispiel also zu einem SessionToken für den Gesellschaftsknoten. Mit diesem Knoten wird der Zielservice durch den Broker aufgerufen.

Der Broker ermittelt dabei die Serviceimplementierungsgruppe anhand der Service-Registry. Das SessionToken wird dabei im SOAP-Header gelesen und für den Ziel-Service gesetzt. Mit Hilfe eines Infrastruktur-Service ermittelt die Service-Implementierung dann anhand des SessionTokens die dem Systemstrukturelementknoten zugeordnete Datenbank (Datenkontext).

Anmerkung: Einem Systemstrukturelement können mehrere Datenbanken zugeordnet werden. Da ein Schema einem Microservice gehört, kann pro Systemstrukturelement jeder Microservice eine eigene Datenbank mit seinem Schema haben und somit kann der Microservice möglichst autonom operieren.

Der hier dargestellte Suchalgorithmus ('von unten nach oben') gilt für alle Servicekategorien außer für Event-Services. Für Event-Services erfolgt die Suchstrategie entsprechend von oben nach unten.

In SIG-Regelwerk wird u.a. das Regelwerk beschrieben, wie Services den zugehörigen Datenkontext finden!

Startbarkeit der Dialogabläufe in der Systemstruktur

Über Serviceimplementierungsgruppen kann auch gesteuert werden, an welchen Systemstrukturelementen ein Prozess in der Oberfläche über das Dialogstartmenü gestartet werden kann. Dazu muss die jeweilige Serviceimplementierungsgruppe dem Dialogablauf zugeordnet werden. Eine Zuordnung ist für Dialogabläufe im Gegensatz zu Services allerdings nicht zwingend erforderlich: Wenn ein Dialogablauf keiner Serviceimplementierungsgruppe zugeordnet ist, kann der Dialogablauf „überall gestartet werden“ - egal an welchem Systemstrukturelement ein Anwender sich anmeldet.

Ohne SIG-Zuordnung können Dialogabläufe überall gestartet werden

Wenn ein Dialogablauf einer Serviceimplementierungsgruppe zugeordnet ist, wird wie bei Aufrufen von Services „nach oben navigiert“. Wenn die SIG auch dem Systemstrukturelement zugeordnet ist, an dem der Anwender angemeldet ist, dann kann der Prozess gestartet werden. Andernfalls wird das nächst höhere Systemstrukturelement überprüft. Wenn auf dem Pfad zur Wurzel die Serviceimplementierungsgruppe nirgendwo zugeordnet ist, kann der Prozess nicht gestartet werden.

SIG-Zuordnung von Dialogabläufen
Sonderfall: Benutzerverwaltung am System

Die Benutzerverwaltung stellt derzeit einen Sonderfall dar, da diese nur auf dem Systemstrukturelement System gestartet werden soll.
Um diese Bedingung zu erfüllen, muss an einem Dialogablauf die Zuordnung zu einer Pseudo-SIG „#System“ angegeben werden.

Sonderfall Benutzerverwaltung
Cookie Consent mit Real Cookie Banner