OAF提供了三种类型的Exception:
1. General Exception:
Class: oracle.apps.fnd.framework.OAException
提供了在运行时刻同时显示多种类型异常的手段,结合EBS的Message 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()