Search the FirstSpirit Knowledge Base
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
Es handelte sich um einen Bug der mit der FS-Version 5.0.510 behoben wurde.
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.
Ticket #12103 wurde dbzgl. erstellt.
Es handelte sich um einen Bug der mit der FS-Version 5.0.510 behoben wurde.