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
24 Replies

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() | ...]

0 Kudos

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)

0 Kudos

Hat hier jemand eine Idee, warum ich nicht die Datensรคtze product_properties auslesen kann?

0 Kudos

Moin,

woher kommt denn der SpecialistsBroker broker, der dort รผbergeben wird? In welchem Kontext wird der Code ausgefรผhrt?

GruรŸ

Stefan

0 Kudos

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

...

}

0 Kudos

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?

0 Kudos

Es ist eine eigenstรคndige Anwendung, welche die API nutzt und mittels Dieser eine Connection aufbaut (ConnectionManager.getConnection).

0 Kudos

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?

0 Kudos

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.

0 Kudos

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

0 Kudos

Type a product name