- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Auslesen der EntityFormData Editoren aus dem ContentStore
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
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
http://www.e-spirit.com/odfs50/access/de/espirit/firstspirit/forms/FormData.html
siehe api: de.espirit.firstspirit.forms.FormData#getForm liefert einen GomEditorProvider
name = de.espirit.firstspirit.forms.FormField#getName
FormData.getForm().findEditor(name).[allowsEmpty() | ...]
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ich versuche das gerade umzusetzen stoรe aber schon wieder auf ein Problem.
Wenn ich รผber die options iteriere fliegt _nur_ bei Produkteigenschaften (product_properties => cs_property (CMS_INPUT_COMBOBOX))
OptionFactory optionFactory = ((OptionFactoryProvider) editor).getOptionFactory();
OptionModel optionModel = optionFactory.getOptionModel(broker, lang, false);
for (Option option : optionModel) { <- hier fliegt die Exception
die folgende Exception:
java.lang.IllegalStateException: No specialist found for 'de.espirit.firstspirit.agency.StoreAgent$1@9f3c6a19'!
at de.espirit.firstspirit.agency.AbstractSpecialistsBroker.requireSpecialist(AbstractSpecialistsBroker.java:14)
at de.espirit.firstspirit.store.access.contentstore.ContentOptionModel.getTableTemplateInternal(ContentOptionModel.java:94)
at de.espirit.firstspirit.store.access.contentstore.ContentOptionModel.getEntityType(ContentOptionModel.java:78)
at de.espirit.firstspirit.store.access.contentstore.ContentOptionModel.createList(ContentOptionModel.java:195)
at de.espirit.firstspirit.store.access.contentstore.ContentOptionModel.getList(ContentOptionModel.java:182)
at de.espirit.firstspirit.store.access.contentstore.ContentOptionModel$OptionIterator.<init>(ContentOptionModel.java:284)
at de.espirit.firstspirit.store.access.contentstore.ContentOptionModel.iterator(ContentOptionModel.java:275)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hat hier jemand eine Idee, warum ich nicht die Datensรคtze product_properties auslesen kann?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Moin,
woher kommt denn der SpecialistsBroker broker, der dort รผbergeben wird? In welchem Kontext wird der Code ausgefรผhrt?
Gruร
Stefan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo,
der Broker commt von Connection.getBroker().
Der Code sieht in etwa so aus:
GomEditorProvider form = formData.getForm();
GomFormElement editor = form.findEditor(varName);
OptionFactory optionFactory = ((OptionFactoryProvider) editor).getOptionFactory();
OptionModel optionModel = optionFactory.getOptionModel(broker, lang, false);
for (Option option : optionModel) { <- hier fliegt die Exception
...
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ja, die Connection ist der falsche Lieferant. Der Broker einer Connection hat keinerlei Projektinformationen und kann somit auch nicht auf den Store zugreifen.
Wie wird die Routine denn gestartet? รber Kontextmenรผ? รber Menรผ? Serverseitig? Ist es ein Skript? Eine Klasse? Ein Service?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Es ist eine eigenstรคndige Anwendung, welche die API nutzt und mittels Dieser eine Connection aufbaut (ConnectionManager.getConnection).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ah. Ok. Aber irgendwie wird doch auch auf die Daten des Projekts zugegriffen. Und da geht es anscheinend nicht รผber den Broker der Connection, oder?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hmmm, welche Daten? Alle? auch die Seiten, oder nur die Datensรคtze?
Die Templates z.B. werden so geholt
project = connection.getProjectByName(name);
templateStore = (TemplateStoreRoot) project.getUserService().getStore(Type.TEMPLATESTORE, false);
Also anscheinend immer vieles รผber den UserService.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Das habe ich mir schon so gedacht. Mit der Nutzung von UserService und Broker wird alte und neue API gemischt. Jetzt kann man konsequent weiter die alte API nutzen, dann nutzt man den UserService auch, um sich das OptionModel zu holen (als veraltet markierte Methode). Oder man holt sich den Projekt-bezogenen Broker รผber connection.getBroker().requireSpecialist(BrokerAgent.TYPE).getBrokerByProjectName(name). Dann kรถnnte man darรผber auch auf die Stores zugreifen.
Vielleicht solltet ihr รผber eine Konsolidierung der API-Nutzung nachdenken. Eine Mischung ist nicht unbedingt zukunftsfรคhig.
Gruร
Stefan

