天天看點

OAF_EO系列2 - Validation資料校驗驗證機制(概念)

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>

繼續閱讀