Skip to main content

contentSelect + CMS_INPUT_CHECKBOX

Comments

9 comments

  • Zendesk API User
    Author: mikula - 5/9/2016 10:41

    Hallo Timo,

    ich habe mal ein kleines Beispiel für dich herausgesucht, ich hoffe das hilft dir weiter:

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

              <CMS_INCLUDE_OPTIONS type="database">

                        <LABELS>

                                  <LABEL lang="*">#item.name</LABEL>

                        </LABELS>

                        <TABLE>trainer.categories</TABLE>

              </CMS_INCLUDE_OPTIONS>

              <LANGINFOS>

                        <LANGINFO lang="*" label="Limit to:"/>

                        <LANGINFO lang="DE" label="Beschränken auf:"/>

              </LANGINFOS>

    </CMS_INPUT_COMBOBOX>

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

              <CMS_VALUE_PARAM name="category" value="st_category.value.id"/>

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

              <QUERY entityType="News" limit="4">

                        <FILTERPARAM datatype="java.lang.Long" parameter="category" value="-1"/>

                        <ORDERCRITERIA attribute="date" descending="1" />

                        <EQ attribute="category.fs_id" datatype="java.lang.Long" parameter="category"/>

              </QUERY>

    </CMS_FUNCTION>

    0
  • Zendesk API User
    Author: TimoMeister - 5/9/2016 12:37

    Hallo Martin,

    danke für das Beispiel.

    Mit einer COMBOBOX bekomme ich es hin. Ich habe allerdings ein CHECKBOX Formular.

    Das scheint so nicht zu funktionieren.

    0
  • Zendesk API User
    Author: mikula - 5/9/2016 12:47

    Ich hab es jetzt nicht getestet aber laut API müsste es funktionieren.

    Zitat: "Zusätzlich können bei der Verwendung in der Datenquellen-Verwaltung mit dem allgemeinen Tag CMS_INCLUDE_OPTIONSDatenbankinhalte in der Eingabekomponente dargestellt werden."

    Siehe:

    http://www.e-spirit.com/odfs52/vorlagenentwicklung/formulare/eingabekomponenten/checkbox/

    http://localhost:8000/help/odfs/vorlagenentwicklung/formulare/eingabekomponenten/combobox/index.html

    Liebe Grüße

    Martin

    0
  • Zendesk API User
    Author: marza - 5/19/2016 10:39

    Hallo Timo,

    benötigst Du noch weitere Hilfe oder haben Dir die Antworten von Martin 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

    Marian

    0
  • Zendesk API User
    Author: TimoMeister - 7/22/2016 12:15

    Hallo Marian,

    leider habe ich es immer noch nicht hinbekommen.

    Gibt es den keine Möglichkeit Werte aus einem CMS_INPUT_CHECKBOX in einem contentSelect abzufragen? Ich glaube mein Problem wurde noch nicht so richtig verstanden.

    Viele Grüße

    Timo

    0
  • Zendesk API User
    Author: mbergmann - 7/22/2016 13:55

    Hallo Timo,

    ich denke das wird über ein simples ContentSelect nicht funktionieren, da es hier kein "IN" gibt. D.h. man müsste es theoretisch abbilden über eine "dynamische Anzahl von ORs" - was im ContentSelect nicht möglich ist. Falls die Anzahl der möglichen Werte fix ist, könnte man hier noch versuchen, über eine Kombination von Parameterpaaren "BerücksichtigeParameter1 / ParameterWert1" zu tricksen, falls das überhaupt geht wäre es aber keine schöne Lösung.

    Hier wäre wohl der beste Weg, mit einem Beanshell-Script (bzw. besser: Executable) zu arbeiten, das die passenden Einträge per API abfragt (in der API gibt es nämlich ein IN) und zurückliefert.

    Das "Zurückliefern" kannst Du hier über ein im Template definiertes "Container-Objekt" erledigen, in diesem Fall am besten eine Liste:

    $CMS_SET(set_result,[])$

    $CMS_RENDER(script:"my_query_script",

         schema:"FSStoinside",

         category:st_category.value.vkorg,

         ... //weitere parameter auf denen das Script arbeiten soll

         targets: set_target //ggf. noch per Lambda in ein nutzbares Format bringen

         resultList:set_result //container zur Rückgabe übergeben

    )$

    Im Script / Executable kannst Du dann per API (createSelect, setConstraint etc.) die Abfrage machen und die Ergebnisse in die übergebene Liste legen, ganz grob etwa so:

    // session holen, select zusammenbauen...

    results = session.executeQuery(select);

    resultList.addAll(results);

    return "";

    Dann sollte das Ergebnis im Template zur Verfügung stehen:

    $CMS_FOR(for_entry, set_result)$

    ...

    $CMS_END_FOR$

    Viele Grüße

    Michael

    0
  • Zendesk API User
    Author: TimoMeister - 8/1/2016 14:42

    Hallo Michael,

    ich habe es fast geschafft. Einzig die Abfrage mit IN fehlt mir noch. Wie mache ich eine Abfrage auf ein Fremdschlüssel-Attribut?

    Die Werte der Checkbox (st_targets) übergebe ich dem Script.

    $CMS_RENDER(script:"news_query_script",    

         targets:st_targets,

         now:#global.now,

         resultList:set_result

    )$

    Habe es so versucht. Leider ohne Ergebnisse.

    In in_targets = new In("news_targetsList",targets);

    Viele Grüße

    Timo

    0
  • Zendesk API User
    Author: mbergmann - 8/1/2016 14:59

    Hallo Timo,

    news_targetsList ist hier das "zu-n"-Attribut, richtig? Das st_targets ist ja hier ein Set<Option> - das wird man hier nicht direkt verwenden können, da ja auf die "echten" Objekte (in der Option) geprüft werden muss, ggf. auch über deren ID.

    Versuch mal etwas in dieser Richtung:

    In in_targets = new In("news_targetsList.type",targets.map(x->x.value)); // oder

    In in_targets = new In("news_targetsList.type.fs_id",targets.map(x->x.value.getValue("fs_id")));

    Ich bin mir hier allerdings nicht sicher, ob das so direkt geht weil (wenn ich es richtig verstehe) hier auch "auf der linken Seite" (an den News?) mehrere targets vorhanden sein können...

    Viele Grüße

    Michael

    0
  • Zendesk API User
    Author: TimoMeister - 8/1/2016 15:25

    Hallo Michael,

    Danke für die schnelle Antwort. Das hat mir geholfen.

    Im Template ist es nun so:

    $CMS_SET(set_result,[])$

    $CMS_RENDER(script:"news_query_script",    

         targets:st_targets.map(x->x.value.getValue("fs_id")),

         now:#global.now,

         resultList:set_result

    )$

    Im Script:

    In in_targets = new In("news_targetsList.fs_id",targets);

    0

Please sign in to leave a comment.