jdrees
I'm new here

Leere Variablen im Skript abfragen

Jump to solution

Hallo,

ich habe ein Skript, dass innerhalb einer Absatzvorlage ausgeführt wird. Es geht darum eine Datumsausgabe abhängig von Gesellschaft zu erstellen. Z.B. DE-> Januar AT-> Jänner.

Als default, d.h. wenn kein Datum übergeben wird soll das aktuelle Datum genommen werden.

Ich habe es so gelöst:

import de.espirit.firstspirit.parser.eval.Undefined;

if(gc.getVariableValue("date") instanceof Undefined) date=new Date();

else date=gc.getVariableValue("date");

Bin ich da auf dem richtigen Weg oder gibt es eine einfachere Möglichkeit?

Gruß

Julian

1 Solution

Accepted Solutions

Hallo Herr Drees,

jetzt ist es mir aufgefallen. die isEmpty Methode funktioniert natürlich nicht auf einem Date Objekt, daher kann sie hier auch nicht verwendet werden.

CMS_RENDER kann ja mit beliebigen Objekten aufgerufen werden. Daher werden sie auf ein instanceof nicht verzichten können:

if (gc.getVariableValue("date") instanceof java.util.Date)

          date = gc.getVariableValue("date");

else

          date = new Date();

So hat es bei mir funktioniert.

Viele Grüße

Thorsten Marx

View solution in original post

0 Kudos
10 Replies
thmarx
I'm new here

Hallo Herr Drees,

für die Abfrage, ob ein Wert gesetzt ist oder nicht, können sie isEmpty() verwenden:

if(gc.getVariableValue("date").isEmpty()) date=new Date();

Viele Grüße

Thorsten Marx

0 Kudos

Es will noch nicht so recht!

Das ist mein Aufruf:

$CMS_SET(newDate, class("java.util.Date").new(113,0,01,0,0,0))$

$CMS_RENDER(script:"skript", date:newDate)$

Das ist mein Skript:

if(gc.getVariableValue("date").isEmpty()) date=new Date();

else date=gc.getVariableValue("date");

returnVar=date;

result.setValue(returnVar);

Wenn ich kein "date" übergebe bekomme ich das aktuelle Datum - ist ja richtig

Wenn ich aber als "date" newDate übergebe bekomme ich keine Ausgabe mehr.

Was habe ich falsch gemacht?

Gruß

Julian

0 Kudos

Hallo Herr Drees,

jetzt ist es mir aufgefallen. die isEmpty Methode funktioniert natürlich nicht auf einem Date Objekt, daher kann sie hier auch nicht verwendet werden.

CMS_RENDER kann ja mit beliebigen Objekten aufgerufen werden. Daher werden sie auf ein instanceof nicht verzichten können:

if (gc.getVariableValue("date") instanceof java.util.Date)

          date = gc.getVariableValue("date");

else

          date = new Date();

So hat es bei mir funktioniert.

Viele Grüße

Thorsten Marx

0 Kudos

Okay Danke!

0 Kudos

Wieso wird hier überhaupt ein Skript benötigt? Als Template-Code würde das so aussehen:

$CMS_VALUE(date.format("MMMM", "de_at"), default:#global.now.format("MMMM", "de_at"))$

Peter

Ist es möglich die Locale in der Seitenvorlage zu setzen? Z.B. #global.setLocale(Locale.AUSTRIA) ?

Das wäre noch praktischer!

0 Kudos

$CMS_SET(#global.locale, class("java.util.Locale").AUSTRIA)$

Das muss aber auch wieder zurückgesetzt werden, da der globale Kontext auch für alle folgenden Seiten in der Generierung gilt.

Peter

Scheinbar ist die Locale nicht bekannt, er springt dann immer auf "en_US" zurück. Aber warum ist dem GregorianCalendar dann die Locale "de_AT" bekannt?

$CMS_SET(#global.locale, class("java.util.Locale").new("de_at"))$ funktioniert.

Aber erstellt dann natürlich eine leere Locale

0 Kudos

Habe jetzt die Lösung:

$CMS_SET(#global.locale, class("java.util.Locale").new("DE","AT"))$

0 Kudos