Search the FirstSpirit Knowledge Base
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>
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
Der Anwendungsfall ist hier beschrieben. Im Beispiel mit "st_startDate" vom Typ "CMS_INPUT_DATE". Ist aber für CMS_INPUT_TEXT analog.
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.
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.
Keine Ideen? Oder nich möglich?
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
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?
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
Ok Diana, danke für die Hilfe.