2014-06-12 Created By BaoXinjian
一、摘要
1. 在Update資料之前,我們往往要對待更新的記錄進行有效性的校驗,校驗級别包括
Attribute Level Validation: 字段級的校驗
Entity Level Validation: 記錄級的校驗
2. 字段級校驗-隻涉及單個字段的校驗
字段級别的校驗一般情況下寫在EO的set<Attribute name>()方法中,
根據傳入的value來決定是執行setAttributeInternal() 還是throw Exception.(代碼應寫在setAttributeInternal()之前)
例如如果一個訂單的狀态為CLOSE, 則不允許更改OrderPrice. 僞碼如下:
Public void validateEntity()
{
super.validateEntity();
String status = getOrderStatus();
If (“CLOSE”.equals(status))
Number ldorderprice = (Number)getPostedAttribute(ORDERPRICE);
Number neworderprice = (Number)getOrderPrice();
If (oldorderprice.compareto(neworderprice)!=0)
{
throw new Exception(“Error: Order Price can not be edited!”);
}
}
3. 記錄級校驗-隻涉及多個字段組合的校驗
當校驗涉及多個Attribute時,你就不能使用字段級的校驗了,需使用記錄級的校驗,即Entity Level Validation. 此校驗在validateEntity()方法中實作.
校驗代碼須寫在 super.validateEntity() 之後
二、字段級校驗案例
案例. 在EO的字段添加異常,如果Total為0值,則抛出異常
1. 字段級驗證異常調用
2. 字段級驗證異常測試
三、記錄級校驗案例
案例. 在EO的記錄級validateEntity()添加異常,将多個字段組合進行判斷,則抛出異常
1. 記錄級驗證異常調用
2. 記錄級驗證異常調用測試
四、異常觸發後如何對transaction進行rollback
不要試圖在EO的Validation 裡執行rollback() 方法或clearcache() 方法. 當出現校驗失敗時,有下面兩種做法:
Bad Method:
在EO Module
public void validateEntity(){
….
transaction.rollback()
throw new OAException….
Right Method:
In EO Module
throw new OAException…
In AM Module
Try
{ transaction.commit();
}Catch ( OAException ex)
{transaction.rollback();}
Thanks and Regards
參考:Tony Liu - http://blog.itpub.net/10359218/viewspace-677447/
<b>ERP技術讨論群: 288307890</b>
<b>技術交流,技術讨論,歡迎加入</b>
<b>Technology Blog Created By Oracle ERP - 鮑建立</b>