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