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