thomas_ritter
I'm new here

FS_INDEX Abfrage Value

Jump to solution

Hallo zusammen,

ich hab derzeit ein Problem mit der Abfrage eines FS_INDEX Eintrages innerhalb von Datenquellen. Ich möchte in einer Tabellevorlage eine FS_INDEX-Liste pflegen und den Value der Einträge (ttName) in einer Seitevorlage ausgeben.

Mein Aufbau:

Tablle 1: rewriteurls

--> Feld: ttHostList (FS_INDEX)   --> schema: hostlist (xml)

Tabelle 2: hosts

--> Feld: ttName (TEXT)

Seitenvorlage:

<CMS_HEADER>

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

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

        <QUERY entityType="rewriteurls" limit="0"></QUERY>

    </CMS_FUNCTION>

</CMS_HEADER>$CMS_TRIM(level:1)$

<urlrewrite>

$CMS_IF(!frRewriteUrls.isEmpty)$

  $CMS_FOR(_item, frRewriteUrls)$

      $CMS_FOR(_itemHostList,_item.hostlist)$

      <rule>

       <from>^/web/$CMS_VALUE(_item.shorturl)$</from>

       <to type="redirect">http://$CMS_VALUE(_itemHostList.?????????)$$CMS_VALUE(_item.postfix)$/TemplateMaster/$CMS_REF(_item.targeturl)$</to>       

       <condition name="host" operator="equal">$CMS_VALUE(_itemHostList.?????????)$</condition>      

    </rule>

    $CMS_END_FOR$

  $CMS_END_FOR$

$CMS_END_IF$

</urlrewrite>

$CMS_END_TRIM$

Ich hole mir über einen ContentSelect alle Datensätze der Tabelle rewriteurls und interiere dann mit 2 FOR-Schleifen darüber. Leider komme ich nicht auf "ttName" der Einträge in der FS_INDEX.

Ich habe schon sämtliche Varianten mit

_item.hostlist.values

_itemHostList.formData

etc. probiert. Jedoch ohne Erfolg.

Hat jemand eine Idee?

LG Thomas

16 Replies

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

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

     <QUERY entityType="Systemassets"></QUERY>

</CMS_FUNCTION>

$CMS_FOR(_bim, fr_cs_assets.bim_files)$

<li>$CMS_VALUE(_bim.class)$</li>

$CMS_END_FOR$

Ausgabe:

de.espirit.firstspirit.client.access.editor.lists.IndexImpl$BoundRecord

Die Spalte "bim_files" ist ein XML-Feld das ich mit FS-INDEX setze.

In der Tabellenvorlage funktioniert die Ausgabe wie gewünscht. Ich benötige die Informationen aber noch für einen Teaser in einem bestimmten Template.

0 Kudos

Hallo zusammen,

das von TimoMeister beschriebene Problem habe ich auch - hat hier jemand eine Lösung parat? Oder konntest du das mittlerweile lösen, Timo?

Viele Grüße

Sebastian

0 Kudos

Hallo Sebastian,

ich habe nur eine sehr umständliche bzw unschöne Lösung. Leider geht es bisher (?) nicht anders.
Über ein weiteres ContentSelect und dann eine Abfrage über den Identifier.

$CMS_FOR(_b,fr_cs_bim.filter(x->x.getGid.toString==_bim.getIdentifier.substring(32,68)))$

<li>$CMS_VALUE(_b.description)$</li>

$CMS_END_FOR$

Viele Grüße

Timo

0 Kudos
TimoMeister
Returning Responder

Hierzu gibt es einen Feature Request - FS_INDEX direkter Zugriff auf Entity in ContentSelect

0 Kudos

Hallo Sebastian,

auch wenn es sehr spät ist, vielleicht hilft dieser Lösungsansatz weiter:

Erst das content2 Objekt holen und dann damit die entity zum dataset umwandeln.

Über das dataset.formData.<Name der Eingabekomponente> kommt man dann an den Index und kann über diesen "ganz normal" iterieren.

Auch nicht schön, aber in meinen Augen etwas sauberer als das Persistenzformat zu interpretieren.

Der entsprechende Templatecode sieht so aus (Annahme: Die Datenquelle heißt "FSDatabase", die FS_INDEX Eingabekomponente "bim") - und ich hoffe, ich habe mich nirgendwo vertippt Smiley Wink

$-- Content2 holen --$

$CMS_SET(FSDatabaseCS2, #global.userService.getStore(class("de.espirit.firstspirit.access.store.Store$Type").CONTENTSTORE,false).getContent2ByName("FSDatabase"))$

$-- über die contentSelect Funktion iterieren --$

$CMS_FOR(_asset, fr_cs_assets)$

  $-- entity in dataset umwandeln --$

  $CMS_SET(_assetDataset,FSDatabaseCS2.getDataset(_asset))$

  $-- über die FS_INDEX Eingabekomponente iterieren --$

  $CMS_FOR(_bim,_assetDataset.formData.bim.values)$

    $-- Gewünschte Informationen ausgeben --$

  $CMS_END_FOR$

$CMS_END_FOR$

Vielleicht hilft es ja,

viele Grüße,

    Holger

MarsDD
Occasional Observer

Hallo,

viel schöner wäre es, wenn ContentSelect Datasets zurück liefern würde. Vom Entity kommt ich nur via Content2 ans Dataset. Allgemein wäre es wünschenswert, da eine Rückkopplung von Entity <-> Dataset zu schaffen.

Viele Grüße

Marcel

0 Kudos
hoebbel
Crownpeak employee

Hallo Marcel,

im Prinzip sehe ich das auch so, im Detail würde dies aber erst einmal eine inkompatible Änderung der Funktion sein.

Bleibt also die Möglichkeit, dass über einen zusätzlichen Parameter aufzubohren oder gleich eine weitere Funktion zur Verfügung zu stellen, die mittelfristig die contentSelect Funktion ablösen könnte [vom Dataset kommt man ja leicht zum Entity, umgekehrt ist das schon deutlich schwieriger, da man hier zusätzliche Context-Informationen benötigt].

Hier wäre es sinnvoll, einen entsprechenden Feature Request zu erstellen, damit dies diskutiert und bewertet werden kann.

Viele Grüße,

  Holger

0 Kudos