Module-Konfiguration
Konfigurations-Daten können innerhalb eines Moduls abgelegt werden. Module können Konfigurationen für das gesamte System oder einzelner Mandanten enthalten.
Die Konfigurationen der CMS-Seite werden im Kunden-Modul unterhalb von src/main/webapp/WEB-INF/config/
im JSON-Format abgelegt.
Soll die Konfiguration nur für einen Mandanten gelten muss sie unterhalb von src/main/webapp/WEB-IES/config/client/[anchor]
angegeben werden.
Wobei [anchor]
dem Anchor des Mandanten entsprechen muss. Dies ist für Kunden-Module immer zu empfehlen.
Sollte es notwendig sein in einem Kunden-Modul mehrere Mandate zu konfigurieren empfiehlt sich die Verwendung einer Master-Konfiguration.
Hierarchie-Ebenen von Konfigurations-Schlüsseln
Der Resultierende Konfigurations-Schlüssel für einen Konfigurations-Wert ergibt sich aus Verzeichnis-Namen, Datei-Namen und JSON-Objekt-Schlüssel.
Konfigurations-Datei sectionTypes.json
:
{
"text" : {
"name" : "Text-Abschnitt"
}
}
dies ergibt den Konfigurations-Schlüssel sectionTypes.text.name
Konfigurations-Datei sectionTypes/text.json
:
{
"name" : "Text-Abschnitt"
}
dies ergibt den Konfigurations-Schlüssel sectionTypes.text.name
Enthält ein JSON-Objekt-Schlüssel Punkte werden diese auch als Hierarchie-Ebene interpretiert.
Konfigurations-Datei sectionTypes.json
:
{
"text.name" : "Text-Abschnitt"
}
dies ergibt den Konfigurations-Schlüssel sectionTypes.text.name
Überschreiben und ergänzen von Konfigurationen
Konfigurationen werden überschrieben, indem verschiedene Ebenen nacheinander geladen und überlagert werden. Hierbei wird wie folgt vorgegangen:
- Für alle Module wird geprüft, ob es eine
src/main/webapp/WEB-INF/config/
Verzeichnis gibt. Ist dies der Fall, wird aus diesen Daten ein grosses JSON-Objekt erzeugt und als Konfiguration abgelegt und mit den bereits geladenen Modul-Konfigurationen zusammengeführt. - Für jeden Mandanten wird diese Basis-Konfiguration kopiert und das Konfigurations-JSON-Objekt client.[anchor] mit der Basis-Konfiguration zusammengeführt.
- Für die Mandanten-Konfiguration wird der Konfiguration-Schlüssel
client
entfernt.
Konfigurationen überschreiben und ergänzen
Das SiteKit selber stellt bereits einen großen Satz an Konfigurationen zur Verfügung, die Kundenindividuell angepasst werden können.
Die Konfigurationen im SiteKit-Modul sind Mandanten-Übergreifend und liegen daher unterhalb von src/main/webapp/WEB-INF/config/
Das Kunden-Modul kann diese Konfiguration Mandanten-spezifisch überschreiben und ergänzen. Dabei gelten folgende Regeln.
- JSON-Objekte werden zusammengeführt.
- JSON-Objekte überschreiben die vorherigen Daten, wenn es kein JSON-Objekt ist
-
null
, Zahlen, Zeichenketten und JSON-Arrays überschreiben die vorherigen Daten.
Basis Konfiguration:
{
"value" : "Text",
"array" : [ 1, 2, 3 ],
"object" : {
"value" : "Text",
"object" : {
"text" : "Text"
}
},
"x" : "X"
}
Ergänzende Konfiguration:
{
"value" : 1,
"array" : [ 3, 4, 5 ],
"object" : {
"value" : {
"value" : 1
},
"object" : 1
},
"y" : "Y"
}
Resultierende Konfiguration:
{
"value" : 1,
"array" : [ 3, 4, 5 ],
"object" : {
"value" : {
"value" : 1
},
"object" : 1
},
"x" : "X",
"y" : "Y"
}
Konfigurationen referenzieren
Um redundante Konfigurationen zu vermeiden, können Teile aus der Konfiguration an anderen Stellen wiederverwertet werden. Hierbei wird die Referenz aufgelöst und an der entsprechenden Stelle als Kopie eingefügt. Diese eingefügte Konfiguration kann geändert und ergänzt werden, die ursprünglichen Daten zu verändern.
Hier wird der Doppelpunkt (:
) vor dem zu referenzierenden Schlüssel gestellt. Dadurch wird erkannt das es sich um eine
Referenz handelt und der Wert wird aufgelöst und an die Stelle eingefügt.
Einzelne Werte übernehmen
Werte werden übernommen, in dem die Referenz an der gewünschten Stelle eingefügt wird.
Basis Konfigurations Datei test.json
:
{
"path.to.data" : {
"value" : "Text",
"object" : {
"value" : "Text"
}
}
}
Ergänzende Konfigurations Datei test.json
:
{
"value" : ":test.path.to.data.value",
"object" : ":test.path.to.data.object",
"array" : ["Text 2", ":test.path.to.data.value"]
}
Resultierende Konfiguration:
{
"test" : {
"path.to.data" : {
"value" : "Text",
"object" : {
"value" : "Text"
}
},
"array" : ["Text 2", "Text"],
"value" : "Text",
"object" : {
"value" : "Text"
}
}
}
Objekte erweitern
Manchmal ist es notwendig Daten nicht nur zu übernehmen, sondern auch zu überschreiben und zu ergänzen. Dies kann nur innerhalb eines Objektes erfolgen, wobei alle Daten eines referenzierten Objektes übernommen werden.
Dazu wird innerhalb des Objektes, in dem die Daten übertragen werden sollen ein Key :
gesetzt der Wert entspricht dann der Referenz
{
":" : "path.to.data"
}
Die Daten von path.to.data
müssen auch ein JSON-Objekt sein dessen Daten in das gewünschte Objekt übertragen werden.
Alternativ kann auch ":path" : "to.data"
oder ":path.to" : "data"
verwendet werden.
Basis Konfigurations Datei test.json
:
{
"path.to.data" : {
"value" : "Text",
"object" : {
"value" : "Text",
"array" : [1, 2],
"object" : {
"data" : {
"value" : "Text"
}
}
}
}
}
Ergänzende Konfigurations Datei test.json
:
{
"object" : {
":" : "test.path.to.data.object",
"array" : [3],
"object" : {
"data.value" : "Text 2"
}
}
}
Resultierende Konfiguration:
{
"test" : {
"path.to.data" : {
"value" : "Text",
"object" : {
"value" : "Text",
"array" : [1, 2],
"object" : {
"data" : {
"value" : "Text"
}
}
}
},
"object" : {
"value" : "Text",
"array" : [3],
"object" : {
"data" : {
"value" : "Text 2"
}
}
}
}
}
Konfiguration über SPML verwenden
Die gesamte Konfiguration ist über SPML erreichbar. Das Konfigurations-Objekt ist über system.config
erreichbar.
Beispiel:
<sp:print name="system.config.x.y"/>
Master-Konfiguration
TODO