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