首页 > 代码库 > OAF_OAF如何在保存前判断数据是否存在变更(案例)

OAF_OAF如何在保存前判断数据是否存在变更(案例)

2014-06-26 BaoXinjian

一、摘要


在OAF的开发中,可能有这样的需求,在选择保存按钮时,如果存在改动的数据,则提交事务,保存到数据库中;

如果不存在改动的数据,就提示用户当前没有数据可更改;

解决时需要判断页面中所使用的视图对象是否发生过改动,存在多种方法

 

1. 调用OADBTransaction.isDirty()方法

此方法用于判断当前事务中,视图对象是否发生过变更。但是此方法只对基于实体对象的视图对象有效,如果存在基于查询的视图对象,需要调用PL/SQL来改变数据库的就不行了。

2. 调用OAViewObject.isDirty()方法

此方法可以判断单个视图对象是否发生过变更,无论是基于实体对象的视图对象还是基于查询的视图对象。

3. 调用实体对象的getPostState()方法来判断

有时使用OAViewObject.isDirty()也有一定的限制。如果重新执行了查询,则视图对象的Dirty标志被重置,此时不可以使用该方法来判断是否存在变更,而需要使用下面所说的方法或第四种方法。

调用ViewRowImpl.getEntity(0).getPostState()可以判断视图行对应的实体对象是否发生过变更,这样就可以不顾是否重新查询导致Dirty标志重置。

4. 使用数据缓存

进入页面前把数据缓存到Transaction中,在保存按钮事件时,比较Transaction保存的实体对象行的每个属性是否和当前视图对象行属性一致。

使用方法四的理由是,如果存在insertRow(),然后又删除了新建的行row.remove(),此时系统就会认为视图对象存在未保存的变更。而使用第四种方法可以避免这种情况(一般情况下,应该也能说服客户接受这种情况)。

另外如果是基于查询建立的视图对象(使用PL/SQL保存到数据库中),并且存在临时属性的变更的情况(调用过row.setAttribute(),即使属性是不需要保存到数据库),就只能使用第四种方法。

 

二、案例


需求: 在Create Expense时,判断数据是否被修改,如没有修改,跳出提示信息,提示用户数据未被修改是否需要保存

1. 在AM中调用createExpense新增判断Transaction是否被修改

2. 测试时,未修改数据,系统会跳出提示框提示用户

 

********************作者: 鲍新建********************

 

参考: http://blog.csdn.net/cunxiyuan108/article/details/8800690