wiegele
I'm new here

Abfrage Cast Datatype

Jump to solution

Hallo zusammen,

ich verstehe nur bedingt warum ich diese Fehlermeldung bekomme.

Er kann den Wert nicht casten , aber warum?

ERROR 24.06.2020 16:40:53.148{g-node=8446762} (de.espirit.firstspirit.generate.SiteProduction): cannot set select parameter 'datefilter - Cannot cast java.math.BigInteger to java.util.Date.

In einer reinen Abfrage funktioniert das Ganze 1A.

Server-Version: 2019-07

-------------------Funktioniert in Abfrage--------------------------------

<QUERY entityType="News">

<FILTERPARAM parameter="datefilter" datatype="java.util.Date" value="0270132197000"/>

<FILTERPARAM parameter="modified_datefilter" datatype="java.util.Date" value="1288625397000"/>

<FILTERPARAM parameter="News_ID" datatype="java.lang.Long" value="18435"/>

<OR>

<AND>

<EQ attribute="fs_id" parameter="News_ID"/>

<LIKE attribute="publication_flag" datatype="java.lang.Boolean" value="true"/>

</AND>

<AND>

<LTE attribute="publication_date" parameter="datefilter"/>

<LIKE attribute="publication_flag" datatype="java.lang.Boolean" value="true"/>

<GT attribute="fs_id" datatype="java.lang.Long" value="0"/>

<LTE attribute="fs_valid_from" parameter="modified_datefilter"/>

</AND>

</OR>

</QUERY>

-------------------Funktioniert in Abfrage--------------------------------

-------------------Funktioniert nicht in einem Script--------------------------------

<CMS_HEADER>

<CMS_FUNCTION name="contentSelect" resultname="frNews">

<CMS_PARAM  name="schema" value="FS_Tables"/>

<CMS_VALUE_PARAM name="datefilter" value="0"/>

<CMS_VALUE_PARAM name="modified_datefilter" value="0"/>

<CMS_VALUE_PARAM name="News_ID" value="18435"/>

<QUERY entityType="News">

<FILTERPARAM parameter="datefilter" datatype="java.util.Date" value="0270132197000"/>

<FILTERPARAM parameter="modified_datefilter" datatype="java.util.Date" value="1288625397000"/>

<FILTERPARAM parameter="News_ID" datatype="java.lang.Long" value="18435"/>

<OR>

<AND>

<EQ attribute="fs_id" parameter="News_ID"/>

<LIKE attribute="publication_flag" datatype="java.lang.Boolean" value="true"/>

</AND>

<AND>

<LTE attribute="publication_date" parameter="datefilter"/>

<LIKE attribute="publication_flag" datatype="java.lang.Boolean" value="true"/>

<GT attribute="fs_id" datatype="java.lang.Long" value="0"/>

<LTE attribute="fs_valid_from" parameter="modified_datefilter"/>

</AND>

</OR>

</QUERY>

</CMS_FUNCTION></CMS_HEADER>

-------------------Funktioniert nicht in einem Script--------------------------------

Kann mir einer erkären warum und wie ich es machen muss?

Danke fürs lesen

0 Kudos
1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

Hallo Dirk,

der Grund ist hier letztlich das

<CMS_VALUE_PARAM name="datefilter" value="0"/>

Bei CMS_VALUE_PARAM gibt man ja keine festen Werte an sondern Ausdrücke. Die "0" wird nun allerdings als (Big)Integer interpretiert, somit hat dann auch der VALUE_PARAM diesen Typ. Der kann wiederum nicht auf den Query-Parameter gecastet werden.

Über einen kleinen Umweg geht es aber. Hier mal ein kompakteres Beispiel aus meinem "Bastel-Mithras", d.h. das müsstest du natürlich auf deinen Fall anpassen:

<CMS_HEADER>

<CMS_FUNCTION name="contentSelect" resultname="frNews">

<CMS_PARAM  name="schema" value="Products"/>

<CMS_VALUE_PARAM name="datefilter" value="set_datefilter"/>

<QUERY entityType="Press_Releases">

   <FILTERPARAM parameter="datefilter" datatype="java.util.Date" value="0270132197000"/>

   <LTE attribute="Date" parameter="datefilter"/>

</QUERY>

</CMS_FUNCTION>

</CMS_HEADER>

$CMS_SET(set_datefilter,st_dateUntil)$

$CMS_FOR(news, frNews)$

     $CMS_VALUE(news.Date)$ - $CMS_VALUE(news.Headline)$

     <br>

$CMS_END_FOR$

In meinem Beispiel ist das der Code eines Absatztemplates, in dem man das "Maximaldatum" per Eingabekomponente definieren kann. Der Wert muss natürlich nicht auf einer EK beruhen.

Wichtig ist letztlich nur, dass

  • der CMS_VALUE_PARAM im value-Attribut den Namen einer Variablen (oder auch eines Ausdrucks) beinhaltet,
  • deren Wert dann ein Objekt des richtigen Typs beinhaltet. Du könntest hier auch #global.now o.ä. nehmen, je nachdem was passt.

In meinem Beispiel oben könnte man auch direkt die Eingabekomponente nutzen und das $CMS_SET()$ weg lassen:

<CMS_VALUE_PARAM name="datefilter" value="st_dateUntil"/>

Das mit dem CMS_SET dient eher als Hinweis wie man es macht falls es nicht klappt, den Ausdruck direkt ins value-Attribut zu schreiben - z.B. wegen Escaping oder zu komplexem Ausdruck.

Viele Grüße

Michael

View solution in original post

0 Kudos
1 Reply
mbergmann
Crownpeak employee

Hallo Dirk,

der Grund ist hier letztlich das

<CMS_VALUE_PARAM name="datefilter" value="0"/>

Bei CMS_VALUE_PARAM gibt man ja keine festen Werte an sondern Ausdrücke. Die "0" wird nun allerdings als (Big)Integer interpretiert, somit hat dann auch der VALUE_PARAM diesen Typ. Der kann wiederum nicht auf den Query-Parameter gecastet werden.

Über einen kleinen Umweg geht es aber. Hier mal ein kompakteres Beispiel aus meinem "Bastel-Mithras", d.h. das müsstest du natürlich auf deinen Fall anpassen:

<CMS_HEADER>

<CMS_FUNCTION name="contentSelect" resultname="frNews">

<CMS_PARAM  name="schema" value="Products"/>

<CMS_VALUE_PARAM name="datefilter" value="set_datefilter"/>

<QUERY entityType="Press_Releases">

   <FILTERPARAM parameter="datefilter" datatype="java.util.Date" value="0270132197000"/>

   <LTE attribute="Date" parameter="datefilter"/>

</QUERY>

</CMS_FUNCTION>

</CMS_HEADER>

$CMS_SET(set_datefilter,st_dateUntil)$

$CMS_FOR(news, frNews)$

     $CMS_VALUE(news.Date)$ - $CMS_VALUE(news.Headline)$

     <br>

$CMS_END_FOR$

In meinem Beispiel ist das der Code eines Absatztemplates, in dem man das "Maximaldatum" per Eingabekomponente definieren kann. Der Wert muss natürlich nicht auf einer EK beruhen.

Wichtig ist letztlich nur, dass

  • der CMS_VALUE_PARAM im value-Attribut den Namen einer Variablen (oder auch eines Ausdrucks) beinhaltet,
  • deren Wert dann ein Objekt des richtigen Typs beinhaltet. Du könntest hier auch #global.now o.ä. nehmen, je nachdem was passt.

In meinem Beispiel oben könnte man auch direkt die Eingabekomponente nutzen und das $CMS_SET()$ weg lassen:

<CMS_VALUE_PARAM name="datefilter" value="st_dateUntil"/>

Das mit dem CMS_SET dient eher als Hinweis wie man es macht falls es nicht klappt, den Ausdruck direkt ins value-Attribut zu schreiben - z.B. wegen Escaping oder zu komplexem Ausdruck.

Viele Grüße

Michael

0 Kudos