mfinsterbusch
New Responder

generation-variable in project-setting-template available?

Jump to solution

Hallo Zusammen,

kann es sein, dass die Generierungsvariablen nicht in den Ausgabekanälen des Projekteinstellungstemplate verfügbar sind?

Ist das "gewünschtes Verhalten"?

Wie sähe ein Workaround aus?

Getestet in 5.0.318 im Mithras-Projekt

Danke & Grüße,

Maik

0 Kudos
1 Solution

Accepted Solutions

Hallo Maik,

du kannst in der PS-Seite auf den ScheduleContext zugreifen und Dir die Liste der Variablen holen und mit diesen arbeiten.

Beispiel: $CMS_VALUE(#global.scheduleContext.task.variables.get(0).value)$

Wenn du mehrere Variablen hasst, musst du ggf. iterieren und den richtigen ermitteln, aber über den aktuellen Task (und das ist in diesem Fall ja immer die Generierung!) kannst du jederzeit darauf zugreifen. Achte hier allerdings darauf den Aufruf mit richtigen IF-Abfragen zu umklammern, so dass nicht unnötigerweise WARN oder ERROR Meldungen mit geloggt werden wenn der Wert mal nicht gesetzt ist.

Gruß,

Daniel

View solution in original post

0 Kudos
5 Replies
mfinsterbusch
New Responder

noch einmal kurz detailliert anders:

/help/odfs/en/vorlagenentwicklung/variablen/kontexte_2/projektbezogen_1/projektbezogen.html#_global_context

Hier im Bild

"The following figure shows the availability of variables down to section level:"

sind die schedule-variables offenbar nicht in den Projekteinstellungen (im template) verfügbar.

Grüße,

Maik

0 Kudos
hoebbel
Crownpeak employee

Hallo Maik,

die Generieurngsvariablen werden so behandelt, als hättest Du die entsprechende Variable auf der Wurzel der Struktur-Verwaltung gesetzt. Das bedeutet, dass diese Variablefür alle Seitenreferenzen in der Struktur-Verwaltung gültig ist und von entsprechenden Definitionen auf tieferliegenden Knoten überschrieben werden kann.

Weiterhin bedeutet dies, dass die Variable nicht in dem Projekt-Einstellungstemplate gültig ist, da dieses _vor_ der Generierung des ersten Knoten ausgewertet wird, also somit auch nicht in der Struktur hängt.

Also ist das Verhalten erwartungskonform und kein Bug.

Workaround könnte somit sein, sich in der Projekteinstellungsseite sich die Variable direkt zu holen:

$CMS_SET(myVar,#global.project.userService.getStore("sitestore",true).formData.get(#global.language,"<varname>").get())$

Hab aber nicht geprüft, ob das tatsächlich funktioniert.

Viele Grüße aus Dortmund,

  Holger

0 Kudos

Hallo Holger,

nach nochmaliger Prüfung der Dokumentation kann ich diese Ausnahme nicht finden.

Denn in den angegebenen Bild ist es genau anders vermerkt:

- die schedules-vars sind im root-context

- dieser wiederum sollten dann in den templates verfügbar sein- nur halt in den projectsettings nicht?

Daher verstehe ich das nicht, dass dies so sein soll, weils doch anders dokumentiert ist?!

Dein Workaround funktioniert leider nicht.

varName = context.getProperty("var").toString();

varValue = context.project.userService.getStore("sitestore",true).getFormData().get(context.project.getLanguage("DE"),varName).get();

context.logDebug("eval sc_getssvar | varName: "+varName+" | varValue: "+varValue);

result.setValue(varValue);

Erzeugt eine Exception, dass das Feld nicht existiert, da diese Seitenstrukturvariable nicht vorhanden ist.

Lege ich diese dann an, gibt diese den Wert aus der Struktur zurück und nicht aus den schedule-vars.

Lasse ich die SS-Var leer, ist auch die Rückgabe leer, aber nicht den Wert aus der schedule-var.

Wäre ein 2. Ansatz im template projectsettings den Wert direkt aus den schedule zu holen? Geht das? Wenn ja, wäre ich dankbar wenn Du den Einzeiler einhacken könntest, da ich kein Weg finde von dem project auf den schedule-wert zu kommen (vom #global.project. ... generateTask.getVariables(...)).

Danke,

Maik

0 Kudos

Hallo Maik,

du kannst in der PS-Seite auf den ScheduleContext zugreifen und Dir die Liste der Variablen holen und mit diesen arbeiten.

Beispiel: $CMS_VALUE(#global.scheduleContext.task.variables.get(0).value)$

Wenn du mehrere Variablen hasst, musst du ggf. iterieren und den richtigen ermitteln, aber über den aktuellen Task (und das ist in diesem Fall ja immer die Generierung!) kannst du jederzeit darauf zugreifen. Achte hier allerdings darauf den Aufruf mit richtigen IF-Abfragen zu umklammern, so dass nicht unnötigerweise WARN oder ERROR Meldungen mit geloggt werden wenn der Wert mal nicht gesetzt ist.

Gruß,

Daniel

0 Kudos

Hi Daniel,

das passt und funktioniert prima, das Abfangen habe ich natürlich eingebaut vielen Dank dafür!

Grüße,

Maik

0 Kudos