OAF提供了三种类型的Exception:

1. General Exception:

Class: oracle.apps.fnd.framework.OAException

提供了在运行时刻同时显示多种类型异常的手段,结合EBSMessage Dictionary,可显示有用的消息。

2. Validation Exception:

Class: oracle.apps.fnd.framework.OAAttrValException /oracle.apps.fnd.framework.OARowValException

分别代表字段级/记录级的校验异常。可用在字段级或记录级的校验代码中。继承于OAException,显示方式与General Exception类似,但调用方法有差别。

3. Severe Exception:

致命异常,通常用于系统级别的异常。此异常往往由OAF自动抛出,以OAErrorPage的方式显示给用户。比如记录指针读数大于最大记录数时,就会抛出NullPointerException

 

主要学习前两种异常。

 

OAException

此异常用于常规的错误。

调用方法: OAException

OAException(String appShortName, //应用短名

           String messageName, //消息名称

           MessageToken[] messageTokens, //消息参数

           byte messageType, //异常类型

           Exception[] details) //异常明细

可以省略其中部分参数,例如:OAException(String messageName)

                       OAException(String messageName, byte messageType)

                     OAException(String messageName, MessageToken[],byte messagType)

等等。

其中的异常类型包括如下几种:

OAException.ERROR  //错误

OAException.WARNING  //警告

OAException.INFORMATION  //信息

OAException.CONFIRMATION //确认

OAException.SEVERE //致命

 

定义方式:

1.定义异常的的实例变量,然后抛出

OAException errormessage = new OAException(…);

throw errormessage

 

2直接生成实例抛出

throw new OAException(…);

 

抛出方式:

1. Messagebox抛出

throw new OAException(…);

 pageContext.putDialogMessage(…);

2. Dialog page抛出

后续详述

 

一个简单的例子:

 

OACellFormatBean shipTermsCell =

  (OACellFormatBean)webBean.findIndexedChildRecursive("ShipTermsCell"); if (shipTermsCell == null)

 {

  MessageToken[] tokens = { new MessageToken("OBJECT_NAME", "ShipTermsCell")};

  throw new OAException("AK", "FWK_TBX_OBJECT_NOT_FOUND", tokens);

 }

 

 

OAAttrValException

此异常在字段校验时抛出。

调用方法:OAAttrValException

OAAttrValException(int objType, //对象类型

                  String objName, //对象名称

                  Key key, //对象主键

                  String attrName, //字段名

                  Object attrValue, //错误的字段值

                  String appShortName, //应用短名

                  String messageName, //消息名称

                  MessageToken[] messageTokens, //消息参数

                  byte messageType, //消息类型

                  Exception[] details, //异常明细

                  boolean peer

                  )

其中的objType包括:

有很多,具体参见JAVADOC。这里主要两个:

TYP_ENTITY_OBJECT  EO对象

TYP_VIEW_OBJECT    VO对象

 

定义与抛出方式与OAException一致。请注意,此异常一般用在set<Attribute Name>()方法中。

 

一个简单的例子:

EO:

public void setSalary(Number value)

{

  if (value != null)

  {

     // Verify value is > 0     if (value.compareTo(0) <= 0)

     {

        throw new OAAttrValException(OAException.TYP_ENTITY_OBJECT, // indicates EO source

                                     getEntityDef().getFullName(), // entity name

                                     getPrimaryKey(), // entity primary key

                                     "Salary", // attribute Name

                                     value, // bad attribute value

                                     "AK", // nessage application short name

                                     "FWK_TBX_T_EMP_SALARY_REQUIRED"); // message name      }

    setAttributeInternal(SALARY, value);

  }

} // end setSalary()

 

 

 

 

 

VO:

setDescription(String value)

{  if("XXX".equals(value)

   {    throw new OAAttrValException (

                                               OAException.TYP_VIEW_OBJECT, // indicates VO row source

                                              ((ComponentObject)getViewObject()).getName(), // view instance name   

                                               getKey(), // row primary key                         

                                              "Description", //attribute name       

                                              value, // bad attribute value         

                                             "FND", //message application short name               

                                            "ATTR_EXCEPTION"); // message name

 } 

setAttributeInternal("Description", value);

 } // end setDescription()