本文讨论了在二开系统中,针对单据页面字段修改后退出页面时的提示问题,提出在退出时仅提示可见字段的改动以提升用户体验。通过修改数据包中字段的DataEntityState的BizChanged属性为false来跳过不需要提示的字段改动校验。实现过程中,通过编写插件在退出前动态设置字段的BizChanged状态,并在测试页面验证效果。文章还提供了开发环境版本和参考资料。
关键词:关闭页面,退出,字段修改
一、需求
我们在二开的时候通常会通过值更新联动一些字段值改动,比如说我手动输入A字段的值,会改动B字段的值,而B字段出于业务的需求是隐藏,这样会有一个问题,就是单据操作者在退出页面的时候,会提示A,B字段都改动,为了让操作者有更好的体验,就需要我们在退出页面的时候,只提示可见的字段有变动,而不必提示操作者看不到的字段。
二、思路与方案
我们在单据界面不管是点退出按钮还是点右上角的X,其实最终调用的都是kd.bos.form.operate.formop.Close操作方法
在这个方法里面会进入kd.bos.mvc.bill.BillView的checkDataChanged来检查有哪些数据做过改动。之后再做提示
我们可以发现几点,
1 通过查看过来的不会校验数据改动,
2 单据状态为审核态的不会校验数据改动,
3 不光单据头,单据体,子单据体上字段改动都会提示,单据体,子单据体上删除行也会提示
4 如果把数据包中字段属性的DataEntityState中的BizChang 改成false就可以跳过这个校验
三、实现过程
1 我们来建一个测试页面来验证这个结果, 我们加了一个文本,一个需要退出时一直显示,做为对比,另外一个是文本字段,一个是基础资料字段
2 添加插件,附代码:
public class UnremindPropChange extends AbstractBillPlugIn { public void beforeClosed(BeforeClosedEvent e) { super.beforeClosed(e); //文本字段退出不提醒 DynamicObject dyo=this.getModel().getDataEntity(); DynamicProperty textProp = dyo.getDynamicObjectType().getProperty("bidt_textfield"); dyo.getDataEntityState().setBizChanged(textProp.getOrdinal(), false); //基础资料退出不提醒 DynamicProperty baseDataProp = dyo.getDynamicObjectType().getProperty("bidt_basedatafield" + "_id"); dyo.getDataEntityState().setBizChanged(baseDataProp.getOrdinal(), false); } }
四、效果图
这样我们就可以看到退出时,我们可以自定义选择一些字段不提醒
五、开发环境版本
COSMICV5.0.003.0
六、参考资料
推荐阅读