Aller au contenu principal

Scripting: Zugriff auf die Werte einer CMS_INPUT_CHECKBOX

Commentaires

9 commentaires

  • Zendesk API User
    Author: Peter_Jodeleit - 8/8/2012 15:31

    Über ein Kontextemenü-Skript wird das nicht funktionieren (zumindest nicht in 4.2).

    Du willst ja nicht (nur) die Werte modifizieren, sondern die Anzeige in der GUI (und zwar nur, wenn das Formular im Bearbeitungszustand ist).

    Das funktioniert über FS_BUTTON, was für den Redakteur sogar komfortabler ist, weil dadurch eine Schaltfläche direkt im Formular an der Komponente eingeblendet werden kann.

    Zu dem Thema findest du einiges hier in der Community.

    0
  • Zendesk API User
    Author: gofur - 8/8/2012 15:33

    Okay, danke. Ich werde dann hier mal weiterschauen.

    Aber auch über den FS_BUTTON wird doch ein Script aufgerufen, daher muss ich die gleiche Frage nochmals stellen. ;-)

    0
  • Zendesk API User
    Author: Peter_Jodeleit - 8/9/2012 7:47

    Wie gesagt, dazu gibt es schon Infos hier in der Community. Und auch eine Doku: http://www.e-spirit.com/odfs42/de/vorlagenentwicklung/formular/fs/fs_button/button.html

    Community-Diskussion die zu dem Thema passen könnte: Formular nach Klick auf FS_BUTTON aktualisieren

    Das Suchfeld für die Community ist übrigens oben rechts :smileywink:

    0
  • Zendesk API User
    Author: gofur - 8/9/2012 8:36

    Ah! Danke! Aber da oben übersieht man es ja so leicht!! :smileywink:

    0
  • Zendesk API User
    Author: gofur - 8/14/2012 10:22

    So, mit den Beiträgen aus dem Forum und dem folgenden Code hätte ich eigentlich gedacht, dass es funktioniert. Das tut es aber leider nicht. Wenn ich ein leeres Hashset über checkbox.set(countrySet) setze, so werden alle Werte deselektiert. Dies deutet schon mal darauf, dass es grundsätzlich zu funktionieren scheint. Wenn ich aber das Hashset mit Werten der verfügbaren Checkboxen fülle, so tut sich nach dem set() leider nichts.

    FS_BUTTON:

    <FS_BUTTON

            name="cs_select_country_button"

            allowEmpty="yes"

            hFill="yes"

            noBreak="no"

            onClick="script:select_all_countries"

            style="firstspirit"

            useLanguages="no">

            <LANGINFOS>

              <LANGINFO lang="*" label="Select all countries"/>

            </LANGINFOS>

            <PARAMS>

              <PARAM name="checkbox">#field.cs_countrylist</PARAM>

            </PARAMS>

      </FS_BUTTON>

    Script:

    //!Beanshell

    if (null != element) {

        entity = element.getEntity();

        countrySet = new HashSet();

        countrySet.add("1");

        countrySet.add("0");

        checkbox.set(countrySet);

    }

    0
  • Zendesk API User
    Author: maaroufi - 8/20/2012 10:05

    Hallo Reza,

    Folgendes Skript könnte weiterhelfen um alle Werte einer Checkbox zu selektieren:

    import java.io.IOException;

    import java.util.HashSet;

    import java.util.List;

    import java.util.Set;

    import de.espirit.firstspirit.access.Connection;

    import de.espirit.firstspirit.access.ConnectionManager;

    import de.espirit.firstspirit.access.UserService;

    import de.espirit.firstspirit.access.editor.value.Option;

    import de.espirit.firstspirit.access.project.Project;

    import de.espirit.firstspirit.access.store.ElementDeletedException;

    import de.espirit.firstspirit.access.store.LockException;

    import de.espirit.firstspirit.access.store.Store;

    import de.espirit.firstspirit.access.store.IDProvider.UidType;

    import de.espirit.firstspirit.access.store.contentstore.Content2;

    import de.espirit.firstspirit.access.store.contentstore.ContentStoreRoot;

    import de.espirit.firstspirit.access.store.pagestore.Body;

    import de.espirit.firstspirit.access.store.pagestore.Page;

    import de.espirit.firstspirit.access.store.pagestore.PageStoreRoot;

    import de.espirit.firstspirit.access.store.pagestore.Section;

    import de.espirit.firstspirit.forms.FormData;

    import de.espirit.firstspirit.forms.FormField;

    import de.espirit.or.schema.Entity;

            String DATASOURCE = "pressreleases";

            String SECTIONNAME="textbildhomepageteaser";

            String CHECKBOXNAME = "cs_countryList";

            String PAGE="mithras_home";

            UserService us2 = context.getUserService();

            PageStoreRoot pageStore = (PageStoreRoot) us2.getStore(

                    Store.Type.PAGESTORE, false);

            ContentStoreRoot contentStore = (ContentStoreRoot) us2.getStore(

                    Store.Type.CONTENTSTORE, false);

            Content2 myDataSource = contentStore.getContent2ByName(DATASOURCE);

            data = myDataSource.getData();

            opt = new HashSet();

            for (int i = 0; i < data.size(); i++) {

                opt.add(data.get(i).getValue("fs_id").toString());

            }

            Page page = (Page) pageStore.getStoreElement(PAGE, UidType.PAGESTORE);

            Section mySec=(Section) page.getChildByName(Section.class, SECTIONNAME);

            try {

                page.setLock(true);

                FormData d = mySec.getFormData();

                FormField f = d.get(us2.getProject().getMasterLanguage(), CHECKBOXNAME);

                eval = f.get();

                f.set(opt);

                mySec.setFormData(d);

                mySec.save();

                page.release();

                page.setLock(false);

            } catch (LockException e) {

                e.printStackTrace();

            }

    und folgendes um alle Werte einer Checkbox zu deselektieren:

    import java.io.IOException;

    import java.util.HashSet;

    import java.util.List;

    import java.util.Set;

    import de.espirit.firstspirit.access.Connection;

    import de.espirit.firstspirit.access.ConnectionManager;

    import de.espirit.firstspirit.access.UserService;

    import de.espirit.firstspirit.access.editor.value.Option;

    import de.espirit.firstspirit.access.project.Project;

    import de.espirit.firstspirit.access.store.ElementDeletedException;

    import de.espirit.firstspirit.access.store.LockException;

    import de.espirit.firstspirit.access.store.Store;

    import de.espirit.firstspirit.access.store.IDProvider.UidType;

    import de.espirit.firstspirit.access.store.contentstore.Content2;

    import de.espirit.firstspirit.access.store.contentstore.ContentStoreRoot;

    import de.espirit.firstspirit.access.store.pagestore.Body;

    import de.espirit.firstspirit.access.store.pagestore.Page;

    import de.espirit.firstspirit.access.store.pagestore.PageStoreRoot;

    import de.espirit.firstspirit.access.store.pagestore.Section;

    import de.espirit.firstspirit.forms.FormData;

    import de.espirit.firstspirit.forms.FormField;

    import de.espirit.or.schema.Entity;

          

            String CHECKBOXNAME = "cs_countryList";

            String SECTIONNAME="textbildhomepageteaser";

            String PAGE="mithras_home";

            UserService us2 = context.getUserService();

            PageStoreRoot pageStore = (PageStoreRoot) us2.getStore(

                    Store.Type.PAGESTORE, false);

            Page page = (Page) pageStore.getStoreElement(PAGE, UidType.PAGESTORE);

            Section mySec=(Section) page.getChildByName(Section.class, SECTIONNAME);

            try {

                page.setLock(true);

                FormData d = mySec.getFormData();

                FormField f = d.get(us2.getProject().getMasterLanguage(), CHECKBOXNAME);

                eval = f.get();

                f.set(null);

                mySec.setFormData(d);

                mySec.save();

                page.release();

                page.setLock(false);

            } catch (LockException e) {

                e.printStackTrace();

            }

    Nach Refresh der Seite sollten je nach aufgerufenem Skript die Items alle selektiert oder deselektiert sein. Die Parameter PAGE, DATASOURCE, SECTIONNAME und CHECKBOXNAME müssten ggfls. angepasst werden.

    Anmerkung: Die Methode StoreElement.getChildByName(...) ist deprecated.

    Freundliche Grüße

    Ismail

    0
  • Zendesk API User
    Author: maaroufi - 8/20/2012 14:13

    Eine einfache Deselektion aller Werte über einen FS_Button ließe sich auch so implementieren:

    Template:

      <FS_BUTTON

            name="button_uncheck"

            allowEmpty="yes"

            hFill="yes"

            noBreak="no"

            onClick="script:uncheckall"

            useLanguages="no">

            <LANGINFOS>

              <LANGINFO lang="*" label="Keins auswählen" description="TEXT"/>

            </LANGINFOS>

            <PARAMS>

              <PARAM name="uncheck">#field.cs_countryList</PARAM>

            </PARAMS>

          </FS_BUTTON>

    Skript:

         uncheck.set(null);

    0
  • Zendesk API User
    Author: gofur - 8/20/2012 15:34

    Hallo Ismail,

    Vielen Dank schon mal für die Antworten. Sorry, dass es sich so lange hinzieht.

    Das Deselektieren habe ich bereits vor einiger Zeit mit Hilfe eine s FS-BUTTON umgesetzt, genau wie du vorgeschlagen hast. Das war einfach! :-) ich habe für das Selektieren zuerst auch den Weg über einen FS-BUTTON gewählt, jedoch hat sich das Formular respektive die Daten nicht verändert (siehe Posting #5).

    Beim Selektieren aller Checkboxen verwenden wir eine Datenquelle und haben mit folgendem Code (an deinen Post anlehnend) angefangen:

    e = context.getStoreElement();

    row = context.getSelectedRow();

    dataSet = e.getDataset(row);

    currentEntity = dataSet.getEntity();

    formData = dataSet.getFormData();

    ContentStoreRoot contentStore = (ContentStoreRoot) us2.getStore(Store.Type.CONTENTSTORE, false);

    Content2 myDataSource = contentStore.getContent2ByName("country");

    data = myDataSource.getData();

    opt = new HashSet();

    for (int i = 0; i < data.size(); i++) {

        opt.add(data.get(i).getValue("fs_id").toString());

    }

    Bis hierhin funktioniert alles sehr gut. Wenn ich das HashSet dann allerdings wieder der FormData zuweise (formData.set(opt);), so kommt die Exception, dass die Methode "set" für dieses FormData nicht verfügbar ist. Bei einem Eintrag aus der Datenquelle ist dies wahrscheinlich auch der falsche Weg.

    :smileyconfused:

    0
  • Zendesk API User
    Author: gofur - 8/21/2012 14:28

    Puh, so hat es geklappt:

    // Retrieve all available countries from the corresponding data source and construct a HashSet of it.

    UserService userService = context.getUserService();

    ContentStoreRoot contentStore = (ContentStoreRoot) userService.getStore(Store.Type.CONTENTSTORE, false);

    Content2 myDataSource = contentStore.getContent2ByName("country");

    data = myDataSource.getData();

    Set countrySet = new HashSet();

    for (int i = 0; i < data.size(); i++) {

        String country = data.get(i).getValue("fs_id").toString();

        countrySet.add(country);

    }

    // 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();

    "Leider" nur über das Kontextmenü. Über einen FS-BUTTON wäre es noch schöner, da habe ich aber leider keinen Weg gefunden.

    0

Vous devez vous connecter pour laisser un commentaire.