- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Scripting: Zugriff auf die Werte einer CMS_INPUT_CHECKBOX
Hallo,
Wir speichern fรผr ein Element in einer Datenquelle รผber ein Eingabeformular Checkbox-Werte. Dieses Eingabeelement ist รผber eine CMS_INPUT_CHECKBOX, die 20 Werte aus einer anderen Datenquelle erhรคlt, realisiert:
<CMS_INPUT_CHECKBOX name="cs_countrylist" gridWidth="3" hFill="yes" useLanguages="no">
<CMS_INCLUDE_OPTIONS type="database">
<LABELS>
<LABEL lang="*">#item.name</LABEL>
</LABELS>
<TABLE>xxx.cs_country</TABLE>
</CMS_INCLUDE_OPTIONS>
<LANGINFOS>
<LANGINFO lang="*" label="xxx"/>
</LANGINFOS>
</CMS_INPUT_CHECKBOX>
Der Anwender sieht im FS-Client also 20 Checkboxen, die er an- bzw. abhaken kann. Neben der Initialbefรผllung mรถchten wir aus Convenience-Grรผnden nun per Script รผber das Kontextmenรผ eine Funktion anbieten, um fรผr einen Datenquelleneintrag alle Checkboxen an- bzw. alle abzuhaken. In der Developer-Doku finde ich zwar ein API-Beispiel (CheckboxEditorValueExample), dies bringt mich auf Script-Ebene leider nicht weiter, da ich nicht weiร, wie ich รผber das Script an das Editor-Objekt gelange. Wahrscheinlich gibt es aber auch eine einfache Mรถglichkeit, per Script alle Hรคkchen zu setzen bzw. wegzunehmen, oder?
Vielen Dank im Voraus und viele Grรผรe aus Hamburg
Reza Nazarian
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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);
}


- ยซ Previous
-
- 1
- 2
- Next ยป
- ยซ Previous
-
- 1
- 2
- Next ยป