Oracle之OAF开发参考Word文档下载推荐.docx
《Oracle之OAF开发参考Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Oracle之OAF开发参考Word文档下载推荐.docx(68页珍藏版)》请在冰豆网上搜索。
NoPreviousDocument
Reviewers
Name
Position
Distribution
CopyNo.
Location
1
2
3
4
NoteToHolders:
Ifyoureceiveanelectroniccopyofthisdocumentandprintitout,pleasewriteyournameontheequivalentofthecoverpage,fordocumentcontrolpurposes.
Ifyoureceiveahardcopyofthisdocument,pleasewriteyournameonthefrontcover,fordocumentcontrolpurposes.
Contents
1.推荐学习OAF的步骤……………………………………………………………….
1.1掌握的基础知识………………………………………………………………..
1.2OAF命名规范…………………………………………………………………..
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.1Initializadata
3.2案例
1.学习OAF之前的一些基础知识准备
1.1掌握的基础知识
●Web开发的基础知识
了解Web的工作原理.
●Java语言基础编程技术
●面向对象开发的基本知识
●XML基本知识
1.2OAF命名规范
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开发工具
Jdeveloper10G反编译软件.
2.OAF个性化开发
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进入.
2.2设置OAF个性化操作
功能管理员->
个性化
在文档路径下输入你要个性化的页面路径
点击个性化页标签进入个性化界面,点击完整视图进行个性化操作
上图是对PG主页面进行个性化操作,主要是用于个性化CO(处理页面逻辑的变化)
上图是对PG下的region进行个性化,一般应用于对界面进行字段的增加,或者修改.主要通过个性化VO来实现
项目样式主要是对新增的attribute进行类型的设置,比如lov类型、下拉框类型、input类型、只显示类型.(id的值在该页面下必须是唯一的)
ViewAttribute跟ViewInstance表示对VO对象进行初始化.里面分别填入个性化VO新增的字段名,跟原VO对象。
2.3个性化VO概述
主要步骤:
1.创建一个新的VO对象继承原VO对象
2.修改VO的SQL、添加所要新增的字段
3.通过应用替换原VO对象,把jpx跟创建的VO对象放到服务器上进行编译
4.对VO进行个性化设置
2.4个性化VO具体操作
创建一个应用
设置默认包和Name
选择连接环境,DBConnection为自己创建的一个连接
将服务器dbc文件下载到本地的路径上(可参考OAF开发)对于下载下来的dbc文件可能会遇到几个问题。
我们一般通过加载toolbox标准应用来连接自己EBS环境,看是否有问题。
(有问题可参考注意事项)
Username于password为登陆EBS环境的账号和密码,Responsibility下填入应用的简称跟职责关键值
点击完成之后,点开appliactionsource创建一个VO对象
我们个性化的文件一般都放在cux应用中,新建的VO一般前面也加上Cux即可,选择需要继承的原VO,(当然我们首先要将原VO从服务器中取出来放在该目录下才能够继承)
点击下一步,然后创建新的attribute设置mapping列查询.
修改SQL,添加需要新增的列的SQL语句
点击下一步进行完成(需要注意的是我们新增的查询字段的别名要与我们上面取的名称要一致)
双击CuxVisitCreate应用,左边是Available选择原VO,右边选择创建的VO
点击Add进行VO替换
点完确定之后验证下我们创建的jpx文件,
检查是否有Substitues节点如果没有右键点击Rebuild进行加载
然后将jpx文件,跟VO放到服务器上,对jpx进行导入.
javaoracle.jrad.tools.xml.importer.JPXImporter$JAVA_TOP/CuxVisitCreate.jpx-usernameapps-passwordapps-dbconnection"
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.73.59.106)(PORT=1521)))(CONNECT_DATA=(SID=MRODEV1)))"
2.5个性化CO概述
1.创建一个CO对象继承原CO对象
2.编写个性化CO的处理逻辑
2.6个性化CO具体操作
创建一个JAVA类,继承原CO
当然也要添加继承父类两个request请求方法processRequest()跟processFormRequest()
processRequest()处理get请求。
比如一些页面加载的是时候会调用该方法
processFormRequest()处理post请求:
1、OAPageBean检测当前的page的webBean层次结构是否存在内存中。
如果不存在(由于资源的回收,用户单击浏览器的“后退”按钮,或者一个消息对话框回到主页的post请求),它会像上面的Get请求一样新建WebBean的层次结构。
2、所有在该层次结构上的OAPageBean调用processFormData(OAPageContextpageContext,OAWebBeanwebBean)将表单中的数据写入模式(尤其是,如果在pagelayout上调用processFormData(),则在该层次下的所有bean都会调用processFormData())。
表单中的数据写入到底层模型自动调用属性和EO级上的验证(这些是数据库方面的比如唯一索引、字段类型)。
如果抛出任意验证异常,则处理停止并将错误信息发给用户。
3、如果在processFormData()过程中没有异常抛出。
在该层次下的所有OAPageBean调用processFormRequest(OAPageContextpageContext,OAWebBeanwebBean)。
这个过程将用户的操作传给控制器。
4、如果没有的JSP页面重定向转发或发出-或例外地被投进了processFormRequest()-然后刷新页。
简单的我们页面上的一些组件比如input、lov调用验证和显示lov的region时会调用该方法进行处理.
2.7个性化CO常用的API
获取AM对象
OAApplicationModuleam=pageContext.getApplicationModule(webBean);
获取VO对象
oracle.jbo.ViewObjectcuxrow=am.findViewObject("
CreateUpdateVisitVO1"
);
(可能源代码里面写的VO一般是CreateUpdateVisitRowImpl,这里用基类的原因是因为我们在不同应用下进行操作。
所以如果还是用子类的话虽然编译通过了,我们在调用的时候就会出错)
获取连接对象
OADBTransactiontxn=(OADBTransaction)am.getTransaction();
获取当前行对象
Rowcurrentrow=cuxrow.getCurrentRow();
获取LOV返回值方法
StringLovInputSourceId=pageContext.getLovInputSourceId();
if("
UnitName"
.equals(LovInputSourceId)){
HashtableUnitNamelovResults=pageContext.getLovResultsFromSession(LovInputSourceId);
Instanceid=(String)UnitNamelovResults.get("
ItemInstanceId"
}
LovInputSourceId为我们调用的lov的ID
获取预编译对象
PreparedStatementstmt=(PreparedStatement)txn.createPreparedStatement(lineNumber_sql,0);
获取结果集对象
ResultSetRs=stmt.executeQuery();
页面重定向
pageContext.forwardImmediatelyToCurrentPage(map,//noparameterstopass
true,//retaintheAM
OAWebBeanConstants.ADD_BREAD_CRUMB_NO);
我们在页面重定向的时候会重新调用processRuquest方法,所以我们一般通过传入map参数进行对页面的控制,使其不会对页面进行刷新。
2.8个性化的查询和删除
1.查出个性化生成的页面
BEGIN
jdr_utils.listcustomizations
(p_document=>
'
/oracle/apps/eam/workorder/webui/CreateUpdateWOPG'
END;
2.查看个性化的内容
jdr_utils.printdocument
/oracle/apps/eam/workorder/webui/customizations/site/0/CreateUpdateWOPG'
3.删除个性化内容
jdr_utils.deleteDocument
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别名添加进去了.
3.OAF个性化迁移
3.1概述
从一个环境迁移到另一个环境的个性化通过个性化标准导入导出实现。
3.2个性化导出
个性化->
导入/导出
设置系统配置文件中个性化路径
在FTP中添加该路径文件夹
选择个性化的页面和个性化的对象
将导出的个性化文件直接迁移到另一个环境中
进入另一个环境的功能管理员->
导入/导出->
导出的个性化
(当然该环境也要进行配置文件路径的配置)选择导入的个性化文件点击从文件系统导入按钮,然后重启下高速缓冲即可。
3.4开启页面个性化
系统管理员->
配置文件->
系统
设置用户开启该功能
4.OAF控件对象详解
4.1OAPageContext对象
获取field字段和设置字段方法:
oapageContext.getParameter()和oapageContext.putParameter()来设置获取字段(field)的值
页面跳转和重定向方法:
oaPageContext.forwardImmediatelyToCurrentPage()重新导向到当前页面
oaPageContext.sendRedirect(newPage)导向到其他页面
写debug信息
oaPageContext.writeDiagnostics()
从FND消息字典中获取信息:
oaPageContext.getMessage();
4.2OAWebBean对象
简述:
webBean对象表示了页面中的结构/层次关系,因此通过这个参数我们可以操控页面结构的所有组件.比如获取VO对象
oawebBean.findChildRecursive(‘xxxVO1’);
获取一个区域对象region
OAStackLayoutBeanoaStackLayoutBean=(OAStackLayoutBean)oaWebBean.findIndexedChildRecursive("
region_ID"
4.3LOV控件实现
1.创建VO对象,用于数据显示
2.创建一个AM对象容器用于放VO对象
3.建立pageComponent,其类型为Region,在Region新建一个RegionUsingWizard,将VO对象的项显示到Region面板上
4.在主区域上新建item,设置成messageLovInput类型,设置lovMappings,设定Item的lov来源属性为之前的Region
4.4poplist控件实现
1.创建VO对象,存放数据库数据
2.在主区域里新建一个item,设置成messageChoice类型。
将下拉选项设置成快码添加到SQL里面
然后直接点下一步,默认到点击完成生成VO对象
设置三个参数,DisplayAttribute为显示项,
效果显示
4.5AdvancedTable控件实现
该控件跟我们在EBSForm里面开发folder有类型的效果。
1.新建一个AdvancedTableVO对象和TestAM对象;
将VO对象添加到AM模块中
2.新建一个AdvancedTablePG界面,设置AM属性为TestAM;
在PG页面下新建一个Region设置其类型为query;
在QueryRN下新建一个Region设置其类型为AdancedTable;
3.在AdanvcedTable控件下新增column项,
给column添加数据项用于获取数据库传过来的数据。
设置ViewAtrribute的值从VO对象中选择显示在该列的字段名(注意在pagelayout控件里面关联AM对象,将VO对象放入AM模块中才能通过编辑选出来)
为数据项添加prompt项。
AdvancedTable控件还可以按钮和选择项,可用于跳转,这里我只用于条件查询没有涉及跳转所以不考虑。
为查询页面添加simpleSearchMappings和simpleSearchPanel组件
在simpleSearchPanel下添加Region控件和查询项(这里我用了lov输入框类型)具体实现可参考Lov控件实现
在CuxSimpleSearchRN布局里面通过Rows和Columns可以设置将查询项显示成几行和几列分布;
(这里我只设置了一个查询项所以为默认);
将查询项与数据项进行关联
测试结果:
4.6Hgrid控件实现
4.7Train控件实现
1.创建TrainRN控件为其添加三个link组件
为每个link设置跳转的URL路径
2.新建pageButtonBar的TrainFooterRN,再在下面建立navigationBar的NavBar
为其添加三个link组件,并为每个link设置DestinationURL值
3.为TrainFooterRN添加CO,控制页面跳转,添加如下代码
4.新增三个跳转页面TrainSupplier1PG,TrainSupplier2PG,TrainSupplier3PG
5.给每个PG页面继承TrainFooterRN和TrainRN
6.效果显示
4.8Tree控件实现
5.常用的RegionType
5.1SingeDefaultColumn布局
5.2messageComlumnLayout布局
5.3SubTabs布局
5.4Train布局
6.OAF_VO对象详解
6.1BindingStyle绑定方式
1.BindingStyle主要用于对VO的whereclause做动态传值,总共有三种方式
1)OraclePositional
是一种常用的方式,简单来说这种方式都是通过参数”:
”和数字声明的,比如
Whereparameter1=:
1andparameter2=:
2。
参数只会根据数字在VOSqlStatement中出现的顺序传入到ViewObject中,而不会根据数字的大小而传入。
在VO上设置完之后,我们需要在执行VO查询之前,对VO参数进行绑定;
添加代码如下
BindingStyleTestVOImplvo=this.getBindingStyleTestVO1();
vo.setWhereClause(null);
vo.setWhereClauseParam(0,newNumber(Integer.parseInt(“ticket_id”)));
vo.setWhereClauseParam(1,newNumber(Integer.parseInt(“mr_route_id”)))
(注意:
在使用vo.setWhereClauseParam(intindex,Objectvalue)进行赋值的时候,
index一定是从0开始的,接着就是1,2,3,…….但是在VOSQLStatement中,参数却不是必须从0开始,而且后面的参数的数值也不必比前面的大。
但是在使用vo.setWhereClauseParam()给VO绑定参数值的时候一定要使用0和1作为index,而且index必须和绑定参数在VOSQLStatement中出现的顺序对应的类型一致);
如果使用了其他index,就会抛出无效的列索引错误
oracle.apps.fnd.framework.OAException:
oracle.jbo.SQLStmtException:
JBO-27122:
Invalidcolumnindex…..
2)OracleName
创建VO添加参数查询。
在BindVariable页面上定义要在VOSQLStatement中使用的绑定参数的名字,类型和默认值
在VO定义上设置完之后,我们需要执行VO查询之前,使用vo.setNamedWhereClauseParam(Stringname,Objectvalue)对VO的绑定参数进行赋值,如下面的代码。
BindingStyleTest2VOImplvo=this.BindingStyleTest2VO1();
--初始化
vo.setWhereClauseParams(null);
vo.setNamedWhereClauseParam("
ticket_id"
ticket_id);
mr_route_id"
mr_route_id);