OAF_开发系列03_实现OAF如何在保存前判断数据是否存在变动(案例)

2014-06-26 Created By BaoXinjian数据库

1、摘要缓存


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

若是不存在改动的数据,就提示用户当前没有数据可更改;测试

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

 

1. 调用OADBTransaction.isDirty()方法.net

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

2. 调用OAViewObject.isDirty()方法blog

此方法能够判断单个视图对象是否发生过变动,不管是基于实体对象的视图对象仍是基于查询的视图对象。事件

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

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

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

4. 使用数据缓存

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

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

另外若是是基于查询创建的视图对象(使用PL/SQL保存到数据库中),而且存在临时属性的变动的状况(调用过row.setAttribute(),即便属性是不须要保存到数据库),就只能使用第四种方法。

 

2、案例


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

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

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

 

Thanks and Regards

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

相关文章
相关标签/搜索