Search the FirstSpirit Knowledge Base
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
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
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.
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.
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:
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
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.
((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
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!?
> 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.
Hoffentlich letzte Frage :
Wie komme ich dann an die Methoden des ehemals gelieferten GomEditorProvider:
getAllowEmpty, convertEntities, usesLanguages etc.