felix_reinhold
Returning Responder

FS 5.0: FS_List per Button im WebEdit befüllen

Jump to solution

Hallo zusammen,

ich erstelle nach dem Klicken eines FS-BUTTON dynamisch ein Formular und befülle darüber eine FS_LIST.

(Der FS_BUTTON öffnet einen Dialog mit mehreren Checkboxen, den ich per FormsAgent selbstständig zusammenbastel. Die Werte der ausgewählten Checkboxen übernehme ich dann in eine FS_LIST aus dem ursprünglichen Formular). Im JavaClient funktioniert alles super und auch im WebClient läuft das Skript ohne Fehler durch (anhand von Debugausgaben konnte ich erkennen, dass jede Codezeile auch wirklich ausgeführt wurde). Leider bleibt die FS_LIST im WebClient anschließend leer, während sie im JavaClient regulär befüllt wird. Gibt es hier etwas besonderes im 5.0er WebClient (Version 5.0.427) zu beachten? Hier die entsprechenden Codeausschnitte (gekürzt):

GOM:

<FS_BUTTON
    name="btn_edit_function"
    noBreak="no"
    onClick="script:sc_get_functions_and_applications"
    style="button"
    useLanguages="no">
    <LANGINFOS>
      <LANGINFO lang="*" label="Edit Functions"/>
      <LANGINFO lang="DE" label="Funktionen bearbeiten"/>
    </LANGINFOS>
    <PARAMS>
      <PARAM name="branch">#field.tt_branch</PARAM>
      <PARAM name="function">#field.tt_function</PARAM>
      <PARAM name="field">functionList</PARAM>
    </PARAMS>
  </FS_BUTTON>

  <FS_LIST name="tt_function" height="200" noBreak="no" rows="8">
    <DATASOURCE type="database" useLanguages="no">
      <ACTIONS>
        <ACTION name="GOTO"/>
        <ACTION name="VIEW"/>
      </ACTIONS>
      <COLUMNS>
        <COLUMN show="no">#identifier</COLUMN>
        <COLUMN show="yes">tt_name</COLUMN>
        <COLUMN show="no">#fs_id</COLUMN>
        <COLUMN show="no">tt_id</COLUMN>
      </COLUMNS>
      <LAYOUT>
        <ADD component="toolbar" constraint="top"/>
        <ADD component="overview" constraint="center"/>
        <ADD component="stackedview" constraint="hide"/>
      </LAYOUT>
      <TABLE>tt_function</TABLE>
    </DATASOURCE>
    <LANGINFOS>
      <LANGINFO lang="*" label="Functions / Sub-Branch"/>
      <LANGINFO lang="DE" label="Funktionen / Sub-Branche"/>
    </LANGINFOS>
  </FS_LIST>

Skript:

//...Imports...

masterLang = element.getProject().getMasterLanguage();

masterLangAbbr = masterLang.getAbbreviation().toUpperCase();

//branch.get()==null prüfen, weil branch.isEmpty() immer true liefert

if (branch.isSet() && branch.get()!=null){

    boolean showCheckBoxes = true;

    entityList = branch.get().getValue().getValue(field);

   

    gui = new StringBuffer();

    //...Aufbau der GUI mit Checkboxen: "<CMS_MODULE>...</CMS_MODULE>"

   

    // get a FormsAgent for creating a form from XML

    formsAgent=context.requireSpecialist(FormsAgent.TYPE);

    form=formsAgent.getForm(gui.toString());       

   

    if (showCheckBoxes){        

         list = function.get();

        presets = new DataImpl(element, form.getModel(), false);

       

        List optionsContainer = new ArrayList();

        SimpleOptionFactory factory = new SimpleOptionFactory(optionsContainer);

       

        tmpFrmData = form.createFormData();

        FormField ff = tmpFrmData.get(language, "cs_target");

       

        EditorValue defaultValue = new CheckboxEditorValueImpl();       

        Set defaultValues = ff.get();

        for (entry : list){

           

            Option opt = factory.create(entry.getId());

            defaultValues.add(opt);

        }

        ff.set(defaultValues);        

    }

    

    // get an OperationAgent

    opAgent=context.requireSpecialist(OperationAgent.TYPE);

    // aquire a ShowFormDialogOperation and configure it

    displayFormOp=opAgent.getOperation(ShowFormDialogOperation.TYPE);

    displayFormOp.setOkText("Weiter");

    // open the form. It will return a FormData

    if (showCheckBoxes) displayFormOp.setDefaults(tmpFrmData);

    frmData = displayFormOp.perform(form,Arrays.asList(language));

   

    if (frmData!=null && showCheckBoxes){   

      

        list.clear();

        producer = list.getProducer();

        options = frmData.get(language, "cs_target").get();

       

        //Options is a set of SimpleOptions, so "contains" cannot be used. Therefore I create a new list here

        List chosenOptions = new ArrayList();

        for (option : options){

            chosenOptions.add(option.getValue().toString());

        }

       

        //add Entities to FS_LIST if chosen

        for (Entity ent : entityList){

            if (chosenOptions.contains(ent.getValue("fs_id").toString())) {

                list.add(producer.create(ent));

            }

        }       

        function.set(list);       

    }

   

} else {

    //...Hier kommt ein Dialog per OperationsAgent

}


function.set(list) hat hier keinen Effekt. Auch beim Neuladen der Seite/des Formulars im WebEdit sind die Werte nicht in die FS_LIST übertragen. Es scheint also kein Renderfehler zu sein, dass die FS_LIST einfach nicht aktualisiert wird im WebClient. Hat hier jemand eine Idee, was noch fehlt, damit das Ganze im WebClient lauffähig wird?

(Das vollständige Skript ist nochmal angehängt).

Beste Grüße

Felix

0 Kudos
1 Solution

Accepted Solutions
felix_reinhold
Returning Responder

Es handelte sich um einen Bug der mit der FS-Version 5.0.510 behoben wurde.

View solution in original post

0 Kudos
3 Replies
felix_reinhold
Returning Responder

Ich erlaube mir nochmal das hier zu pushen, da wir es zeitnah benötigen. Ansonsten würde ich ein Ticket im Helpdesk aufmachen, da es dann doch ein wenig Bugcharakter hat.

0 Kudos

Ticket #12103 wurde dbzgl. erstellt.

0 Kudos
felix_reinhold
Returning Responder

Es handelte sich um einen Bug der mit der FS-Version 5.0.510 behoben wurde.

0 Kudos