Questions & Answers

philippr
Returning Spectator

Entity aus Option

Hallo zusammen,

sitze gerade an einem merkwรผrdigen Problemchen, vielleicht hat jemand von euch eine Antwort darauf:

Folgendes Szenario:

FirstSpirit Version 5.1.416

In einer Page wird รผber eine CMS_INPUT_COMBOBOX mit CMS_INCLUDE_OPTIONS die Mรถglichkeit geschaffen dem Redakteur eine Entity aus einer Datenquelle auswรคhlen zu lassen.

Nun soll diese รผber die FirstSpirit API ausgelesen werden. Dazu habe ich folgende BeanShell Ausgabe, die sich anders verhรคlt, als das Java (FSM) Pendant.

Beanshell

bsh % e.getClass();

<class de.espirit.firstspirit.store.access.pagestore.PageImpl>

bsh % ((Option) e.getFormData().get(e.getProject().getMasterLanguage(), "pt_product_range").get()).getClass();

<class de.espirit.firstspirit.store.access.contentstore.ContentOptionFactory$ContentOption>

bsh % ((Option) e.getFormData().get(e.getProject().getMasterLanguage(), "pt_product_range").get()).getValue();

<de.espirit.or.impl.EntityImpl@759cdcc7{ProductRange,PERSISTENT,FS_ID=27559,FS_VALID_FROM=1421840121451,FS_VALID_TO=9223372036854775807,FS_RELEASE_TO=0}>

Java FSM (inkl. Logausgabe aus Generierung)

context.logInfo("Page: " + context.getPage().getClass() + " - " + context.getPage().getUid());

context.logInfo("Option:" + context.getPage().getFormData().get(context.getProject().getMasterLanguage(), "pt_product_range").get().getClass());

context.logInfo("Option Content:" + ((Option)  context.getPage().getFormData().get(context.getProject().getMasterLanguage(), "pt_product_range").get()).getValue());

productRangeEntity = (Entity) ((Option)  context.getPage().getFormData().get(language, "pt_product_range").get()).getValue();

INFO  10.07.2015 18:56:31.328{g-node=266289} (de.espirit.firstspirit.generate.SiteProduction): Page: class de.espirit.firstspirit.store.access.pagestore.PageImpl

INFO  10.07.2015 18:56:31.328{g-node=266289} (de.espirit.firstspirit.generate.SiteProduction): Option:class de.espirit.firstspirit.access.editor.value.SimpleOption

INFO  10.07.2015 18:56:31.328{g-node=266289} (de.espirit.firstspirit.generate.SiteProduction): Option Content:530392a2-262b-455b-a341-17e8604bb8f7

Der Unterschied liegt in der Option begrรผndet, die sie via Beanshell wohl eine ContentOption ist und via Java FSM eine SimpleOption.
Mir erklรคrt sich aktuell nicht warum. Kann da jemand helfen? Oder handelt es sich um einen Fehler?

Viele GrรผรŸe,

Philipp

0 Kudos
7 Replies
StefanSchulz
I'm new here

Hallo Philipp,

kรถnntest du noch kurz ausgeben und hier posten, was fรผr eine Kontextklasse du im FSM-Fall bekommst?

Beste GrรผรŸe

Stefan

0 Kudos

Hallo Stefan,

ich befinde mich da im GenerationContext.

Die Klasse lautet: de.espirit.firstspirit.generate.SiteProduction

Ich gehe mal davon aus, dass du den context aus der Map, die der execute-Methode รผbergeben wird, meinst.

Vielleicht noch zum Hintergrund:

Die CMS_INPUT_COMBOBOX mit dem Namen "pt_product_range" ist eine Eingabekomponente einer Seite, die bei der Generierung Informationen zu einer bestimmten product_range in Form von JSON bereitstellen soll. Der Inhalt der JSON Datei wird im HTML Kanal der Seite รผber ein Script aufruf ($CMS_RENDER(script:...)$) bewerkstelligt. Dieses Script ruft die FSM Klasse auf, dessen Log-Ausgaben im o.g. Beispiel zu sehen sind.

Viele GrรผรŸe,

Philipp

0 Kudos

Ok, auf den Kontext hรคtte ich auch selbst kommen kรถnnen, Lesen hilft Smiley Wink

Allerdings sehe ich aktuell (im Code) nicht, wieso die Option anders aufgelรถst wird. Interessant wรคre vielleicht noch die Klasse des FormData-Objekts. Eventuell รผbersehe ich irgendwo eine Sonderbehandlung.

0 Kudos

Alles gut (das รผbliche Wald-lauter-Bรคume-Problem, kenn ich nur zu gut Smiley Wink)

Habe mal die Klassen fรผr das FormData und das FormField Objekt rausgesucht:

FSM-Fall:

context.logInfo("FormData Class:" + context.getPage().getFormData().getClass());

context.logInfo("FormField Class:" + context.getPage().getFormData().get(language, "pt_product_range").getClass());

INFO  13.07.2015 11:47:55.958{g-node=266289} (de.espirit.firstspirit.generate.SiteProduction): FormData Class:class de.espirit.firstspirit.store.access.DataWrappingFormData

INFO  13.07.2015 11:47:55.958{g-node=266289} (de.espirit.firstspirit.generate.SiteProduction): FormField Class:class de.espirit.firstspirit.store.access.DataWrappingFormData$EditorValueWrappingFormField

Im BeanShell-Fall:

bsh % e.getFormData();

<de.espirit.firstspirit.store.access.DataWrappingFormData@8b11c8e1>

bsh % e.getFormData().get(e.getProject().getMasterLanguage(), "pt_product_range");

<de.espirit.firstspirit.store.access.DataWrappingFormData$EditorValueWrappingFormField@1d1ba6>

Also aus meiner Sicht nichts auffรคlliges.

Viele GrรผรŸe,

Philipp

0 Kudos

Nun, auch bei abgesรคbeltem Wald sieht man die Bรคume nicht mehr. Sehr verwirrend. Gleicher Ausgangspunkt, gleiche Klassen. :smileyconfused:

Kรถnnte ein Fehler sein.

0 Kudos

Hallo Stefan,

ich hab da mal ein Ticket angelegt:

https://helpdesk.e-spirit.com/requests/18583

Unabhรคngig von dem Fehler, der Workaround wรคre ja dann รผber die FS-ID bzw. GUID an die Entity zu kommen. Der schnellste Weg der mir einfรคllt wรคre รผber eine Session eine Query zu erstellen um dann direkt auf die GUID oder FS-ID abzufragen, korrekt?

GrรผรŸe,

Philipp

0 Kudos

Hi Philipp,

wenn du eine GID bekommst und den EntityType hast (zumeist รผber das passende TableTemplate), kannst du direkt รผber die Session eine Anfrage mittels find(type, uuid) starten. Ansonsten wohl eine Query bauen, ja.

Beste GrรผรŸe

Stefan

Type a product name