OAF_开发系列03_实现OAF如何在保存前判断数据是否存在变更(案例)
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
轉載于:https://www.cnblogs.com/eastsea/p/4636051.html
總結
以上是生活随笔為你收集整理的OAF_开发系列03_实现OAF如何在保存前判断数据是否存在变更(案例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZABBIX作集中式NGINX性能监控的
- 下一篇: Ejabberd源码解析前奏--管理