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

简介: 2014-06-26 Created By BaoXinjian 一、摘要 在OAF的开发中,可能有这样的需求,在选择保存按钮时,如果存在改动的数据,则提交事务,保存到数据库中; 如果不存在改动的数据,就提示用户当前没有数据可更改; 解决时需要判断页面中所使用的视图对象是否发生过改动,存在多种方法   1. 调用OADBTransaction.isDirty()方法 此方法用于判断当前事务中,视图对象是否发生过变更。

2014-06-26 Created By 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. 测试时,未修改数据,系统会跳出提示框提示用户

 

Thanks and Regards

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

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
5月前
|
Java 数据库连接 应用服务中间件
表单数据返回不到,HTTP状态 404 - 未找未找到,解决方法,针对这个问题,写一篇文章,理一下思路,仔细与原项目比对,犯错的原因是Mapper层的select查询表单数据写错,注意打开的路径对不对
表单数据返回不到,HTTP状态 404 - 未找未找到,解决方法,针对这个问题,写一篇文章,理一下思路,仔细与原项目比对,犯错的原因是Mapper层的select查询表单数据写错,注意打开的路径对不对
|
JavaScript 索引
面试题分享,修改数据无法更新UI
面试题分享,修改数据无法更新UI
134 0
面试题分享,修改数据无法更新UI
|
JavaScript 前端开发
前端案例:我的备忘录(支持事件的增加、删除和修改,代码完整)
前端案例:我的备忘录(支持事件的增加、删除和修改,代码完整)
276 0
前端案例:我的备忘录(支持事件的增加、删除和修改,代码完整)
dwz框架新建更新后对原表格刷新
dwz框架新建更新后对原表格刷新
159 0
|
SQL
【自然框架】表单控件 之 一个表单修改多个表里的记录
      FormView 确实挺方便的,不过他也有几个小问题,只把FormView拖到页面里是不行的,还得再拽几个文本框、下拉列表框这一类的控件,还得布局。然后还要弄一个DataSource的控件,利用这个控件把文本框等控件和字段对应上,DataSource也有一个致命的缺点,默认情况下,他是把SQL语句以属性的形式放在了.aspx页面里面。
903 0
|
缓存 前端开发 JavaScript
WebGIS中以version方式实现代码更新后前端自动读取更新代码的方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 前言 GIS代码进行更新后,由于用户前端已有缓存,导致更新的功能不能被及时同步。
1161 0
[原]使用Query实现事务代码与后台配置菜单互查
关键字: 由事务代码查找后台菜单、获得后台配置菜单的事务代码、IMG Menu、TCode、T-Code、Transaction code 使用事务SQVI建立Table jion联接表CUS_ACTOBJ、CUS_IMGACT、CUS_IMGACH 对勾以下字段 使用菜单QuickView/Additional functions/genrate program | display report name生成ABAP程序,用SE38运行,或用SE93为此程序建立一个TCODE。
958 0
|
测试技术
OAF_开发系列24_实现OAF更新记录显示Record History(案例)
20150716 Created By BaoXinjian 一、摘要 OAF页面控件中显示记录历史信息有如下的限制: 1. 首先当然是后台的表结构中必须包含WHO字段列了 2. 基于的视图对象必须是非PL/SQL的可更新VO 3.
1065 0