Questions & Answers

ana_oleski
Returning Observer

Deploymentvariablen zentral verwalten?

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

0 Kudos
2 Replies
tenter
I'm new here

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

0 Kudos

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

0 Kudos

Type a product name