f_koenig
Returning Observer

Strukturvariablen über CaaS

Jump to solution

Hallo,

wie kommen wir über den CaaS an die Strukturvariablen heran? Bei Abfrage von Seiten über die REST-API werden die Werte nicht mitübermittelt.

Danke und viele Grüße
Fabian

0 Kudos
1 Solution

Accepted Solutions

OK, danke.

Hier mal mein fertig funktionierendes Skript, falls es mal jemand benötigt:

import de.espirit.firstspirit.access.store.pagestore.Page;
import de.espirit.firstspirit.access.store.sitestore.PageRef;
import de.espirit.firstspirit.access.store.sitestore.PageRefFolder;
import de.espirit.firstspirit.store.access.sitestore.SiteStoreRootImpl;

// Strukturvariable ss_division
ss_division = "";

// Ordner rekursiv nach oben durchlaufen
recurse(folder) {
    if (folder != null && (folder instanceof PageRefFolder || folder instanceof SiteStoreRootImpl) ) {

        // Strukturvariablen auslesen
        data = folder.getData();
        dataValue = data.get("ss_division");

        // Variablen nicht überschreiben
        if (ss_division.equals("") && dataValue != null) {
            ss_division = dataValue.getEditor().get(language);
        }

        // Weiter nach oben rekursieren
        recurse(folder.getParentFolder());
    }
}

// Für jede Seite
if (e instanceof PageRef) {
    recurse(e.getParentFolder());

    // Strukturvariable ss_division
    customData.put("ss_division", ss_division);
}

Gibt es eigentlich einen speziellen Grund warum die Strukturvariablen nicht automatisch im Navigation Service ausgegeben werden?

View solution in original post

0 Kudos
9 Replies
Peter_Jodeleit
Crownpeak employee

Das ist korrekt, Strukturvariablen werden nicht über den CaaS bereitgestellt.
Könnt ihr den Anwendungsfall erläutern, für den ihr Strukturvariablen einsetzt?

Peter
0 Kudos

Wir nutzen das recht häufig um Teilbäumen unserer Website Werte mitzugeben.

Wenn also z. B. Seiten in diesem Teilbaum Informationen zum Thema "X" beinhalten setzen wir eine Strukturvariable "ss_productinfo" = "X". Dann können wir auf allen Unterseiten in den Templates oder Skripten mit dieser Variable arbeiten.

Ich hätte daher eigentlich erwartet, dass diese Daten auch bei einem Headless-Konsum der Daten verfügbar sind, z. B. im Navigation Service oder eben im CaaS. 

Was für Möglichkeiten haben wir denn hier sonst?

0 Kudos

Der Weg dafür ist über ein Custom-Data-Element im Navigation Service.

Peter
0 Kudos

OK, danke. Ich habe die Dokumenation zu den Custom-Data-Elementen im Navigation Service gefunden. Hast du noch einen Hinweis für mich, wie ich innerhalb des Skriptes navigation_service_custom_data die Strukturvariablen auslesen kann um sie entsprechend zu übergeben?

0 Kudos

Hilft dir das Beispiel hier: https://docs.e-spirit.com/odfs/access/de/espirit/firstspirit/access/store/sitestore/PageRefFolder.ht... 

try to retrieve a DataValue (variable) with desired name

 

Peter
0 Kudos

Ja, das hilft mir, danke.

Ich habe es jetzt so weit:

import de.espirit.firstspirit.access.store.sitestore.PageRef;

if (e instanceof PageRef) {
    folder = e.getParentFolder();
    if (folder != null) {
        data = folder.getData();
        variableName = "ss_division";
        dataValue = data.get(variableName);

        if (dataValue != null) {
            customData.put(variableName, dataValue.getEditor().get(language));
        }
    }
}

Allerdings kann ich mit getParentFolder() immer nur den direkt parent SiteStoreFolder holen und dort auf die Variable prüfen. Die Strukturvariablen dagegen sind ja rekursiv. Gibt es dazu eine gute Lösung oder muss ich manuell rekursiv nach oben durch die Struktur iterieren bis ich einen Folder gefunden habe an dem der Wert gesetzt ist, bzw. bis ich am Root-Knoten angekommen bin?

0 Kudos

Das sieht doch sehr gut aus.

Und ich glaube ihr müsst da selber rekursiv die Hierarchie hoch gehen, zumindest kenne ich keine andere Möglichkeit.

Peter
0 Kudos

OK, danke.

Hier mal mein fertig funktionierendes Skript, falls es mal jemand benötigt:

import de.espirit.firstspirit.access.store.pagestore.Page;
import de.espirit.firstspirit.access.store.sitestore.PageRef;
import de.espirit.firstspirit.access.store.sitestore.PageRefFolder;
import de.espirit.firstspirit.store.access.sitestore.SiteStoreRootImpl;

// Strukturvariable ss_division
ss_division = "";

// Ordner rekursiv nach oben durchlaufen
recurse(folder) {
    if (folder != null && (folder instanceof PageRefFolder || folder instanceof SiteStoreRootImpl) ) {

        // Strukturvariablen auslesen
        data = folder.getData();
        dataValue = data.get("ss_division");

        // Variablen nicht überschreiben
        if (ss_division.equals("") && dataValue != null) {
            ss_division = dataValue.getEditor().get(language);
        }

        // Weiter nach oben rekursieren
        recurse(folder.getParentFolder());
    }
}

// Für jede Seite
if (e instanceof PageRef) {
    recurse(e.getParentFolder());

    // Strukturvariable ss_division
    customData.put("ss_division", ss_division);
}

Gibt es eigentlich einen speziellen Grund warum die Strukturvariablen nicht automatisch im Navigation Service ausgegeben werden?

0 Kudos

Vielen Dank, ich habe dein Skript als Lösung markiert.

Alle Site-Store Variablen im Navigation Service zu haben ist nicht das, was alle tatsächlich alle Kunden wollen. Neben dem Nachteil der erhöhten Payload sind die Anforderungen hier (nur bestimmte Variablen, nur bestimmte Werte, mit oder ohne "Vererbung", etc.) zu unterschiedlich.

Peter
0 Kudos