Oracle之OAF开发参考

更新时间:2024-04-29 05:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Oracle ERP最佳实践 E-BUSINESS SUITE ORACLE核心应用技术 OAF开发总结

Author: Creation Date: Last Updated: Document Ref: Version:

Approvals:

田鑫

August 23, 2015 August 30 2015

1.0

Copy Number _____

ORACLE ERP最佳实践 Doc Ref:

错误!未找到引用源。

Document Control

Change Record

Reviewers

Distribution

ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

3

Date Author Version Change Reference 23-Aug-15 田鑫 1.0 No Previous Document

Name Position

Copy No. Name Location 1 2 3 4

Note To Holders:

If you receive an electronic copy of this document and print it out, please write your name on the equivalent of the cover page, for document control purposes. If you receive a hard copy of this document, please write your name on the front cover, for document control purposes.

Document Control ii

Company Confidential – For internal use only

ORACLE ERP最佳实践

ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

Contents

Document Control .................................................................................................................. ii

1. 推荐学习OAF的步骤……………………………………………………………….

1.1 掌握的基础知识……………………………………………………………….. 1.2 OAF命名规范………………………………………………………………….. 1.3 开发工具……………………………………………………………………….. 2. OAF个性化开发 ………………………………………………………………….

2.1 找到标准界面 ………………………………………………………... 2.2 设置OAF个性化…….………………………………………………… 2.3 个性化VO概述…..…………………………………………………….. 2.4 个性化VO具体操作…………………………………………………… 2.5 个性化CO概述………………………………………………………… 2.6 个性化CO具体操作…………………………………………………… 2.7 个性化CO常用API …………………………………………………… 2.8 个性化的查询和删除………………………………………………….. 2.9 注意事项………………………………………………………………..

3. OAF_EO对象详解………………………………………………………………… 3.1 Initializa data

3.2 案例

4.

OAF –基础 ................................................................................................................... 1.1. OAF简介.................................................................................................................... 1.2. 环境搭建 .................................................................................................................... 1.3.HelloWorld ............................................................................................................... 6.

Open and Closed Issues for this Deliverable......................................................... . Open Issues ......................................................................................................................... Closed Issues ..................................................................................................................... .

Document Control iii

Company Confidential – For internal use only

ORACLE ERP最佳实践 Doc Ref:

错误!未找到引用源。

1. 学习OAF之前的一些基础知识准备

ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

1.1 掌握的基础知识 ?

Web 开发的基础知识

了解Web的工作原理. ? Java 语言基础编程技术 ? 面向对象开发的基本知识 ?

XML基本知识

1.2 OAF命名规范

oracle.apps.Application.scheme.server 保存EO对象 oracle.apps.Application.webui 保存PG和CO对象 oracle.apps.Application.server 保存AM、VO、VL等对象 oracle.apps.Application.lov.server 保存Lov的AM和VO对象 oracle.apps.Application.lov.webui 保存Lov的PG和CO对象 oracle.apps.Application.poplist.server 保存Poplist的VO对象

1.3 开发工具

Jdeveloper 10G 反编译软件.

学习OAF之前的一些基础知识准备 2 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 Doc Ref:

错误!未找到引用源。

2. OAF个性化开发

ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

2.1 找到标准界面

标准界面分两种:

纯OAF界面和JSP界面里面加载OAF界面:区分条件是界面的左下角是否会有一个关于此页的链接。

有些jsp界面的放大镜查询也是用的OAF的region设置的。

通过这个页面我们可以得到几个信息,该界面的AM、VO、EO、PG、CO的对象的在服务器的路径。

服务器AM、VO路径:cd $JAVA_TOP/oracle/apps/fnd/security/grants/server/ 服务器CO路径:cd $JAVA_TOP/oracle/apps/fnd/security/grants/webui/ 服务器PG路径: cd $FND_TOP/mds/security/grants/webui/

我们如果想查看界面上关联的VO上面的数据来源可以直接点击VO进入.

OAF个性化开发 3 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

双击CuxVisitCreate应用,左边是Available选择原VO,右边选择创建的VO

点击Add进行 VO替换

OAF个性化开发 9 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

点完确定之后验证下我们创建的jpx文件,

检查是否有Substitues节点如果没有右键点击Rebuild进行加载

然后将jpx文件,跟VO放到服务器上,对jpx进行导入.

java oracle.jrad.tools.xml.importer.JPXImporter $JAVA_TOP/CuxVisitCreate.jpx -username apps -password apps -dbconnection

\CONNECT_DATA=(SID=MRODEV1)))\

OAF个性化开发 10 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

2.5 个性化CO概述

1. 创建一个CO对象继承原CO对象 2. 编写个性化CO的处理逻辑

2.6 个性化CO具体操作 创建一个JAVA类,继承原CO

当然也要添加继承父类两个request请求方法processRequest()跟processFormRequest()

processRequest()处理get请求。比如一些页面加载的是时候会调用该方法 processFormRequest()处理post请求:

1、OAPageBean检测当前的page的web Bean层次结构是否存在内存中。如果不存在(由于资源的回收,用户单击浏览器的“后退”按钮,或者一个消息对话框回到主页的post请求),它会像上面的Get请求一样新建Web Bean 的层次结构。

2、所有在该层次结构上的OAPageBean调用processFormData(OAPageContext pageContext, OAWebBean webBean)将表单中的数据写入模式(尤其是,如果在pagelayout上调用

OAF个性化开发 11 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

processFormData(),则在该层次下的所有bean都会调用processFormData())。表单中的数据写入到底层模型自动调用属性和EO级上的验证(这些是数据库方面的比如唯一索引、字段类型)。如果抛出任意验证异常,则处理停止并将错误信息发给用户。

3、如果在 processFormData() 过程中没有异常抛出。在该层次下的所有OAPageBean调用

processFormRequest(OAPageContext pageContext,OAWebBean webBean)。这个过程将用户的操作传给控制器。

4、如果没有的JSP页面重定向转发或发出-或例外地被投进了processFormRequest() -然后刷新页。

简单的我们页面上的一些组件比如input、lov调用验证和显示lov的region时会调用该方法进行处理.

2.7 个性化CO常用的API 获取AM对象

OAApplicationModule am=pageContext.getApplicationModule(webBean); 获取VO对象

oracle.jbo.ViewObject cuxrow=am.findViewObject(\

(可能源代码里面写的VO一般是CreateUpdateVisitRowImpl,这里用基类的原因是因为我们在不同应用下进行操作。所以如果还是用子类的话虽然编译通过了,我们在调用的时候就会出错) 获取连接对象

OADBTransaction txn=(OADBTransaction)am.getTransaction(); 获取当前行对象

Row currentrow=cuxrow.getCurrentRow();

获取LOV返回值方法

String LovInputSourceId=pageContext.getLovInputSourceId(); if (\

Hashtable

UnitNamelovResults=pageContext.getLovResultsFromSession(LovInputSourceId); Instanceid =(String)UnitNamelovResults.get(\LovInputSourceId 为我们调用的lov的ID

获取预编译对象

PreparedStatement

stmt=(PreparedStatement)txn.createPreparedStatement(lineNumber_sql,0); 获取结果集对象

ResultSet Rs=stmt.executeQuery(); 页面重定向

pageContext.forwardImmediatelyToCurrentPage(map, // no parameters to pass true, // retain the AM

OAWebBeanConstants.ADD_BREAD_CRUMB_NO);

OAF个性化开发 12 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

我们在页面重定向的时候会重新调用processRuquest方法,所以我们一般通过传入map参数进行对页面的控制,使其不会对页面进行刷新。

2.8 个性化的查询和删除 1. 查出个性化生成的页面 BEGIN

jdr_utils.listcustomizations

(p_document => '/oracle/apps/eam/workorder/webui/CreateUpdateWOPG'); END;

2.查看个性化的内容 BEGIN

jdr_utils.printdocument

(p_document =>

'/oracle/apps/eam/workorder/webui/customizations/site/0/CreateUpdateWOPG'); END;

3.删除个性化内容 BEGIN

jdr_utils.deleteDocument

(p_document =>

'/oracle/apps/eam/workorder/webui/customizations/site/0/CreateUpdateWOPG'); END;

2.9 注意事项

1.个性化CO:清除个性化时,除了要把继承的路径删除之外还要在路径下添加继承两个字. 2.关于个性化路径的问题,如果是纯OAF界面我们直接放在$JAVA_TOP是没问题的,如果是JSP界面的OAF个性化,我们就要把其个性化内容放在$OA_HTML/WEB-INF/classes/ 3.关于从服务器download下来的dbc文件 1)

打开dbc文件,找到APPS_JDBC_URL,可看到含有很多“\\”,把所以的“\\”都去掉(注:该操作只针对APPS_JDBC_URL属性)

有时候还是连接不上可以检查下host 是不是把IP别名添加进去了.

OAF个性化开发 13 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 Doc Ref:

错误!未找到引用源。

3. OAF个性化迁移

ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

3.1 概述

从一个环境迁移到另一个环境的个性化通过个性化标准导入导出实现。 3.2 个性化导出

功能管理员->个性化->导入/导出

设置系统配置文件中个性化路径

OAF个性化迁移 14 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

在FTP中添加该路径文件夹

选择个性化的页面和个性化的对象

OAF个性化迁移 15 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

将导出的个性化文件直接迁移到另一个环境中

进入另一个环境的功能管理员->个性化->导入/导出->导出的个性化

(当然该环境也要进行配置文件路径的配置)选择导入的个性化文件点击从文件系统导入按钮,然后重启下高速缓冲即可。

3.4 开启页面个性化

系统管理员->配置文件->系统

OAF个性化迁移 16 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

设置用户开启该功能

OAF个性化迁移 17 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 Doc Ref:

错误!未找到引用源。

4. OAF控件对象详解

ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

4.1 OAPageContext对象

获取field字段和设置字段方法:

oapageContext.getParameter()和oapageContext.putParameter()来设置获取字段(field)的值 页面跳转和重定向方法:

oaPageContext.forwardImmediatelyToCurrentPage()重新导向到当前页面 oaPageContext.sendRedirect(newPage)导向到其他页面 写debug信息

oaPageContext.writeDiagnostics()

从FND消息字典中获取信息:oaPageContext.getMessage();

4.2 OAWebBean对象 简述:

webBean对象表示了页面中的结构/层次关系,因此通过这个参数我们可以操控页面结构的所有组件.比如获取VO对象

oawebBean. findChildRecursive(?xxxVO1?); 获取一个区域对象region

OAStackLayoutBean oaStackLayoutBean = (OAStackLayoutBean) oaWebBean.findIndexedChildRecursive(\

4.3 LOV控件实现

1.创建VO对象,用于数据显示

OAF控件对象详解 18 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

2.创建一个AM对象容器用于放VO对象

OAF控件对象详解 19 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

3.建立page Component,其类型为Region,在Region新建一个Region Using Wizard,将VO对象的项显示到Region面板上

4.在主区域上新建item,设置成messageLovInput类型,设置lovMappings,设定Item的lov来源属性为之前的Region

4.4 poplist控件实现

1.创建VO对象,存放数据库数据

2.在主区域里新建一个item,设置成messageChoice类型。

OAF控件对象详解 20 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

将下拉选项设置成快码添加到SQL里面

然后直接点下一步,默认到点击完成生成VO对象

OAF控件对象详解 21 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

设置三个参数,Display Attribute 为显示项,

效果显示

4.5 AdvancedTable控件实现

该控件跟我们在EBS Form里面开发folder有类型的效果。

1. 新建一个AdvancedTableVO 对象和TestAM对象;将VO对象添加到AM模块中

OAF控件对象详解 22 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

2. 新建一个AdvancedTablePG界面,设置AM属性为TestAM;在PG页面下新建一个

Region设置其类型为query;在QueryRN下新建一个Region设置其类型为AdancedTable;

3.在AdanvcedTable控件下新增column项,

OAF控件对象详解 23 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

给column添加数据项用于获取数据库传过来的数据。

设置View Atrribute的值 从VO对象中选择显示在该列的字段名(注意在pagelayout控件里面关联AM对象,将VO对象放入AM模块中才能通过编辑选出来)

为数据项添加prompt项。

OAF控件对象详解 24 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 Doc Ref:

错误!未找到引用源。

ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

AdvancedTable控件还可以按钮和选择项,可用于跳转,这里我只用于条件查询没有涉及跳转所以不考虑。

为查询页面添加simpleSearchMappings和simpleSearchPanel组件

在simpleSearchPanel下添加Region控件和查询项(这里我用了lov输入框类型)具体实现可参考Lov控件实现

OAF控件对象详解 25 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

在CuxSimpleSearchRN布局里面通过Rows和Columns可以设置将查询项显示成几行和几列分布;(这里我只设置了一个查询项所以为默认);

将查询项与数据项进行关联

测试结果:

4.6 Hgrid控件实现

4.7 Train控件实现

1.创建TrainRN控件为其添加三个link组件

OAF控件对象详解 26 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

为每个link设置跳转的URL路径

2.新建pageButtonBar的TrainFooterRN,再在下面建立navigationBar的NavBar

为其添加三个link组件,并为每个link设置Destination URL值

3.为TrainFooterRN添加CO,控制页面跳转,添加如下代码

OAF控件对象详解 27 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

4.新增三个跳转页面TrainSupplier1PG,TrainSupplier2PG,TrainSupplier3PG

5.给每个PG页面继承TrainFooterRN和TrainRN

6.效果显示

OAF控件对象详解 28 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

4.8 Tree控件实现

OAF控件对象详解 29 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 Doc Ref:

错误!未找到引用源。

5. 常用的Region Type

ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

5.1 SingeDefaultColumn 布局

5.2 messageComlumnLayout 布局

5.3 SubTabs 布局

5.4 Train 布局

常用的Region Type 30 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 Doc Ref:

错误!未找到引用源。

6. OAF_VO对象详解

ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

6.1 Binding Style 绑定方式

1. Binding Style主要用于对VO的where clause做动态传值,总共有三种方式 1) Oracle Positional

是一种常用的方式,简单来说这种方式都是通过参数”:”和数字声明的,比如

Where parameter1 = :1 and parameter2=:2。参数只会根据数字在VO Sql Statement中出现的顺序传入到View Object中,而不会根据数字的大小而传入。

在VO上设置完之后,我们需要在执行VO查询之前,对VO参数进行绑定;添加代码如下 BindingStyleTestVOImpl vo =this.getBindingStyleTestVO1(); vo.setWhereClause(null);

vo.setWhereClauseParam(0, new Number(Integer.parseInt(“ticket_id”)));

vo.setWhereClauseParam(1, new Number(Integer.parseInt(“mr_route_id”)))

(注意:在使用vo.setWhereClauseParam(int index, Object value)进行赋值的时候, index一定是从0开始的,接着就是1,2,3,…… .但是在VO SQL Statement中,参数却不是必须从0开始,而且后面的参数的数值也不必比前面的大。但是在使用vo.setWhereClauseParam()给VO绑定参数值的时候一定要使用0和1作为index,而且index必须和绑定参数在VO SQL Statement中出现的顺序对应的类型一致);

如果使用了其他index,就会抛出无效的列索引错误

OAF_VO对象详解 31 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

oracle.apps.fnd.framework.OAException: oracle.jbo.SQLStmtException: JBO-27122:Invalid column index ….. 2)

Oracle Name

创建VO添加参数查询。

在Bind Variable 页面上定义要在VO SQL Statement中使用的绑定参数的名字,类型和默认值

在VO定义上设置完之后,我们需要执行VO查询之前,使用

vo.setNamedWhereClauseParam(String name, Object value)对VO的绑定参数进行赋值,如下面的代码。

OAF_VO对象详解 32 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践

ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

BindingStyleTest2VOImpl vo =this.BindingStyleTest2VO1(); --初始化

vo.setWhereClause(null); vo.setWhereClauseParams(null);

vo.setNamedWhereClauseParam(\ vo.setNamedWhereClauseParam(\ 3)

JDBC Positional

这种绑定方式一般用在调用存储过程和函数会通过?进行参数传递。一般在OAF用的很少

6.2 Row Impl 类 1.VO初始化分类 1)仅插入型VO的初始化 //检查VO是否有行

Vo.getFetchedRowCount()//检查当前缓存中VO的行数,如果VO已经被插入过行了,那么返回的值肯定大于0,就无需调用vo.setMaxFetchSize

为了避免OAF中一些已知的BUG,我们在对其进行初始化时最好写下面代码 if (vo.getFetchedRowCount() == 0) { vo.setMaxFetchSize(0); vo.executeQuery();

... // Insert rows into the view object. }

OAF_VO对象详解 33 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 Doc Ref:

错误!未找到引用源。

7. OAF_EO对象详解

ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

7.1 EO对象创建

创建一个应用->点击Application Sources展开->选择包右键新建一个EO对象

从数据库里面找到操作的数据对象

一般会默认主键,如果没有主键则设置一个ID为主键

OAF_EO对象详解 34 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

选中Create Method、Remove Method 、Validation Method 点击完成

7.2 Validation数据校验验证机制

概述:

在Update数据之前,我们对要更新的记录进行有效性的校验,校验级别包括 1)

字段级的校验 (只涉及单个字段的校验)

OAF_EO对象详解 35 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

字段级别的校验一般情况下写在EO的set()方法中, 根据传入的value来决定是执行setAttributeInternal() 还是throw Exception.(代码应写在setAttributeInternal()之前); 伪代码:

public void setPoTotalNum(Number value) { // 字段级验证异常 如果采购订单数量为0抛出异常 if(value.isZero()){

throw new OAAttrValException(OAAttrValException.TYP_COMPONENT_OBJECT, //对象类型 getEntityDef().getFullName(), //对象名称 getPrimaryKey(),//对象主键 \ //字段名 value, //错误的字段值 \ //消息应用短名

\ //消息名称 }else{

setAttributeInternal(POTOTALNUM, value); } } 2)

记录级的校验(涉及多个字段的组合校验)

当校验涉及多个Attribute时,你就不能使用字段级的校验了,需使用记录级的校验,即Entity Level Validation. 此校验在validateEntity()方法中实现; 伪代码:

protected void validateEntity() { super.validateEntity();

String status =getOrderStatus(); if (\

Number oldordertotal=(Number)getPostedAttribute(POTOTALNUM); Number newordertotal=(Number)getPoTotalNum(); if (oldordertotal.compareTo(newordertotal)!=0) {

throw new OARowValException(OARowValException.TYP_ENTITY_OBJECT, getEntityDef().getFullName(), getPrimaryKey(), \

\ null); } } }

OAF_EO对象详解 36 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践 ORACLE核心应用技术

OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

7.3 Initialize data(数据初始化)

1.普通默认值设定

我们在创建好一个EO后,如果你选择生成了JAVA文件,我们在该EO下会发现有个EOImpl.java的节点,双击打开后,里面

双击打开后,里面已经有了一些方法了,主要有如下几类:

1. DML Operation Class

2. Set Attribute Value Class 3. Get Attribute Value Class 4. Validation Class

1). 那我们要初始化,很明显是要用到其中的Set Attribute Value Class. 这些方法名字都是 set +. 例如:

public void setHeaderId(Number value) { setAttributeInternal(HEADERID, value); }

传入参数是value, 然后利用setAttributeInternal 方法把value 赋给HEADERID(注意, 这个HEADERID是 EO Attributes 的别名. 在EO中为Attribute赋值主要有如下两个方法: setAttribute(int index, String lang , object val)

index代表Attribute在EO中的位置(注意,只在显示在Page上的Attribute中排序),也可用EO Attributes 的别名代替.

val 代表传入的值,lang 代表语言,可省略。例如:

Number price = new Number(100); setAttribute(5, price);

按照FORM的习惯,我们可能会写成 setAttribute(5,100),

请注意,这是错误的,因为JAVA会认为这个100 是基本类型中int 类型,而不是object 类型。 2). 我们可以自已写个CLASS,把所有需要初始化的Attributes全部在里面设定好.如下:

public void setallAttribute(){

Number v_id = new Number(100); setLineId(v_id);

String v_desc = new String(“ABCD”); setItemDesc(v_desc); }

3). 然后在其中的一个DML Operation class: create()中加入上述方法:

public void create(AttributeList attributeList){

OAF_EO对象详解 37 of 69

Company Confidential – For internal use only

ORACLE ERP最佳实践

ORACLE核心应用技术 OAF开发

342555394.doc (v. 1.0 )

Doc Ref:

错误!未找到引用源。

super.create(attributeList); setallAttribute(); }

这样,当你在Page上执行新增记录的动作时,你会发现有些字段就有了初始值了…

3、特殊的默认值设定

在初始值的定义中,有下面几个比较特殊的:

? Primary Key的初始化 ? WHO字段的初始化 ?

需要动态指定字段的初始化

1). Primary Key 的初始化

调用OADBTransaction来取得Sequence值,并通过SetAttribute( ) 方法赋予Primary Key即可. 代码如下:

public void create(AttributeList attributeList){ super.create(attributeList);

OADBTransaction transaction = getOADBTransaction();

Number lineid = transaction.getSequenceValue(\ setLineId(lineid); }

上面的代码是写在EO 的 create( )方法里的,这样的话,当你新增一个空记录时,在lineid字段上就有了一个初始值,即序列

取得的值,如果你不保存这条记录的话,就会出现跳号的情况,因此可把这个语句放在提交的方法里.

2). WHO字段的初始化

正常情况下,如果你的EO中包含了WHO字段的话,当你提交时,OAF会自动帮你初始化WHO字段,是不需要编写代码的,

如果你需要自已来获取WHO 信息的话, 仍可以利用OADBTransaction的方法来获取,主要有如下几个.

OADBTransaction transaction = getOADBTransaction(); transaction.getUserId()

transaction.getCurrentDBDate()

transaction.getResponsibilityApplicationId() transaction.getResponsibilityId()

OAF_EO对象详解 38 of 69

Company Confidential – For internal use only

本文来源:https://www.bwwdw.com/article/pb0g.html

Top