Questions & Answers

SOLVED
andreas_schaedl
Occasional Observer

Unique IDs bei verschachtelten FS_CATALOG

Jump to solution

Hallo Community,

ich habe folgende Situation: Ich baue gerade eine Umfrage und mรถchte sowohl Fragen wie auch Antworten einzigartige IDs mitgeben.

Derzeit habe ich ein Sectiontemplate "Survey", darin ein FS_CATALOG mit dem eine Liste von Sectiontemplates "Question" eingebunden wird und in denen wiederum ein FS_CATALOG mit dem eine Liste von Sectiontemplates "Answer" eingebunden wird. Die Auslese erfolgt dann jeweils รผber CMS_FOR

Nun hรคtte ich gerne fรผr alle drei Elemente unique IDs, die ich dann in der Applikation und Persistierung verwenden kann. Fรผr die SurveyID ist das kein Problem, mit #global.section.id oder #this.id bekomme ich diese. Das Gleiche funktioniert aber mit Sectiontemplates, die รผber FS_CATALOG verknรผpft werden, nicht. Wenn ich mich recht entsinne, ging das doch mit FS_LIST?

Ich kann jetzt zwar mittels einer Kombination aus SurveyID und #for.index einzigartige IDs erzeugen, aber sobald der Redakteur die Reihenfolge der Fragen oder Antworten verรคndert, รคndern sich ja auch die IDs.

Gibt es keine elegante Mรถglichkeit das zu lรถsen? Haben die Catalog Cards wirklich keine IDs? รœbersehe ich etwas offensichtliches?

Danke und viele GrรผรŸe,

Andreas

// Obligatorische FS Infos:

FirstSpirit SiteArchitect 5.2.515.74918

1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

Hallo Andreas,

das sollte sich folgendermaรŸen lรถsen lassen - ist zwar eher ein Workaround, dafรผr aber recht simpel:

Definiere in den inneren Templates ein zusรคtzliches CMS_INPUT_DATE mit preset="created" und verstecke es per Regel. Dadurch wird es automatisch immer mit dem aktuellen Zeitstempel versehen und kann auch nicht geรคndert werden. Der Zeitstempel ist dabei immer der beim Hinzufรผgen des Elementes in den FS_CATALOG.

Im Ausgabekanal nutzt Du dann als eindeutige ID z.B. den Hashcode oder auch die Millisekunden:

$CMS_VALUE(st_date.hashCode)$ oder

$CMS_VALUE(st_date.getTimeInMillis())$

Viele GrรผรŸe

Michael

View solution in original post

5 Replies
mbergmann
Crownpeak employee

Hallo Andreas,

das sollte sich folgendermaรŸen lรถsen lassen - ist zwar eher ein Workaround, dafรผr aber recht simpel:

Definiere in den inneren Templates ein zusรคtzliches CMS_INPUT_DATE mit preset="created" und verstecke es per Regel. Dadurch wird es automatisch immer mit dem aktuellen Zeitstempel versehen und kann auch nicht geรคndert werden. Der Zeitstempel ist dabei immer der beim Hinzufรผgen des Elementes in den FS_CATALOG.

Im Ausgabekanal nutzt Du dann als eindeutige ID z.B. den Hashcode oder auch die Millisekunden:

$CMS_VALUE(st_date.hashCode)$ oder

$CMS_VALUE(st_date.getTimeInMillis())$

Viele GrรผรŸe

Michael

Hallo Michael,

vielen Dank fรผr deine Antwort. Das ist tatsรคchlich eine recht geschickte Lรถsung. Ein Problem sehe ich hier aber:

Kopiere ich jetzt eine der Umfragen  und fรผge sie woanders wieder ein, haben alle Fragen und Antworten die gleiche ID (gleiches Erstellungsdatum)

Wir haben noch etwas tiefer gegraben und die Methode getIdentifiers() gefunden. (an der Stelle nochmal vielen Dank an mhenkeโ€‹)

Im Sectiontemplate einer Frage ergibt sich dann fรผr:

$CMS_VALUE(#this.getIdentifiers())$ <br>

$-- #this.class = de.espirit.firstspirit.generate.IdentifiableCatalogCard$IdentifiableCatalogCardItem --$

$CMS_FOR(answer,st_answers)$

     $-- answer.class = de.espirit.firstspirit.generate.IdentifiableCatalogCard --$

     $CMS_VALUE(answer.getIdentifiers())$ <br>

$CMS_END_FOR$

Der folgende Output:

[st_questions, c3b21191-9f53-455f-b587-17205e3938ad]

[st_questions, c3b21191-9f53-455f-b587-17205e3938ad, st_answers, 6e0cb9b2-5ec1-46f0-bf3c-82adda693168]

[st_questions, c3b21191-9f53-455f-b587-17205e3938ad, st_answers, 0c95592b-bd69-4fcd-9b40-ac034210759b]

[st_questions, c3b21191-9f53-455f-b587-17205e3938ad, st_answers, 6bf0a543-49d8-4b49-9464-7f84ed50a5ba]

Somit erhรคlt man fรผr jedes Element eine UUID, sogar inklusive Eltern-Element (Im Fall der Antworten). Spricht etwas gegen dieses Vorgehen? Gibt es einen Grund, warum diese Methode nicht in der Dokumentation auftaucht? (oder habe ich sie nur รผbersehen?)

Danke und viele GrรผรŸe,

Andreas

0 Kudos

Hallo Andreas,

gegen die Verwendung von getIdentifiers() spricht, dass sie nicht in der API bzw. Doku steht und es sich somit um interne Implementierungsdetails handelt, die theoretisch jederzeit geรคndert werden kรถnnen. Also wรผrde ich eher davon abraten. Ich hatte vorher tatsรคchlich selber nach so etwas geschaut ๐Ÿ˜‰

Zu deinem "Kopierproblem": Hier kรถnntest Du einfach als "finalen" Identifier die Kombination aus der ID des Absatzes / Datensatzes (also des enthaltenden Elementes, je nachdem was es bei Dir ist) und der "Zeitstempel-ID" nutzen.

Viele GrรผรŸe

Michael

0 Kudos

Hallo Michael,

dann werde ich es mit dem Zeitstempel lรถsen. Vielen Danke fรผr deine Hilfe!

GrรผรŸe,

Andreas

0 Kudos

Hallo Andreas,

gerne! Grundsรคtzlich finde ich Deinen Anwendungsfall jetzt zwar nicht alltรคglich aber trotzdem auch nicht total exotisch.

Von daher wรคre hier bestimmt ein Feature Request unter โ€žIdeenโ€œ (am besten mit Verweis auf diesen Thread) sinnvoll - intern sind ja โ€žIdentifier-tauglicheโ€œ Daten anscheinend vorhanden. Es geht ja nur darum, diese Daten (oder etwas daraus abgeleitetes โ€žeindeutigesโ€œ) per API auf CATALOG-Elementen zugreifbar zu machen, so dass solche Workarounds nicht mehr nรถtig sind.

Viele GrรผรŸe

Michael

Type a product name