ACordes
I'm new here

ContentSelect und XML-Feld

Jump to solution

Hallo,

ich entschuldige mich im Voraus, falls die Frage extrem blöd ist. Aber nach über einer halben Stunde intensiven Herumprobierens und Suchens habe ich keine Lösung gefunden.

Ich habe folgendes Feld in einer Tabellenvorlage:

<CMS_INPUT_COMBOBOX name="carousel_display" singleLine="no">

    <ENTRIES>

      <ENTRY value="1">

        <LANGINFOS>

          <LANGINFO lang="*" label="Ja"/>

        </LANGINFOS>

      </ENTRY>

      <ENTRY value="0">

        <LANGINFOS>

          <LANGINFO lang="*" label="Nein"/>

        </LANGINFOS>

      </ENTRY>

    </ENTRIES>

    <LANGINFOS>

      <LANGINFO lang="*" label="Im Karussel anzeigen"/>

    </LANGINFOS>

  </CMS_INPUT_COMBOBOX>

Nun möchte ich via ContentSelect alle Einträge abfragen, die als value "1" haben. So etwas geht hier offenbar nicht:

<EQ attribute="carousel_display" datatype="java.lang.String" value="1" />

Das gleiche bei RADIOBUTTON und SELECT. Das Problem wird hier wohl der datatype sein? Was muss ich tun, um Werte anhand eines XML-Datenfeldes auszulesen?

Vielen Dank!

0 Kudos
1 Solution

Accepted Solutions
Peter_Jodeleit
Crownpeak employee

XML-Felder werden als Text gespeichert. Für den gewünschten Einsatzzweck wäre ein numerischer Typ besser gewesen. Textfelder können mit LIKE abgefragt werden.

Peter

View solution in original post

0 Kudos
14 Replies
Peter_Jodeleit
Crownpeak employee

XML-Felder werden als Text gespeichert. Für den gewünschten Einsatzzweck wäre ein numerischer Typ besser gewesen. Textfelder können mit LIKE abgefragt werden.

Peter
0 Kudos

Am liebsten wäre mir ein Boolean gewesen, aber ein solches Feld konnte ich weder auf RADIOBUTTON, noch auf COMBOBOX oder SELECT mappen.

Wenn es diese Möglichkeit gäbe, wäre sie mir schon lieber, als für ein einfaches an/aus einen XML-Wust in der Datenbank zu haben.

0 Kudos

Hallo,

ein Boolean kann man mit einem CMS_INPUT_TOGGLE umsetzen. Damit wäre der Fall dann gut umzusetzen. Oder gibt es eine unbedingte Notwendigkeit eine Combobox/Select/Radiobutton zu verwenden?

Viele Grüße

Rouven

Nein, eine Notwendigkeit dafür gab es nicht. Nur Unwissenheit. Aber ein CMS_INPUT_TOGGLE ist genau das, was ich brauche, vielen Dank!

0 Kudos

Hallo, ich habe auch so ein Problem und möchte mit contentSelect dieses GUI-Element auslesen:

<CMS_INPUT_COMBOBOX name="cs_kompetenz" sortOrder="ascending" useLanguages="no">

    <CMS_INCLUDE_OPTIONS type="database">

      <LABELS>

        <LABEL lang="*">#item.Name + " [" + #item.SysPk + "]"</LABEL>

      </LABELS>

      <TABLE>view.t_pdb_kompetenzen</TABLE>

    </CMS_INCLUDE_OPTIONS>

    <LANGINFOS>

      <LANGINFO lang="DE" label="Kompetenz" description="Please choose."/>

    </LANGINFOS>

  </CMS_INPUT_COMBOBOX>

In diesem Fall ist es nicht nur true / false, sondern das Feld cs_kompetenz beinhaltet jeweils einen Foreign Key auf eine andere Tabelle eines Datenbankschemas, z. B. 1, 2, 28, 14, etc...

Wenn ich nunt mit LIKE abfrage:

<QUERY entityType="kompetenzen">

    <FILTERPARAM parameter="kompetenz_id" datatype="java.lang.String" value="1"/>

    <LIKE attribute="fk_kompetenz" parameter="kompetenz_id"/>

</QUERY>

... erhalte ich aber nicht nur den Datensatz mit der genau passenden ID "1", sondern auch alle die ähnlich sind, z. B. "12", "14", "21" - also alle Sätze, die eine 1 in der ID enthalten.

Wie lässt sich das Problem lösen, damit ich wirklich nur den Datensatz bekomme, der identisch mit der gewünschten ID ist und nicht nur "ähnlich"?

0 Kudos

LIKE ist in diesem Fall nicht richtig, sie sollten folgendes verwenden:

<EQ attribute="ATTRIBUT" parameter="BEZEICHNER" datatype="DATENTYP" value="WERT" />

Siehe auch http://www.e-spirit.com/odfs42/de/vorlagenentwicklung/vorlagensyntax/funktionen/im_header/contentsel...

0 Kudos

Hallo,

ich habe es nun auf diese Weisen versucht:

1. Abfrage in Datenschema:

<QUERY entityType="kompetenzen">

    <FILTERPARAM parameter="kompetenz_id" datatype="java.lang.String" value="1"/>

    <EQ attribute="fk_kompetenz" parameter="kompetenz_id"/>

</QUERY>

--> Funktioniert nicht; Error code: 20000; Caused by: java.sql.SQLSyntaxErrorException: Comparisons between 'CLOB (UCS_BASIC)' and 'CLOB (UCS_BASIC)' are not supported. Types must be comparable. String types must also have matching collation. If collation does not match, a possible solution is to cast operands to force them to the default collation (e.g. SELECT tablename FROM sys.systables WHERE CAST(tablename AS VARCHAR(128)) = 'T1')

2. Funktion im Header:

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

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

        <CMS_VALUE_PARAM name="kompetenz_id" value="1" />

               

        <QUERY entityType="kompetenzen">

            <FILTERPARAM parameter="kompetenz_id" datatype="java.lang.Integer" value="1" />

            <EQ attribute="fk_kompetenz" parameter="kompetenz_id" datatype="java.lang.Integer" value="1"/>

        </QUERY>

    </CMS_FUNCTION>

Ich dachte, ich versuch es mal mit Integer - allerdings gibt es kein Ergebnis.

0 Kudos

Die Foreign_Keys scheinen in einem Feld vom Typ CLOB gespeichert zu sein? Erscheint mir etwas merkwürdig.

0 Kudos

ich arbeite mit der Version 5.0 - hat sich hier etwas geändert?

0 Kudos