IBM ICN 3.0.3 - уродливое отображение списка ChoiceList для однозначного свойства в диалоговом окне содержимого
Для заданного класса Document однозначное свойство шаблона ввода связано с ChoiceList. Это хорошо работает, если у ChoiceList нет "подуровней" (Choice).
Когда добавлен выбор группы и пользователь пытается заполнить свойство, диалоговое окно становится уродливым, как показано ниже:
Есть ли способ автоматически развернуть древовидное представление для корневых вариантов выбора и, кроме того, удалить метку "none" ("Aucun" на французском языке), а также символическое имя списка ChoiceList (размыто здесь)?
Должен ли я написать плагин, чтобы исправить проблему?
Обновить. Цель "Aucun" здесь состоит в том, чтобы очистить поле.
1 ответ
Я связался со службой поддержки, и в двух словах, это невозможно "из коробки". Впрочем, с плагином можно иметь дело с событиями, связанными с этим элементом управления.
Я связался со службой поддержки, и в двух словах, это невозможно "из коробки". Но я нашел обходной путь.
Я написал ResponseFilter, который ловит ответ на запрос /p8/openContentClass
, Оказывается, его ответ содержит значения ChoiceList:
{
"classes": [{
"parentClassId": "<PARENTCLASSID>",
"template_name": "<ENTRYTEMPLATE>",
/* [...] */
}
],
/* [...] */
"criterias": [/* [...] */, {
"settability": "readWrite",
"defaultOperator": "EQUAL",
"minValue": null,
"uniqueValues": true,
"orderable": false,
"choiceList": {
"choices": /* <----- here */,
"displayName": "CL_ToFilter"
},
/* [...] */
"name": "<propertyName>"
}
]
}
Переформатирование "choices"
запись для получения одноуровневого списка выбора обеспечивает отображение на одном уровне. Ниже соответствующий код ResponseFilter:
public class ChoiceListValuesResponseFilter extends PluginResponseFilter {
public String[] getFilteredServices() {
return new String[] { "/p8/openContentClass"/* "/p8/openItem"*/ };
}
public void filter(String serverType, PluginServiceCallbacks callbacks,
HttpServletRequest request, JSONObject jsonResponse) throws Exception {
// [...]
JSONArray jsonProperties =
(JSONArray) jsonResponse.get("criterias");
Iterator it = jsonProperties.iterator();
while (it.hasNext()) {
JSONObject jo = (JSONObject) it.next();
if ("<PROPERTYWITHFILTEREDCL>".equals(jo.get("name"))) {
JSONObject choiceListJo = (JSONObject) jo.get("choiceList");
// do the processing here
break;
}
}
}
// [...]
}