- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ContentSelect mit Parameter und Filterung
Hallo zusammen,
folgendes:
Ich habe eine Tabelle mit 2 Spalten (name, sid)
In einem Array habe ich Strings, die den Werten der Spalte "name" der Tabelle entsprechen.
รber einen ContentSelect mรถchte ich nun, die Werte bei einer รbereinstimmung auslesen.
Also:
Hier speichere ich den String-Wert des Arrays beim durchlaufen der Schleife in einer Variablen "fv_role"
diese will ich dem ContentSelect รผbergeben, damit mir der entsprechende Datensatz ausgeliefert wird
$CMS_FOR(for_role, fv_roles)$
$CMS_SET(fv_role, for_role.toString())$
$CMS_VALUE(cs_ad_mapping)$
$CMS_END_FOR$
Mein ContentSelect
<CMS_FUNCTION name="contentSelect" resultname="cs_ad_mapping">
<CMS_PARAM name="schema" value="Projekt_WebWorld" />
<CMS_VALUE_PARAM name="prm_role" value="fv_role" />
<QUERY entityType="AD_mapping">
<FILTERPARAM parameter="prm_role" datatype="java.lang.String" />
<EQ attribute="name" parameter="prm_role" />
</QUERY>
</CMS_FUNCTION>
die รผbergebene Variable fv_role wird im Parameter "prm_role" gespeichert welche dann an die Filterung bzw. den EQ-Ausdruck รผbergeben wird.
Jedoch funktioniert das irgendwie nicht und ich komm an der Stelle nicht weiter bzw. stehe auf dem Schlauch.
Meiner Meinung nach mรผsste es doch so funktionieren ๐
PS: Datensatz mit dem Namen in der Spalte ist vorhanden, so dass es eben matchen mรผsste.
Fehlen noch Infos?
viele Grรผรe
Tobi
- Labels:
-
Developers
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Tobi,
ich habe es anders verstanden.
Ausgehend von
... will ich dem ContentSelect รผbergeben, damit mir der entsprechende Datensatz ausgeliefert wird ...
mรผsstest Du auch wirklich das ContentSelect fรผr jeden Wert aufrufen Ein
$CMS_VALUE(cs_ad_mapping)$
reicht da m.E. nicht.
Wir haben so etwas wie folgt umgesetzt:
Aufruf in der Seitenvorlage:
Fรผr jeden Eintrag von dem der Datensatz ermittelt werden soll, wird ein Script aufgerufen (bei uns wird die jeweilige Tabelle, eine ID des zu ermittelnden Datensatzes und der Resultname des Contentselect รผbergeben)
$CMS_RENDER(script:"SCRIPTNAME", TABELLE:"VORDRUCKE",RESULTNAME:"cs_VD",DSID: VDID)$
Das Script sieht wie folgt aus
//!BeanShell
// Stand: 25.09.2013
out = new StringBuilder();
out.append("<CMS_HEADER>");
out.append(" <CMS_FUNCTION name=\"contentSelect\" resultname=\"").append(RESULTNAME).append("\" context=\"PAGE\">");
out.append(" <CMS_VALUE_PARAM name=\"value_bez\" value=\"").append(DSID).append("\" />");
out.append(" <CMS_PARAM name=\"schema\" value=\"SFO\" />");
out.append(" <QUERY entityType=\"").append(TABELLE).append("\">");
out.append(" <FILTERPARAM parameter=\"value_bez\" datatype=\"java.lang.String\" />");
out.append(" <EQ attribute=\"FS_ID\" parameter=\"value_bez\"/>");
out.append(" </QUERY>");
out.append(" </CMS_FUNCTION>");
out.append("</CMS_HEADER>");
result.setValue(out.toString());
Alternativ kannst Du dir auch erst alle Datesรคtze holen und z.B. in einer Map speichern (mit Name, Datensatz - geht nat. nur, wenn der Name eindeutig ist). Dann kannst Du รผber dein Array iterieren und in der Map nachsehen, ob der Name darin enthalten ist.
Welcher Weg performanter ist hรคngt sicher davon ab, von wie viel Werten Du den Datensatz haben mรถchtest und wie viele Datensรคtze vorhanden sind.
Aber vielleicht habe ich dein Anliegen auch falsch verstanden
Grรผรe Andreas
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Tobi,
wenn mich nicht alle tรคuscht, dann passt bei dir die Reihenfolge nicht. Der ContentSelect wird bereits vor dem Durchlauf deiner Schleife ausgefรผhrt. Du kannst dann auf das Ergebnis zugreifen, dieses aber nicht mehr beeinflussen.
Wie genau sieht denn dein Anwendungsfall aus?
Grรผรe
Jan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Tobi,
ich habe es anders verstanden.
Ausgehend von
... will ich dem ContentSelect รผbergeben, damit mir der entsprechende Datensatz ausgeliefert wird ...
mรผsstest Du auch wirklich das ContentSelect fรผr jeden Wert aufrufen Ein
$CMS_VALUE(cs_ad_mapping)$
reicht da m.E. nicht.
Wir haben so etwas wie folgt umgesetzt:
Aufruf in der Seitenvorlage:
Fรผr jeden Eintrag von dem der Datensatz ermittelt werden soll, wird ein Script aufgerufen (bei uns wird die jeweilige Tabelle, eine ID des zu ermittelnden Datensatzes und der Resultname des Contentselect รผbergeben)
$CMS_RENDER(script:"SCRIPTNAME", TABELLE:"VORDRUCKE",RESULTNAME:"cs_VD",DSID: VDID)$
Das Script sieht wie folgt aus
//!BeanShell
// Stand: 25.09.2013
out = new StringBuilder();
out.append("<CMS_HEADER>");
out.append(" <CMS_FUNCTION name=\"contentSelect\" resultname=\"").append(RESULTNAME).append("\" context=\"PAGE\">");
out.append(" <CMS_VALUE_PARAM name=\"value_bez\" value=\"").append(DSID).append("\" />");
out.append(" <CMS_PARAM name=\"schema\" value=\"SFO\" />");
out.append(" <QUERY entityType=\"").append(TABELLE).append("\">");
out.append(" <FILTERPARAM parameter=\"value_bez\" datatype=\"java.lang.String\" />");
out.append(" <EQ attribute=\"FS_ID\" parameter=\"value_bez\"/>");
out.append(" </QUERY>");
out.append(" </CMS_FUNCTION>");
out.append("</CMS_HEADER>");
result.setValue(out.toString());
Alternativ kannst Du dir auch erst alle Datesรคtze holen und z.B. in einer Map speichern (mit Name, Datensatz - geht nat. nur, wenn der Name eindeutig ist). Dann kannst Du รผber dein Array iterieren und in der Map nachsehen, ob der Name darin enthalten ist.
Welcher Weg performanter ist hรคngt sicher davon ab, von wie viel Werten Du den Datensatz haben mรถchtest und wie viele Datensรคtze vorhanden sind.
Aber vielleicht habe ich dein Anliegen auch falsch verstanden
Grรผรe Andreas
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Tobi,
benรถtigst Du noch weitere Hilfe oder hat Dir die Antwort von Andreas bereits geholfen?
In diesem Fall wรคre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere
Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lรถsung
gefunden haben, wรคre es nett, wenn Du diese hier bereitstellst.
Viele Grรผรe
Emre
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Andreas,
ja mittlerweile hatte รคhnlich wie dein Alternativ-Vorschlag gelรถst!
Das mit dem Script sieht aber auch spannend aus.
Das Problem bei meiner Vorgehensweise war glaub ich,
dass sofern man einmal eine Variable per Parameter dem ContentSelect รผbergeben hat,
diese nicht รผberschrieben wird, bzw. รผberschrieben an den ContentSelect weitergegeben wird.
Scheint als wรผrde der ContentSelect mit dem anfangs รผbergebenem Parameter bestehen bleiben
viele Grรผรe
Tobi

