Search the FirstSpirit Knowledge Base
Hi,
Gibt es eine Möglichkeit in FirstSpirit Deploymentvariablen zentral zu setzen ?
Wir haben oft in Projekte mehrere Server (dev, test und prod) und pro Server mehrere Deploymentaufträge (partial, complete, delta, etc) und pro Auftrag mehrere Sprachen, die auch noch parallel generieren werden.
Wenn wir eine Deploymentvariable benutzen wollen, sagen wir deploymentTarget, müssen wir sie gefühlt tausendmal anlegen bzw. ändern (pro Sprache und pro Auftrag). Und mit copy und paste geht das auch nicht.
Ich habe mir folgendes Workaround ausgedacht: ich habe in Servermanager/Projekteigenschaften eine Skript-Aktionsvorlage definiert, die den gewünschten Wert in schedule context schreibt.
context.setProperty("deploymentTarget ", "live");
Ich komme mit so einer Skript-Aktionsvorlage pro Projekt und Ziel-Webserver aus, die wird dann aus allen Aufträgen ganz am Anfang referenziert (mit neu aus Vorlage)
Vorteil: ich habe alle Werte zentral und muss sie nur einmal ändern
Nachteil: man kann nicht mit $CMS_VALUE(deploymentTarget)$ darauf zugreifen.
Deshalb setze ich die Variable nochmal in der Project Settings Vorlage
$CMS_IF(!#global.preview)$
$CMS_IF(!#global.scheduleContext.getProperty("deploymentTarget").empty)$
$CMS_SET(deploymentTarget,#global.scheduleContext.getProperty("deploymentTarget"))$
$CMS_ELSE$
$CMS_VALUE(#global.logWarning("deploymentTarget not found in scheduleContext"))$
$CMS_END_IF$
$CMS_END_IF$
Die Sache ist, dieser Weg ist ja ganz eigen und nicht auf Anhieb für anderen Kollegen verständlich. Und, was schlimmer ist, für jede neue Variable ist ein neues CMS_IF notwendig.
Gibt es eine bessere Möglichkeit, das Problem zu lösen? Bietet FirstSpirit vielleicht schon was out-of-the-box und ich weiß nichts davon 🙂
Kann man wenigstens das Setzen aller Variablen in einer Schleife erledigen? Ich habe es versucht, aber da habe ich Knoten im Gehirn gekriegt und funktioniert hat es auch nicht
$CMS_FOR(propertyName,#global.scheduleContext.properties)$
$CMS_SET(#global.context("root")[propertyName],#global.scheduleContext.getProperty(propertyName))$
$CMS_END_FOR$
-> Danach ist „propertyName“ als Variable verfügbar, nicht „deploymentTarget“
Oder kann ich im Auftrag meine Werte via Skript in den Generierungs-Tasks als Variablen setzen?
Schöne Grüße,
Ana
Hallo Ana,
Eine Möglichkeit es "ganz sauber" und auch etwas komplizierter zu machen ist hier beschrieben. Deine Idee finde ich allerdings einfacher und vielleicht reicht es schon, wenn du in deiner Schleife den CMS_SET-Ausdruck folgendermaßen anpasst:
$CMS_SET(void, #global.context("root").setProperty(propertyName), #global.scheduleContext.getProperty(propertyName))$
Das bewirkt, dass nicht explizit eine Variable über CMS_SET gesetzt wird, sondern dass die setProperty-Methode auf dem Root-Context aufgerufen wird.
Gib uns mal Bescheid, ob das klappt (ich hab es jetzt nicht ausprobiert).
Grüße,
Hannes
Hi Hannes,
danke schön, das war genau das, wonach ich gesucht hatte! Hat mit einer Änderung, setVariableValue statt setProperty, funktioniert.
$CMS_SET(void, #global.context("root").setVariableValue(propertyName, #global.scheduleContext.getProperty(propertyName)))$
Ich habe immer noch das Problem, dass die Variablen, die ich in ProjectSettings so definiere, nicht in PageContext sichtbar sind.
Dafür habe ich aber ein Ticket eingereicht.
Grüße,
Ana