Questions & Answers

SOLVED
MichaelN
I'm new here

Auslesen der EntityFormData Editoren aus dem ContentStore

Jump to solution

Hallo,

ich mรถchte รผber die Editoren der Eingabekomponenten eines Datasets (content.getDataset(entity);) iterieren.

dazu hole ich mir das FormData

FormData formData = dataProvider.getFormData();

und dann den entsprechenden Editor:

formData.getForm().findEditor(editorName).getDefaultValue();

genau hier ist mein Problem.

Als Test lese ich die Datenbank-Schemata-Vorlagen des Mithras-Projekts aus.

Bei z.B. "Produkte" (product_categories) erhalte beim Aufruf von getDefaultValue() den Wert null und ich komme logischerweise nicht an die Informationen dieses Editors (z.B. fรผr 'cs_name' der TextEditorValue)

Bei z.B. "Produktvorschlรคge" (product_offers) erhalte ich den TextEditorValue mittels 'cs_name' und alles ist gut

0 Kudos
1 Solution

Accepted Solutions

Das wird aktuell auch nicht gehen, weil es fรผr einige Zugriffe (noch) keine Alternativen gibt. Mit Vermischung meine ich, dass z. B. der TemplateStore รผber den UserService geholt wird, die inneren Daten (OptionModel) dann mit Hilfe eines Brokers. Wรผrde man sich den TemplateStore รผber einen Broker holen (Projekt-bezogen, wie oben, รผber den StoreAgent), wรคre auch der Zugriffsweg auf die OptionFactory klarer ersichtlich. Der SpecialistsBroker ersetzt benรถtigte API aus Connection, Project und UserService durch die modulare Bereitstellung von spezialisierten und funktional รผbersichtlichere Agenten. Hier ist ein einheitlicher Weg vermutlich sinnvoller, als Teile zu ersetzen.

Ich hoffe, dass jetzt ein funktionierender Weg fรผr Euer Problem an dieser Stelle gefunden wurde.

GruรŸ

Stefan

View solution in original post

0 Kudos
24 Replies
andre
I'm new here

formData = Dataset#getFormData()

d.h. dann

final FormField<?> formField = formData.get(language, editorName);

formField.get() <= dieses ist den der Wert des editors.

formData.getForm() greift auf die Formulardefinition zu. und wenn kein default-wert gesetzt ist wird null geliefert.

0 Kudos
aVogt
Returning Creator

vielleicht hilft das ja:

final List<String> listVarNam = formData.getForm().appendEditorNames(null);

Da brauchst Du nicht die namen der Eingebekomponenten wissen. Du bekommst eine Liste mit allen Namen der Eingabekomponenten zurรผck.

0 Kudos

Ja mittels formField.get() komme ich dann an den Wert des editors, aber ich benรถtige ja ein EditorValue<?> um dann dynmaisch auf die einzelnen unterschiedlichen Editoren zu reagieren.

Das funktioniert auch รผberall wunderbar nur bei einigen Datenbank-Schemata-Vorlagen halt nicht.

Aber es existieren hier alle EditorValues:

test.jpg

0 Kudos

Michael Nahberger wrote:

Ja mittels formField.get() komme ich dann an den Wert des editors, aber ich benรถtige ja ein EditorValue<?> um dann dynmaisch auf die einzelnen unterschiedlichen Editoren zu reagieren.

was heisst denn in deinem fall dynamisch? mir ist nicht klar warum du die EditorValue brauchst?

willst du abhaengig von einem Wert einen anderen รคndern? ...da kรถnnten die Regeln/Ruls helfen.  willst du nur den Typ des Werts wissen... -> de.espirit.firstspirit.forms.FormField#getType

0 Kudos

Wir haben hier eine Anwendung, die das importieren von Daten in FS erlaubt.Hierfรผr lesen wir im Vorhinein die Informationen aus FS aus um mรถglichst nur validen Content zu importieren.

z.B. benรถtigen wir im Falle, dass es sich um ein OptionsEditorValue handelt das OptionModel, welches wir mittels getOptionModel ermitteln. dazu mรผssen wir aber wissen, dass es sich um ein OptionsEditorValue handelt.

0 Kudos

((OptionFactoryProvider)form.findEditor(formField)).getOptionFactory();

und ueber die Factory kommt man an das OptionModel. und getType von FormField sollte in diesem FAll Option.class sein

0 Kudos

OK und fรผr _alle_ anderen Eingabekomponenten geht das analog?

Wir stellen gerade Code auf die FormData-Api um und der alte sieht etwa so aus und wir konnetne immer mit dem EditorValue arbeiten und auf dieser Grundlage agieren:

Data d = ...

                              

DataValue dv = d.get(varName);

EditorValue<?> editorValue = dv.getEditor();

if (editorValue instanceof ComboboxEditorValue) {

  // do something

} else if (editorValue instanceof ContentAreaListValue) {

  // do something

} else if (editorValue instanceof ...){

...

Das geht so dann wohl nicht mehr!?

0 Kudos

> Das geht so dann wohl nicht mehr!?

.... FormField#getType liefert keine EditorValue aber den WerteTyp.

ComboboxEditorValue  ...siehe oben Option

ContentAreaListValue siehe API -> interface ContentAreaListValue extends EditorValue<SectionList>

also ist der WerteTyp SectionList

usw.

0 Kudos

Hoffentlich letzte Frage Smiley Happy:

Wie komme ich dann an die Methoden des ehemals gelieferten GomEditorProvider:

getAllowEmpty, convertEntities, usesLanguages etc.

0 Kudos

Type a product name