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