案例问题分析
如图,案例需要开发选择“项目经理”自动获取其对应项目的名称设置到“项目”字段。
假设用户选择了“张三”系统自动带出对应的项目名称“XX公司HR实施”,然后用户修改项目为“XX公司OA开发”,然后保存关闭单据,但是用户下次再打开查看单据时,项目仍然会是“XX公司HR实施”,和数据库里的不一致。
原因分析
a)系统从数据库获取单据对象,按照EditUI的绑定规则把值对象的数据绑定到控件上
b)首先为文本字段设置值,此时:项目=XX公司OA开发
c)然后为项目经理F7设置值,此时触发了DataChangeListener,项目被重新设置成了“XX公司HR实施”
解决办法
protected DataChangeListener prmtManageListener;
public ProjectPlanEditUI() throws Exception
{
super();
prmtManageListener = new DataChangeListener(){
public void dataChanged(DataChangeEvent ev)
{
prmtManagerChanged((PersonInfo) ev.getNewValue());
}
};
}
public void loadFields()
{
prmtmanager.removeDataChangeListener(prmtManageListener);
super.loadFields();
prmtmanager.addDataChangeListener(prmtManageListener);
}