如何取消单据页面退出时的字段修改提示原创
金蝶云社区-范老师加油
范老师加油
8人赞赏了该文章 1140次浏览 未经作者许可,禁止转载编辑于2022年12月21日 23:09:23

关键词:关闭页面,退出,字段修改

一、需求


我们在二开的时候通常会通过值更新联动一些字段值改动,比如说我手动输入A字段的值,会改动B字段的值,而B字段出于业务的需求是隐藏,这样会有一个问题,就是单据操作者在退出页面的时候,会提示A,B字段都改动,为了让操作者有更好的体验,就需要我们在退出页面的时候,只提示可见的字段有变动,而不必提示操作者看不到的字段。


二、思路与方案

我们在单据界面不管是点退出按钮还是点右上角的X,其实最终调用的都是kd.bos.form.operate.formop.Close操作方法

image.png

在这个方法里面会进入kd.bos.mvc.bill.BillView的checkDataChanged来检查有哪些数据做过改动。之后再做提示

我们可以发现几点,

1 通过查看过来的不会校验数据改动,

2 单据状态为审核态的不会校验数据改动,

3 不光单据头,单据体,子单据体上字段改动都会提示,单据体,子单据体上删除行也会提示

4 如果把数据包中字段属性的DataEntityState中的BizChang  改成false就可以跳过这个校验

三、实现过程

1  我们来建一个测试页面来验证这个结果, 我们加了一个文本,一个需要退出时一直显示,做为对比,另外一个是文本字段,一个是基础资料字段

image.png


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);
	}
}


四、效果图


image.png


这样我们就可以看到退出时,我们可以自定义选择一些字段不提醒



五、开发环境版本

COSMICV5.0.003.0

六、参考资料

【开发平台】指导手册

学习成长中心


赞 8