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):
//...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
}
(Das vollständige Skript ist nochmal angehängt).