- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ok, auf den Kontext hรคtte ich auch selbst kommen kรถnnen, Lesen hilft
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Alles gut (das รผbliche Wald-lauter-Bรคume-Problem, kenn ich nur zu gut )
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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

