JSON-Funktion: JSON-Ausgabe von Metadaten konfigurieren
Inhaltsverzeichnis |
Metadaten sind zusätzliche Informationen, die für ein Objekt in FirstSpirit zur Verfügung stehen. Neben den systemspezifischen Metadaten (wie z. B. „letztes Änderungsdatum“) können auch projektspezifische Metadaten gepflegt werden.
Projektspezifische Metadaten werden über eine Metadaten-Vorlage (siehe Optionen (→Dokumentation für Administratoren)) für das Projekt definiert und können anschließend auf den entsprechenden FirstSpirit-Objekten (z. B. auf einer Seite oder Seitenreferenz) auf dem Register „Metadaten“ über ein Formular gepflegt werden. Teilweise werden diese projektspezifischen Metadaten hierarchisch gepflegt. Das heißt, die Metadaten werden einmal auf dem Wurzelknoten der Verwaltung oder einem Teilbaum gepflegt und dann automatisch an alle hierarchisch untergeordneten FirstSpirit-Objekte vererbt (z. B. bei der Definition von Benutzerrechten über die Eingabekomponente CMS_INPUT_PERMISSION).
Siehe dazu auch
Metadaten können in eine JSON-Objektstruktur überführt werden. Das JSON-Ausgabeformat berücksichtigt dabei die auf dem jeweiligen FirstSpirit-Objekt (Seiten, Seitenreferenzen, Medien) persistierten Metadaten zum Zeitpunkt der Generierung. Die Ausgabe enthält dann das Attribut metaFormData (siehe Beispiel).
Ein Spezialfall ist die JSON-Ausgabe von Benutzerrechten, die über die Eingabekomponente CMS_INPUT_PERMISSION auf dem Register „Metadaten“ für ein Objekt definiert wurden (siehe dazu JSON-Ausgabe von Benutzerrechten).
Konfiguration der JSON-Ausgabe
Die JSON-Ausgabe der Metadaten kann über die JSON-Funktion konfiguriert werden.
Dabei können auch Metadaten ausgegeben werden, die nicht auf dem Objekt selbst definiert, sondern von einem hierarchisch übergeordneten Objekt geerbt wurden.
metadataRendering: Metadaten ausgeben (Standardeinstellung: true)
Die JSON-Ausgabe von Metadaten kann über den Schalter $CMS_SET(#global.json.metaDataRendering, <BOOLEAN>)$ (Standardeinstellung: true) aktiviert bzw. deaktiviert werden.
$CMS_SET(#global.json.metaDataRendering, true)$
Mit der Einstellung $CMS_SET(#global.json.metaDataRendering, true)$ (Standardeinstellung) werden die Metadaten aller Objekte ausgegeben. Sind keine Metadaten gesetzt, so wird ein leeres Element ausgegeben.
$CMS_SET(#global.json.metaDataRendering, false)$
Mit der Einstellung $CMS_SET(#global.json.metaDataRendering, false)$ wird die JSON-Ausgabe von Metadaten explizit ausgeschaltet.
metaInheritanceRendering: Geerbte Metadaten ausgeben (Standardeinstellung: false)
Die JSON-Ausgabe von geerbten Metadaten kann über den Schalter $CMS_SET(#global.json.metaInheritanceRendering, <BOOLEAN>)$ (Standardeinstellung: false) aktiviert bzw. deaktiviert werden.
$CMS_SET(#global.json.metaInheritanceRendering, false)$
In der Standardeinstellung $CMS_SET(#global.json.metaInheritanceRendering, false)$ werden nur Metadaten ausgegeben, die auf dem Objekt selbst definiert wurden. Sind auf dem Objekt selber keine Metadaten definiert, wird über das Attribut metaFormData ein leerer Wert ausgegeben, auch dann, wenn das Objekt über geerbte Metadaten verfügt.
$CMS_SET(#global.json.metaInheritanceRendering, true)$
In der Einstellung $CMS_SET(#global.json.metaInheritanceRendering, true)$ werden Metadaten ausgegeben, die nicht auf dem FirstSpirit-Objekt selbst definiert wurden, sondern auf einem hierarchisch übergeordneten Objekt. Die geerbten Metadaten werden in eine JSON-Objektstruktur überführt. Dabei werden die zum jeweiligen Zeitpunkt gültigen Werte des nächsthöheren Objektes verwendet, für das die entsprechenden Metadaten definiert wurden (bis hin zum Wurzelknoten des Verwaltungsbereichs).
Änderungen an einem vererbenden Knoten führen nicht dazu, dass die erbenden Knoten als geändert angesehen werden. Wird die Vererbung der Metadaten aktiviert, so muss mit einem geeigneten Mechanismus dafür gesorgt werden, dass die Daten entsprechend aktualisiert werden. |
Besonderheiten bei der Ausgabe von vererbten Metadaten
$CMS_SET(#global.json.metaInheritanceRendering, true)$: Bei der Ausgabe von vererbten Metadaten werden die Metadaten der hierarchisch übergeordneten FirstSpirit-Objekte ausgewertet. Ausgehend vom Ursprungsobjekt wird nach und nach die gesamte Elternkette durchlaufen, solange bis ein Objekt gefunden wurde, für das Metadaten definiert wurden. Die Auswertung endet beim Wurzelknoten der Verwaltung (einschließlich).
Dabei gilt: Ist auf einem FirstSpirit-Objekt im Metadaten-Formular die Eingabekomponente, die die Metadaten enthält, nicht gesetzt, so wird der Wert des nächsthöheren FirstSpirit-Objekts ausgewertet. Eine Eingabekomponente gilt als nicht gesetzt, wenn die Anweisung isSet() den Wert false zurückliefert, ein Objekt also im aktuellen Kontext nicht verfügbar ist. Dieser Zustand ist erreicht, wenn eine Eingabekomponente nie gesetzt wurde oder eine einmal gesetzte Eingabekomponente mit NULL überschrieben wird, z. B. über ein Skript (siehe Beispiel: „Eingabekomponente auf 'Nicht gesetzt' schalten“).
Das einfache Löschen eines Wertes in der Eingabekomponente genügt nicht. In diesem Fall ist die Eingabekomponente zwar leer (isEmpty() == true), aber weiterhin gesetzt (isSet() == true) (vgl. API-Dokumentation, Interface FormField FormField, Methode isEmpty()).
Beispiele
JSON-Ausgabe von geerbten Metadaten
{
"fsType": "PageRef",
"name": "pt_metadata_selective_1",
"displayName": "pt_metadata_selective",
"identifier": "15ff7b8d-9059-4721-b92b-e697e153fc85",
"uid": "pt_metadata_selective_1",
"uidType": "SITESTORE_LEAF",
"metaDataIsInherited": true,
"metaFormData": {
"meta_field1": {
"fsType": "CMS_INPUT_TEXT",
"name": "meta_field1",
"identifier": "meta_field1",
"value": null,
"valueSchema": {
"type": "null"
}
},
"meta_field2": {
"fsType": "CMS_INPUT_TEXT",
"name": "meta_field2",
"identifier": "meta_field2",
"value": "value_field2_set",
"valueSchema": {
"type": "string"
}
},
"meta_field3": {
"fsType": "CMS_INPUT_DATE",
"name": "meta_field3",
"identifier": "meta_field3",
"value": null,
"valueSchema": {
"type": "null"
}
}
},
(...)
Eingabekomponente auf 'nicht gesetzt' schalten
Eingabekomponente FS_BUTTON:
<FS_BUTTON name="meta_field1" noBreak="yes" onClick="script:delete_meta_data">
<LANGINFOS>
<LANGINFO lang="*" label="Delete meta data"/>
<LANGINFO lang="DE" label="Metadaten entfernen"/>
</LANGINFOS>
<PARAMS>
<PARAM name="meta_data">#field.meta_field1</PARAM>
</PARAMS>
</FS_BUTTON>
Skript („delete_meta_data“):
import de.espirit.firstspirit.forms.FormField;
if (meta_data instanceof FormField) {
meta_data.set(null);
}