踩坑系列 - 预警平台自定义预警条件无法保存成功原创
2人赞赏了该文章
573次浏览
编辑于2021年11月04日 19:51:54
场景:有小伙伴在预警平台中,自定义了预警条件对象(并按照文档实现了IEarlyWarnConditionForm接口),输入数据后点击保存,页面显示保存成功,但再次进入页面是数据却丢失了,这是为什么呢?
我们先来复现一下该bug:
第一步:新建一个单据,添加一个文本字段作为演示。
第二步:将实现了IEarlyWarnConditionForm接口的插件,注册到该单据中,代码如下:
public class TimePagePlugins20210901 extends AbstractFormPlugin implements IEarlyWarnConditionForm { @Override public Map<String, Object> getCustomParams() { IDataModel model = getModel(); Object kdec_decimalfield = model.getValue("kdec_textfield"); HashMap<String, Object> data = new HashMap<>(); data.put("kdec_decimalfield", kdec_decimalfield); return data; } @Override public EarlyWarnConditionCheckResult checkCustomParams() { return EarlyWarnConditionCheckResult.success("success"); } }
第三步:
新增预警对象,选择上面创建的单据,数据源插件选择默认的kd.bos.service.earlywarn.impl.DefaultEarlyWarnBillDataSource
第四步:
创建一个监控方案(并填写好方案编码等必填信息),监控条件的文本字段输入“test...”,点击保存,显示保存成功
第五步:
再次进入该界面,发现数据没有成功保存
出错原因:
经过漫长的debug后发现,数据其实是保存成功的,只是没有显示在界面上。解决该问题最直接的方法,就是在beforeBindData方法中,将数据显示到页面上。也就是说,我们要修改注册在单据上的插件,修改后代码如下:
public class TimePagePlugins20210901 extends AbstractFormPlugin implements IEarlyWarnConditionForm { @Override public Map<String, Object> getCustomParams() { IDataModel model = getModel(); Object kdec_decimalfield = model.getValue("kdec_textfield"); HashMap<String, Object> data = new HashMap<>(); data.put("kdec_textfield", kdec_decimalfield); return data; } @Override public EarlyWarnConditionCheckResult checkCustomParams() { return EarlyWarnConditionCheckResult.success("success"); } @Override public void beforeBindData(EventObject e) { super.beforeBindData(e); Map<String, Object> customParams = this.getView().getFormShowParameter().getCustomParams(); for (String key : customParams.keySet()) { this.getView().getModel().setValue(key, customParams.get(key)); } } }
代码修改后,重新进入该方案,发现数据显示在页面上了...也证明数据其实是保存了的,只是没在前端显示
谢谢大家
赞 2
2人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读