Questions & Answers

SOLVED
TWidmayer
Elite Observer

ContentSelect mit Parameter und Filterung

Jump to solution

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

0 Kudos
1 Solution

Accepted Solutions
aVogt
Returning Creator

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

View solution in original post

0 Kudos
4 Replies
kohlbrecher
Crownpeak employee

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

0 Kudos
aVogt
Returning Creator

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

0 Kudos
neumann
Crownpeak employee

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

0 Kudos

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

0 Kudos

Type a product name