chgla
Returning Observer

Iterierung über FS_INDEX

Jump to solution

Hallo zusammen,

ich arbeite gerade an der Erstellung einer JSON-Ausgabe. Dazu müsste ich über ein FS_INDEX mit einem CMS_FOR iterieren. Das FS_INDEX stellt somit ein Array da, bei dem die Items mit einem Komma getrennt werden:

"badges": [

    $CMS_FOR(for_badge, tt_badge)$

    $CMS_VALUE(for_badge)$

    $CMS_IF(!#for.isLast)$,$CMS_END_IF$

    $CMS_END_FOR$

]

Daher frage ich im Code ab, ob die Items nicht das letzte Element darstellen und füge dann ein Komma an. Beim letzten Element soll demnach kein Komma angehangen werden.

In der Preview-Ausgabe des CaaS (z.b. Inhaltsseite) funktioniert das auch. Generiere ich das Caas über den Auftrag, erhalte ich dann die folgende Fehlermeldung:

WARN  09.04.2020 13:16:40.571{g-sec=1822464,g-node=1822462,g-entity=tb_betapoint(5376)} (de.espirit.firstspirit.client.access.editor.lists.Index): use of deprecated value generation method for an index editor

Dies liegt an der Ausgabe des von 'for_badge' über dem CMS_VALUE.

Da die Generierung durch diesen Fehler nicht erfolgreich durchgeführt wird, ist diese Lösung nicht optimal. Gibt es hierzu bereits Ansätze, die fehlerfrei funktionieren?

Mit freundlichen Grüßen

Christoph Glatthor

0 Kudos
1 Solution

Accepted Solutions
chgla
Returning Observer

Hallo Herr Culley,

das habe ich einmal ausprobiert und festgestellt, dass dann zusätzlich bei for_badge '.formData' angefügt werden muss, also:

$CMS_FOR(for_badge, tt_badge.values)$

    $CMS_VALUE(for_badge.formData)$

    $CMS_IF(!#for.isLast)$,$CMS_END_IF$

$CMS_END_FOR$

Dann erhalte ich keinen Fehler.

Ist es möglich an der Stelle auf die Eingabefelder der Tabellenvorlage zuzugreifen? Also irgendetwas mit 'for_badge.formData.tt_title'?

Dies funktioniert bei mir bisher noch nicht, wäre aber für das CaaS Thema sehr hilfreich, da ich dann genau angeben kann, welche Informationen ich für diese Absatzvorlage verwenden kann.

Mit freundlichen Grüßen

Christoph Glatthor

View solution in original post

4 Replies
sense
Elite Observer

$CMS_FOR(for_badge, tt_badge.values)$

    $CMS_VALUE(for_badge)$

    $CMS_IF(!#for.isLast)$,$CMS_END_IF$

$CMS_END_FOR$

Da fehlt ".values" in der Iteration der Schleife, dann ist die Meldung weg.

0 Kudos
chgla
Returning Observer

Hallo Herr Culley,

das habe ich einmal ausprobiert und festgestellt, dass dann zusätzlich bei for_badge '.formData' angefügt werden muss, also:

$CMS_FOR(for_badge, tt_badge.values)$

    $CMS_VALUE(for_badge.formData)$

    $CMS_IF(!#for.isLast)$,$CMS_END_IF$

$CMS_END_FOR$

Dann erhalte ich keinen Fehler.

Ist es möglich an der Stelle auf die Eingabefelder der Tabellenvorlage zuzugreifen? Also irgendetwas mit 'for_badge.formData.tt_title'?

Dies funktioniert bei mir bisher noch nicht, wäre aber für das CaaS Thema sehr hilfreich, da ich dann genau angeben kann, welche Informationen ich für diese Absatzvorlage verwenden kann.

Mit freundlichen Grüßen

Christoph Glatthor

Hallo Christoph,

was genau funktioniert daran nicht?

So wie du es beschreibst sollte es nämlich funktionieren.

Gibt es irgend einen Fehler/Warnung oder was bekommst du zurück, wenn du auf for_badge.formData.tt_title zugreifst?

Grüße

Tobi

0 Kudos

Mein Problem war ähnlich wie das hier besprochene und ich konnte es jetzt lösen. Ich wollte meine Lösung nur gerne hier einmal darlegen, damit der nächste der das Problem hat die Lösung hoffentlich hier finden kann.

Ich habe in einer Datenquelle in einem Schema ein FS_INDEX auf eine andere Datenquelle in einem anderen Schema.

Wir holen uns in der Content Projektion via

$CMS_SET(newsEntity, #global.pageParams.data.get(0))$

die entity hier z. B. eine news. Wir können dann ganz normal die Felder ausgeben via $CMS_VALUE(newsEntity.headline)$ usw.

Es gibt aber auch ein Feld, das ist ein FS_INDEX auf eine Datenquelle, welches in einem anderen Datenbankschema liegt. Um dort ran zu kommen, war es nun nötig die entity in ein dataset umzuwandeln um dann auf das FS_INDEX Feld "tt_contactList" aus dem formData Objekt zuzugreifen. Hier mal der Code-Schnipsel dafür:

$-- transform news-entity in to a news-dataset. We need to do this to get the FS_INDEX-Field from FormData --$

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

$CMS_SET(newsDataset, fiSpContent2Store_news.getDataset(newsEntity))$

$CMS_SET(tt_contactList, newsDataset.getFormData().get(#global.language, "tt_contactList").get())$

$CMS_FOR(for_contact, tt_contactList.values)$

     $CMS_VALUE(for_contact.entity.first_name)$

$CMS_END_FOR$

0 Kudos