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

1 Solution

Accepted Solutions

Ok, Danke.

Dann werde ich es direkt in der Tabellenvorlage Umsetzen müssen und diese als Content einbinden in das Pagetemplate.

$CMS_TRIM(level:2)$

<urlrewrite>

  $CMS_FOR(_item, ttHostList)$     

      <rule>

       <from>^/web/$CMS_VALUE(ttShortURL)$</from>

       <to type="redirect">http://$CMS_VALUE(_item.ttName)$$CMS_VALUE(_item.postfix)$/TemplateMaster$CMS_REF(ttTargetUrl)$</to>       

       <condition name="host" operator="equal">$CMS_VALUE(_item.ttName)$</condition>  

    </rule>

  $CMS_END_FOR$

</urlrewrite>

$CMS_END_TRIM$

lg thomas

View solution in original post

16 Replies
marza
I'm new here

Hallo Thomas,

bei Deinem Problem hilft immer ein Blick ins ODFS. Ein FS_INDEX gibt im Iterator Objekte vom Typ Record wieder. Alternativ hängt man an die Laufvariable im Template-Code ein .class an, dann müsste man den Klassennamen sehen.

Wenn das Element eine Entity ist und eine eigene Tabellenvorlage hat (in dem die Entity ausgegeben wird), dann müsste eigentlich per $CMS_VALUE()$ dieses Template ausgegeben werden.

Falls das nicht funktioniert, ich sehe gerade, ein Objekt vom Typ Record hat eine ToJSON-Methode. Man könnte sich also on-the-fly per CMS_SET ein neues Objekt erstellen lassen können, auf dass man, wie unter dem CMS_SET-ODFS-Eintrag beschrieben, zugreifen kann.

Grüße Marian

0 Kudos
StefanSchulz
I'm new here

Hi Thomas,

für die iterative Abarbeitung der Index-Inhalte steht eine gesonderte Funktionalität zur Verfügung. Hierzu läuft die Schleife nicht über den Index direkt, sondern über dessen Eigenschaft values.

In deinem Fall wie folgt:

$CMS_FOR(item,_item.hostlist.values)$

Die Variable item enthält dann in jedem Durchlauf direkt das Werteobjekt und der Zugriff mit item.ttName sollte reibungslos funktionieren.

Beste Grüße

Stefan

0 Kudos

Hallo zusammen,

zu Lösung Marian:

habe es so leider nicht lösen können. Im JSON steht die Information die ich benötige nicht drin, sondern nur wenige Informationen zu jedem RECORD:


   "FS_GID":"c80cd0cc-e45c-4fd0-abd9-860564d19a1e",
   "shorturl":"test",
   "hostlist":"<CMS_VALUE name=\"ttHostList\" tag=\"FS_INDEX\"><LANG id=\"§\" set=\"1\"><INDEX><RECORD>{\"schema\":\"osram\",\"gid\":\"c10caf10-4531-4d97-bb99-761ef5487fdf\",\"table\":\"hosts\"}<\/RECORD><RECORD>{\"schema\":\"osram\",\"gid\":\"dd22c2c9-501b-4bac-af02-7e68e93953c5\",\"table\":\"hosts\"}<\/RECORD><RECORD>{\"schema\":\"osram\",\"gid\":\"8e7e962d-e3ce-4e76-b584-10c37f31fef5\",\"table\":\"hosts\"}<\/RECORD><RECORD>{\"schema\":\"osram\",\"gid\":\"379a6de1-4d31-4b92-ad9a-1845c37389ad\",\"table\":\"hosts\"}<\/RECORD><\/INDEX><\/LANG><\/CMS_VALUE>",
   "released by":3244,
   "changed by":3244,
   "wf col":null,
   "wf id":null,
   "host":"www.cms-web-dev.os4.spacenet.de",
   "postfix":"/test", 
   "targeturl":"<CMS_VALUE name=\"ttTargetUrl\" tag=\"FS_REFERENCE\"><LANG id=\"§\" set=\"1\"><UID>shorturl<\/UID><UIDTYPE>SITESTORE_LEAF<\/UIDTYPE><REMOTE/><\/LANG><\/CMS_VALUE>",
   "fs_id":258
}

zu Lösung Stefan:

komme so leider auch nicht drauf, da ich einen Error erhalte wenn ich wie beschrieben die FOR-Schleife gestalte:

06.04.2016 14:15:53.109 ERROR ($CMS_FOR( _itemHostList, _item.hostlist.values )$ at 10, 4): Cannot iterate over: class de.espirit.firstspirit.parser.eval.Undefined

    inside of: Template 'pt_rewriteurls__448_dev' (id=33847)

    inside of: $CMS_TRIM(level:1)$ - at 6, 14

    inside of: $CMS_IF(  ! frRewriteUrls.isEmpty )$ - at 8, 1

    inside of: $CMS_FOR( _item, frRewriteUrls )$ - at 9, 3

    inside of: $CMS_FOR( _itemHostList, _item.hostlist.values )$ - at 10, 4

lg thomas

0 Kudos

Hm, sehe gerade erst, dass du direkt auf die Spalten der Datenbank zugreifst und nicht auf das Formular, richtig? Dann geht das so nicht und anders vermutlich auch eher schwer. Deine Ausgabe (RECORD) oben zeigt keinen Record sondern einen Datensatzeintrag mit den einzelnen Spalten. Auf diesem Weg fehlt jegeliche Verknüpfung zum Formular und somit auch zur Auswertung des FS_INDEX.

Gruß

Stefan

Ok, Danke.

Dann werde ich es direkt in der Tabellenvorlage Umsetzen müssen und diese als Content einbinden in das Pagetemplate.

$CMS_TRIM(level:2)$

<urlrewrite>

  $CMS_FOR(_item, ttHostList)$     

      <rule>

       <from>^/web/$CMS_VALUE(ttShortURL)$</from>

       <to type="redirect">http://$CMS_VALUE(_item.ttName)$$CMS_VALUE(_item.postfix)$/TemplateMaster$CMS_REF(ttTargetUrl)$</to>       

       <condition name="host" operator="equal">$CMS_VALUE(_item.ttName)$</condition>  

    </rule>

  $CMS_END_FOR$

</urlrewrite>

$CMS_END_TRIM$

lg thomas

Hallo Thomas,

ist dieses Posting noch offen? Benötigst du noch weitere Hilfe oder war der direkte Weg über die Tabellenvorlage erfolgreich?

Viele Grüße

Michaela

0 Kudos

Hallo Michaela,

das Problem ist damit erledigt.

Danke.

0 Kudos
TimoMeister
Returning Responder

Hallo zusammen,

wenn ich das richtig lese, kommt man über ein contentSelect nicht direkt an die Werte des FS_INDEX, richtig?

Wie komme ich dann an die Werte?

In meinem Anwendungsfall kann ich es nicht direkt in der Tabellenvorlage umsetzen.

Viele Grüße

Timo

0 Kudos

Hi Timo,

poste doch mal ein Beispiel bzw. Ausschnitt deines Codes und eine Erklärung warum du nicht direkt auf die Tabellevorlage zugreifen kannst.

0 Kudos