Questions & Answers

SOLVED
civca
Returning Observer

Working with cms_input_list trough FS API

Jump to solution

Hello community

I'm having trouble working with the cms_input_list component through the API.
I figured out how to access the model and the options within the model, how to set a new selection, and everything seems to work, but the selected value can't be saved afterwards.
Specifically, I'm doing some migration, I'm accessing a datasource, and I need to set cms_input_list to a certain value.
I did like this:

targetDataset = targetContent.getDataset(targetEntity);
targetData = targetDataset.getFormData();
.
.
.
//filed name dtMandant
GomFormElement gomFormElement = targetData.getForm().findEditor("dtMandant");
OptionFactory factory = ((OptionFactoryProvider) gomFormElement).getOptionFactory();
OptionModel optionModel = factory.getOptionModel(this.getClientScriptContext().getUserService().getConnection().getBroker(),
language, false);
Option option = optionModel.getOption("faculty_02");
optionModel.setSelectedOption(option);
this.getClientScriptContext().logInfo("--- option after set " + optionModel.getSelectedOption());//writes --- option after set faculty_02 
this.getClientScriptContext().logInfo("--- mandant after set " + targetData.get(language,
"dtMandant").get());//writes --- mandant after set []
//it seems as if some connection between the objects is lost somewhere and the selection is not remembered
//for other input components everything works as it should

.
.
.
//of course, after setting all the other fields, I save it all
targetDataset.setFormData(targetData);
targetDataset.save();


 

0 Kudos
1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

Hi,

when dealing with option based input components, you can just set an โ€žappropriate valueโ€œ to the FormField. E.g. if itโ€™s based on String (like it is when using <entries>), the following should work:

targetDataset = targetContent.getDataset(targetEntity);
targetData = targetDataset.getFormData();
targetData.get(language, "dtMandant").set(Collections.singleton("faculty_02"));
//of course, after setting all the other fields, I save it all
targetDataset.setFormData(targetData);
targetDataset.save();

For other cases, i.e. when the INPUT_LIST is based on database entries you could simply use a Collection of Datasets or Entities in the FormFieldโ€˜s .set(โ€ฆ) method.

The same applies to INPUT_CHECKBOX, INPUT_RADIOBUTTON and INPUT_COMBOBOX by the way - for the latter two, you donโ€™t need a Collection of course but just the value itself.

Hope this helps!

Michael

View solution in original post

0 Kudos
2 Replies
mbergmann
Crownpeak employee

Hi,

when dealing with option based input components, you can just set an โ€žappropriate valueโ€œ to the FormField. E.g. if itโ€™s based on String (like it is when using <entries>), the following should work:

targetDataset = targetContent.getDataset(targetEntity);
targetData = targetDataset.getFormData();
targetData.get(language, "dtMandant").set(Collections.singleton("faculty_02"));
//of course, after setting all the other fields, I save it all
targetDataset.setFormData(targetData);
targetDataset.save();

For other cases, i.e. when the INPUT_LIST is based on database entries you could simply use a Collection of Datasets or Entities in the FormFieldโ€˜s .set(โ€ฆ) method.

The same applies to INPUT_CHECKBOX, INPUT_RADIOBUTTON and INPUT_COMBOBOX by the way - for the latter two, you donโ€™t need a Collection of course but just the value itself.

Hope this helps!

Michael

0 Kudos
civca
Returning Observer

thank you man, you helped me a lot.

0 Kudos

Type a product name