Anonymous
Not applicable

In Query auf Variable prüfen

Jump to solution

In meiner Query soll das Attribut "A_AM_NR" anstatt auf einen festen Wert auf eine Varible aus den Projekteinstellungen, "ps_wmv_anzeigemoeglichkeiten", überprüft werden. Diese Variable enthält einen String (mit Komma getrennte Werte: 2, 4, 26). Ich bekomme es nicht hin diese Variable in die Abfrage einzubauen. Kann mir da jemand helfen? Anbei das Coding:

<CMS_HEADER>

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

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

  <QUERY entityType="Anzeige">

   <AND>

   <EQ attribute="A_AM_NR" value="26"/>

   <EQ attribute="drucksache.DsInaktiv" value="false"/>

   </AND>

  </QUERY>

</CMS_FUNCTION>

</CMS_HEADER>

1 Solution

Accepted Solutions
rbitdd
Returning Responder

Hallo Fabian,

nun, es gib keinen IN-Operator in FirstSpirit.

Das heißt, dass du, wie deine Kollegin es auch schon gesagt hat, es mit einer Funktion lösen musst.

Alternativ steht es dir natürlich frei einen entsprechenden Feature-Request zu erstellen. Dieser würde das Problem aber eher langfristig lösen und dir jetzt nicht weiterhelfen.

Viele Grüße

Diana

View solution in original post

12 Replies
Peter_Jodeleit
Crownpeak employee

Der Anwendungsfall ist hier beschrieben. Im Beispiel mit "st_startDate" vom Typ "CMS_INPUT_DATE". Ist aber für CMS_INPUT_TEXT analog.

Peter
0 Kudos
Anonymous
Not applicable

Ich habe die entsprechende Zeile aus dem Beispiel-Coding eingefügt und angepasst und prüfe nun auf den definierten Parameter:

<CMS_HEADER>

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

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

   <CMS_VALUE_PARAM  name="von" value="ps_wmv_anzeigemoeglichkeiten" />

  <QUERY entityType="Anzeige">

   <AND>

   <EQ attribute="A_AM_NR" parameter="von"/>

   <EQ attribute="drucksache.DsInaktiv" value="false"/>

   </AND>

  </QUERY>

</CMS_FUNCTION>

</CMS_HEADER>

Beim Speichern erhalte ich folgende Fehlermeldung: de.espirit.common.xml.XmlParsingError: parameter 'von' not defined.

0 Kudos

Hallo,

Hier fehlt noch die Definition des "von" als Filterparameter in der Query

Viele Grüße

Michael

0 Kudos
Anonymous
Not applicable

Danke Herr Bergmann für den Hinweis, das war wirklich hilfreich.
Ich habe aber immer noch das Problem, dass ich einen String der Form "2, 3, 26, ..." habe und auf die Zahlen als Parameter prüfen muss.

Coding sieht nun so aus:

<CMS_HEADER>

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

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

   <CMS_VALUE_PARAM  name="von"  value='ps_wmv_anzeigemoeglichkeiten' />

  <QUERY entityType="Anzeige">

   <FILTERPARAM parameter="von" datatype="java.lang.String"/>

   <AND>

   <EQ attribute="A_AM_NR" parameter="von"/>

   <EQ attribute="drucksache.DsInaktiv" value="false"/>

   </AND>

  </QUERY>

</CMS_FUNCTION>

</CMS_HEADER>

Ich habe bereits versucht die value als 'ps_wmv_anzeigemoeglichkeiten.split(",")' zu setzen, aber das CMS kann damit wohl nichts anfangen. Es gibt mit nur eine leere Seite aus.

0 Kudos
Anonymous
Not applicable

Keine Ideen? Oder nich möglich?

0 Kudos
rbitdd
Returning Responder

Also, die aktuelle Abfrage ist ja ein Vergleich von einem String mit dem Wert der Datenbank.

Verstehe ich dich richtig, dass die Werte in deinen PS eigentlich eine Liste von Elementen ist, die mit Zahlen in der Datenbank verglichen werden soll?

Also: kommaseparierte Liste von Werten als String verglichen mit Zahlen?

Wenn dem so ist, dann musst du den String auseinander nehmen und für jede einzelne Zahl eine Abfrage absenden. Ob der Vergleich mit String und Zahl erforderlich ist kann ich nicht beurteilen. Ich wage auch zu bezweifeln, dass das klappt. D.h. du müsstest aus dem String noch ne Zahl machen.

Korrigiere mich gerne, wenn ich in der falschen Richtung unterwegs bin.

Viele Grüße

Diana

0 Kudos
Anonymous
Not applicable

Das Vergleichen von String und Zahl ist notwendig und funktioniert.

Meine Kollegin meinte, dass sie etwas ähnliches mit einer Funktion gelöst hat. Die Funktion hat die Query dann immer mit einem Wert des gespliteten Strings aufgerufen und die Funktion wurde dann in einer for Schleife aufgerufen.

Geht das nicht einfacher? SQL kann ja mit

SELECT column

FROM table

WHERE column IN (comma-seperated String);

genau das was ich brauche. Aber wie mach ich das in FirstSpirit?

0 Kudos
rbitdd
Returning Responder

Hallo Fabian,

nun, es gib keinen IN-Operator in FirstSpirit.

Das heißt, dass du, wie deine Kollegin es auch schon gesagt hat, es mit einer Funktion lösen musst.

Alternativ steht es dir natürlich frei einen entsprechenden Feature-Request zu erstellen. Dieser würde das Problem aber eher langfristig lösen und dir jetzt nicht weiterhelfen.

Viele Grüße

Diana

Anonymous
Not applicable

Ok Diana, danke für die Hilfe.

0 Kudos