Вот основной код класса BadgeFormatter:
Код: Выделить всё
package org.joget.tutorial;
import java.util.Map;
import org.joget.apps.app.service.AppUtil;
import org.joget.apps.datalist.model.DataList;
import org.joget.apps.datalist.model.DataListColumn;
import org.joget.apps.datalist.model.DataListColumnFormatDefault;
import org.joget.commons.util.LogUtil;
public class BadgeFormatter extends DataListColumnFormatDefault {
@Override
public String format(DataList dataList, DataListColumn column, Object row, Object value) {
String result = (value != null) ? value.toString() : "";
if (!result.isEmpty()) {
try {
String badgeType = getPropertyString("badgeType");
if (badgeType == null || badgeType.isEmpty()) {
badgeType = "primary";
}
Object[] conditionsArray = (Object[]) getProperty("conditions");
LogUtil.info(getClassName(), "Processing value: " + result);
if (conditionsArray != null) {
LogUtil.info(getClassName(), "Conditions array length: " + conditionsArray.length);
} else {
LogUtil.info(getClassName(), "Conditions array is null");
}
if (conditionsArray != null && conditionsArray.length > 0) {
for (Object conditionObj : conditionsArray) {
if (conditionObj instanceof Map) {
Map condition = (Map) conditionObj;
LogUtil.info(getClassName(), "Condition map: " + condition.toString());
String conditionValue = condition.get("value");
String conditionBadge = condition.get("badge");
LogUtil.info(getClassName(), "Checking condition: Value=" + conditionValue + ", Badge=" + conditionBadge);
if (conditionValue != null && conditionBadge != null) {
if (conditionValue.trim().equalsIgnoreCase(result.trim())) {
badgeType = conditionBadge.toLowerCase();
LogUtil.info(getClassName(), "Match found! Applying badge: " + badgeType);
break;
}
}
}
}
}
LogUtil.info(getClassName(), "Final badge type applied: " + badgeType);
result = "" + result + "";
} catch (Exception e) {
LogUtil.error(getClassName(), e, "Error in BadgeFormatter plugin");
result = "" + result + "";
}
}
return result;
}
}
Код: Выделить всё
[
{
"title": "Badge Formatter Configuration",
"properties": [
{
"name": "badgeType",
"label": "Default Badge Type",
"type": "selectbox",
"options": [
{"value": "primary", "label": "Primary"},
{"value": "secondary", "label": "Secondary"},
{"value": "success", "label": "Success"},
{"value": "danger", "label": "Danger"},
{"value": "warning", "label": "Warning"},
{"value": "info", "label": "Info"},
{"value": "light", "label": "Light"},
{"value": "dark", "label": "Dark"}
],
"required": true
},
{
"name": "conditions",
"label": "Badge Conditions",
"type": "grid",
"columns": [
{"name": "value", "label": "Value", "type": "textfield"},
{
"name": "badge",
"label": "Badge Type",
"type": "selectbox",
"options": [
{"value": "primary", "label": "Primary"},
{"value": "secondary", "label": "Secondary"},
{"value": "success", "label": "Success"},
{"value": "danger", "label": "Danger"},
{"value": "warning", "label": "Warning"},
{"value": "info", "label": "Info"},
{"value": "light", "label": "Light"},
{"value": "dark", "label": "Dark"}
]
}
]
}
]
}
]
Код: Выделить всё
INFO 07 Oct 2024 17:35:56 org.joget.tutorial.BadgeFormatter - Processing value: Approved
INFO 07 Oct 2024 17:35:56 org.joget.tutorial.BadgeFormatter - Conditions array length: 1
INFO 07 Oct 2024 17:35:56 org.joget.tutorial.BadgeFormatter - Condition map: {undefined=approved}
INFO 07 Oct 2024 17:35:56 org.joget.tutorial.BadgeFormatter - Checking condition: Value=null, Badge=null
INFO 07 Oct 2024 17:35:56 org.joget.tutorial.BadgeFormatter - Final badge type applied: info
Однако во время отладки я обнаружил, что массив условий регистрируется правильно, но значения условий возвращаются в журналах как нулевые. Вместо применения ожидаемого типа значка плагин по умолчанию использовал значок «информация», что указывает на то, что он не соответствует каким-либо условиям.
Я также заметил, что в зарегистрированной карте условий отображается undefined=approved. , что предполагает, что ключи в условии могут быть определены неправильно. Мне нужна информация о том, почему условия не распознаются и как обеспечить применение правильных типов значков на основе значений, переданных в форматтер.
Подробнее здесь: https://stackoverflow.com/questions/790 ... s-in-joget