注意:要完全的精确和兼容,这个图应该包含实现类oracle.apps.fnd.framework.server.OADBTransactionImpl而不是oracle.apps.fnd.framework.OADBTransaction接口,尽管如此,我们选择稍后再包含它因为你只在你的代码中使用这个接口。
就像上面图中展示的,OADBTransaction在你的模型代码扮演了中心角色,因为它封装了关联根应用模块的JDBC连接/数据库会话,并且直接拥有所有你创建的实体对象(你的由根应用模块拥有的视图对象,在他们视图行上持有的是它们实体对象的引用)。你也会在你的模型代码中为下面的通常行为正常使用OADBTransaction:
l 创建一个可调用的语句来执行PL/SQL方法或程序。
l 访问会话级别应用上下文信息比如用户名,ID,当前职责等等。
l 如果你需要进行NLS操作比如把服务器日期/时间转换为用户日期/时间等等,可以访问oracle.apps.fnd.framework.OANLSServices对象。
对OADBTransaction的访问是由根应用模块所提供的。 界面视图
界面视图格式化并展示模型数据给用户。
第三章的实现界面视图里详细介绍了下面的内容。 定义页面
在开发期间,你可以使用声明式JDeveloper工具为每个页面指明bean的层次结构,JDeveloper在Building “Hello, World”里有介绍。在Oracle E-Buisness Suite开发中,你会使用(源控制)XML文件来进行页面定义。当你的产品部署到一个客户的站点时,OAF框架会在数据库存储之外运行这些页面定义。
简介概括来说,你可以使用JDeveloper来定义由区域和items组成的页面.
l Items是简单的小部件就像按钮,字段,图像等等不包含子控件的小控件。
l 区域是容器对象,它可以包含items和其它的区域。区域是示例比如headers, tables和特殊的布局组件。
l 每个你定义的区域和Item都有一个style属性,它会告诉OAF框架如何在运行时怎么去实例化这个web bean(这个也表明了为这个bean要生成什么HTML)。比如,如果你定义了一个区域它的style属性为”table”,那么OAF会实例化一个oracle.apps.fnd.framework.webui.beans.table.OATableBean对象。
l 所有的页面必须有一个顶层的区域(一般称为”根区域”),它的style为pageLayout,会被实例化为oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean对象。
l 在JDeveloper页面树(和相应的XML文件)中区域和items的顺序会告诉OAF框架把这些对象加到运行时bean组织层次中哪个地方。
下面的图6给了一个实例化的示例页面的各种web beans的幕后外观。你看的的标签是后面的web beans的名称。比如,一个弹出式列表实例化为oracle.apps.fnd.framework.webui.beans.message.OAMessageChoiceBean,一个提交按钮实例化为oracle.apps.fnd.framework.webui.beans.form.OASubmitButtonBean.
图7展示了相应的页面定义。
图6:UI组件页面展示了相应web beans的名称
属性集
每个区域或者item都可以使用属性集来继承属性组的设置。一个属性集时一个命名的,可重用的属性集合,它可以别任何类型的UI对象属性,包括区域,item和其它的属性集。每当你建立了一个使用了属性集的UI,你可以覆盖继承的属性(虽然在OAF编程标准中是不鼓励的)。
要演示这个概念,在应用开发中,每个表必须为每个显示列关联属性集。这些属性集包含提示,显示宽度等等属性。
l 在OAF ToolBox Sample Library/Tutorial中,有一个采购订单表(FWK_TBX_PO_HEADERS),其主键列类型为NUMBER且名为HEADER_ID,它也作为采购订单号显示给用户。
l 这个表有一个叫做关联的FwkTbxPoHeaders属性集XML包文件,它包含了表中所有显示列的属性集(每个列都有一个属性集)。其中之一的属性集叫做HeaderId。
l HeaderId属性集有一个Prmpt属性设置为Order Number并且显示长度设置为合理的15.
l 当你创建一个包含采购订单编码Item的页面时,我们可以设置它的属性集属性为完全合适的名为/oracle/apps/fnd/framework/toolbox/attributesets/FwkTbxPoheaders/Headerid的属性集。
图8:在JDeveloper中使用一个属性集
processFormRequest(OAPageContextpageContext, OAWebBean webBean)
{
if (pageContext.getParameter("GoButton") != null)
{
// The user pressed the "Go" button, do something...
}
}
processFormRequest(OAPageContext pageContext, OAWebBean webBean)
{
if (pageContext.getParameter("CreateButton") != null)
{
// The user pressed the "Create Supplier" button, now perform a JSP forward to
// the "Create Supplier" page.
pageContext.setForwardURL("OA.jsp?page=/oracle/apps/dem/employee/webui/EmpDetailsPG",
null,
OAWebBeanConstants.KEEP_MENU_CONTEXT,
null,
null,
true, // Retain AM
OAWebBeanConstants.ADD_BREAD_CRUMB_YES, // Show breadcrumbs
OAWebBeanConstants.IGNORE_MESSAGES);
}
}