krause
I'm new here

Re: Scripting: Zugriff auf die Werte einer CMS_INPUT_CHECKBOX

Jump to solution

Hey Reza,

es geht auch mit einem FS_BUTTON.

Der Trick (danke an Rouven Broszeit!) ist, in Deinem Script nicht countrySet.add(<String>) sondern countrySet.add(<Option>) zu nutzen.

Also nicht:

countrySet = new HashSet();

countrySet.add("1");

countrySet.add("0");

checkbox.set(countrySet);

sondern

optionFactory = element.getFormData().getForm().findEditor("pt_checkbox").getOptionFactory();

optionModel = optionFactory.getOptionModel(context,language,false);

countrySet = new HashSet();

countrySet.add(optionModel.getOption("1"));

countrySet.add(optionModel.getOption("0"));

checkbox.set(countrySet);

Viele Grüße,
Steffi

0 Kudos
gockel
Crownpeak employee
Crownpeak employee

Re: Scripting: Zugriff auf die Werte einer CMS_INPUT_CHECKBOX

Jump to solution

Hallo,

noch ein paar Anmerkungen zu obigem Code.

bisheriger Code:

// Lock the selected element and check all available countries using the HashSet.

session = myDataSource.getSession();

storeElement = context.getStoreElement();

row = context.getSelectedRow();

dataSet = storeElement.getDataset(row);

currentEntity = dataSet.getEntity();

storeElement.lock(currentEntity);

storeElement.setLock(true, false);

formData = dataSet.getFormData();

formData.get(null, "cs_countrylist").set(countrySet);

dataSet.setFormData(formData);

// Save and unlock the element, commit the changes.

storeElement.save();

storeElement.unlock(currentEntity);

storeElement.setLock(false, false);

session.commit();

* Lock sollte IMMER im try/finally (vergl. Locking-Hints )

* im obigen Code wird NICHT-rekursiv gelockt und dann rekursiv gespeichert (falsch)

* im konkreten Fall ist das locken und speichern des StoreElementes (in diesem Fall Content2) komplett unnötig und erzeugt nur unnötige Revisionen

* wenn man komplett über das Dataset arbeitet, kann man sich das commit auf der Session sparen

Reduzierter Code:

content2 = context.getStoreElement();

entity = context.getSelectedRow();

dataSet = content2.getDataset(entity);

dataSet.setLock(true, false);

try {

     formData = dataSet.getFormData();

     formData.get(null, "cs_countrylist").set(countrySet);

     dataSet.setFormData(formData);

     dataSet.save("set countries", false);

} finally {

     dataSet.setLock(false, false);

}

0 Kudos