Skip to main content

Dynamisches Content-Select über define Funktion

Comments

9 comments

  • Zendesk API User
    Author: Peter_Jodeleit - 4/30/2014 8:28

    Die define-Funktion liefert den falschen Typ, der muss erst nach "String" umgewandelt werden. Ohne es ausprobiert zu haben müsste es also funktionieren, wenn du ein toString ergänzt:

         <CMS_VALUE_PARAM name="autId" value="author_ID.toString" />

    0
  • Zendesk API User
    Author: kscheuing - 4/30/2014 9:15

    Hallo Peter,

    danke für die schnelle Antwort! Ich denke das ist der richtige Weg, da ich allerdings die "fs_id" in der Datenquelle abfrage, muss die Abfrage eher so aussehen, oder ?:

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

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

                            <CMS_VALUE_PARAM name="autId" value="author_ID/>

                            <QUERY entityType="author">

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

                                       <EQ attribute="fs_id" datatype="java.lang.Long" value="autId"/>

                            </QUERY>

                </CMS_FUNCTION>

    Nur dann bekomme ich eine NumbersFormatException, da das Ergebnis der Define Methode wohl ein String ist ?! Meine Versuche das Ergebnis der define zu parsen mit Long.valueOf() usw. waren leider erfolglos ... hast du mir ein Tip ?

    0
  • Zendesk API User
    Author: rahe - 4/30/2014 10:07

    Hi Kai,

    wenn es ein String ist kannst du mit der Funktion toNumber ein Objekt vom Typ java.lang.Number erstellen.

    Damit sollte es dann weiter gehen.

    Viele Grüße

    Kevin

    0
  • Zendesk API User
    Author: Peter_Jodeleit - 4/30/2014 11:41

    Genau, insgesamt ergibt das dann:

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

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

       <CMS_VALUE_PARAM name="autId" value="author_ID.toString.toNumber"/>

       <QUERY entityType="author">

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

            <EQ attribute="fs_id" datatype="java.lang.Long" value="autId"/>

       </QUERY>

    </CMS_FUNCTION>

    0
  • Zendesk API User
    Author: kscheuing - 5/2/2014 11:56

    Okey, ich weiß jetzt zumindest das der Datentyp nicht das Problem ist, da es in einer anderen Vorlage ohne "define" funktioniert und das parsen hat auch nicht geholfen. Beim Test mit einem manuellen Wert ála:

    <CMS_HEADER>

       

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

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

            <CMS_VALUE_PARAM name="autId" value="194" />

            <QUERY entityType="author">

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

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

            </QUERY>

        </CMS_FUNCTION>

       

    </CMS_HEADER>

    bekomme ich die erwartete Ausgabe, wenn ich die definierte Variable nutzen will :

    <CMS_VALUE_PARAM name="autId" value="author_id" />


    bekomme ich nichts. Das die Variable "author_id" die richtigen Werte enthält, habe ich anhand einer Ausgabe in der Vorlage --> $CMS_VALUE(author_ID)$ <-- getestet. Das ContentSelect scheint die Variable nicht ohne weiteres zu schlucken. Hab ich etwas übersehen ?

    Danke für eure Antworten!

    0
  • Zendesk API User
    Author: Peter_Jodeleit - 5/2/2014 13:00

    Was sagt denn $CMS_VALUE(author_ID.class)$?

    0
  • Zendesk API User
    Author: kscheuing - 5/2/2014 13:35

    Das hier: de.espirit.firstspirit.parser.impl.TemplateDocumentImpl

    Ich denke das ist die richtige Spur! der ContentSelect kann natürlich nichts mit so einem Objekt anfangen. Mit toString.toNumber bekomm ich aber nichts, variationen helfen auch nicht.

    0
  • Zendesk API User
    Author: Peter_Jodeleit - 5/2/2014 15:18

    Bei meinem Test funktioniert "toString.toNumber" einwandfrei:

    <CMS_HEADER>

         <CMS_FUNCTION name="define" resultname="x">

             <CMS_CDATA_PARAM name="source">$CMS_VALUE(2 * 2)$</CMS_CDATA_PARAM>

        </CMS_FUNCTION>

    </CMS_HEADER>

    <pre>---

    x = $CMS_VALUE(x)$

    x.class = $CMS_VALUE(x.class)$

    ->CMS_VALUE(x.toString)$<- $CMS_VALUE(x.toString.class)$

    ->$CMS_VALUE(x.toString.trim.toNumber.longValue)$<- $CMS_VALUE(x.toString.trim.toNumber.longValue.class)$<-

    ---</pre>

    Ergibt folgende Ausgabe:

    ---

    x = 4

    x.class = de.espirit.firstspirit.parser.impl.TemplateDocumentImpl

    ->4<- java.lang.String

    ->4<- java.lang.Long

    ---

    Das "trim" bei meinem Beispiel ist überflüssig, hilft aber eventuell bei dir...

    0
  • Zendesk API User
    Author: kscheuing - 5/2/2014 15:42

    Danke Peter, damit hat der Content-Select funktioniert! :smileyhappy:

    x.toString.trim.toNumber.longValue

    Warum genau mit "trim" (ohne das funktioniert es nicht) habe ich jetzt allerdings nicht verstanden. "trim" entfernt laut doku nur die whitespaces.

    0

Please sign in to leave a comment.