- 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 »