解析OAF页面元数据结构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

解析OAF页面元数据结构
在 Oracle E-Business Suite的二次开发中,基于OAF的开发在JDeveloper OA Extension中进行,完成后使用XMLImporter工具导入页面定义到数据库中,
之后上传相关的Java Class文件到JAVA_TOP下便可以使用OAF应用了,下面我们来看看OAF 的页面导入数据库中发生了什么?
下面以采购订单类型定义页面为例来进行剖析。

一、导出OAF页面设计的XML定义
在OAF页面开发中,开发人员使用JDeveloper可视化工具来设计Web页面,页面有一个个组件嵌套组合而成,最后形成一个XML格式的页面定义文件。

在EBS中可以通过About this Page的功能来查找出页面相关的信息,如页面结构、个性化、页面上下文、Java系统属性、预置文件等等,
利用这个功能查询出页面的路径:
然后使用如下方法来导出页面的XML 信息, 使用PLSQL Developer 工具,在SQL 窗口中运行如下的命令
?[Copy to clipboard]View Code PLSQL
1 2 3 BEGIN
jdr_utils .printDocument ('/oracle/apps/po/setup/webui/DocumentTypesPG'); END;
然后切换到Output 标签页,可以看到OAF 页面的XML 定义,如果页面定义信息过多,可以增加Buffer Size 后再次运行,如下便是PO Document Types 页面的定义信息,
点击下载或查看OAF 页面信息。

从页面定义信息中可以得知OAF 页面的组成,所使用的AM, Region 使用的CO 等信息,通过这个方法可以分析和查看标准的OAF 页面和功能.
二、OAF 页面元信息存储结构
实现上在使用XMLImporter 导入OAF 页面信息的时候,XMLImporter 解析OAF 页面定义XML 文件,然后将页面信息分别存储在下图的几个表中。

OAF 页面元数据主要存储在上图中的3个表中:
1,JDR_PATHS :存储了页面路径的结构以及OAF 页面个性化的结构信息
/oracle/apps/po/setup/webui/DocumentTypesPG 这是OAF 页面的路径,它会被拆分为树型结构存储在JDR_PATHS 表中,请看下面:
?[Copy to clipboard]View Code SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 SELECT path_docid ,path_name , path_type
FROM jdr_paths
START WITH path_name = 'DocumentTypesPG'
CONNECT BY PRIOR path_owner_docid = path_docid;
PATH_DOCID PATH_NAME PATH_TYPE
------------ ----------------- -----------
78629 DocumentTypesPG DOCUMENT
39543 webui PACKAGE
39542 setup PACKAGE
24179 po PACKAGE
2 apps PACKAGE
1 oracle PACKAGE
其中oralce, apps, po, setup, webui 都是属于PACKAGE 类型,而DocumentTypesPG 是
DOCUMENT,即是一个XML 文档
2,JDR_COMPONENTS :存储了页面组件信息,OAF 页面组件被分解后存储在此表中
上面从JDR_PATHS 表中查询出来类型为DOCUMENT 的节点DocumentTypesPG,查询它的组件属性如下:
?[Copy to clipboard]View Code SQL
1 2 3 4 5 6 7 8 9 10 11 12 13
14 15 16
17 18 19
20 21 22
23 24 25
26 27
28
29 30 31 32 33 34 35 36 37 38 39 40 41 42 SELECT comp_seq , comp_element , comp_level , comp_grouping , comp_id
FROM jdr_paths , jdr_components
WHERE path_docid = 78629
AND path_docid = comp_docid (+)
ORDER BY path_seq , comp_seq;
COMP_SEQ COMP_ELEMENT COMP_LEVEL COMP_GROUPING COMP_ID -------- --------------------- ---------- ------------------------ -------------------------- 0 page 0 1 oa:pageLayout 2 content PageLayoutRN 2 oa:image 4 ui:corporateBranding corporateBrandingImage 3 oa:advancedTable 4 ui:contents DocumentTypesResultsTable 4 oa:column 6 ui:contents TypeColumn 5 oa:sortableHeader 8 ui:columnHeader TypeHeader 6 oa:messageStyledText 8 ui:contents Type 7 oa:column 6 NameColumn 8 oa:sortableHeader 8 ui:columnHeader NameHeader 9 oa:messageStyledText 8 ui:contents DocName 10 oa:column 6 LayoutColumn 11 oa:sortableHeader 8 ui:columnHeader LayoutHeader 12 oa:messageStyledText 8 ui:contents Layout 13 oa:column 6 ContractTermsColumn 14 oa:sortableHeader 8 ui:columnHeader ContractTermsHeader 15 oa:messageStyledText 8 ui:contents ContractTerms 16 oa:column 6 UpdateColumn 17 oa:sortableHeader 8 ui:columnHeader UpdateHeader 18 oa:image 8 ui:contents Update 19 oa:column 6 DeleteColumn 20 oa:sortableHeader 8 ui:columnHeader DeleteHeader 21 oa:switcher 8 ui:contents DeleteSwitcher 22 ui:case 9 23 oa:image 10 DeleteDisabled 24 ui:case 9 25 oa:image 10 DeleteEnabled 26 ui:fireAction 12 ui:primaryClientAction 27 ui:parameter 14 ui:parameters 28 ui:parameter 14 29 ui:parameter 14 30 oa:formValue 6 DocumentTypeCode 31 oa:formValue 6 DocumentSubtype 32 oa:flowLayout 6 ui:tableActions TableActionsRN 33 oa:submitButton 8 ui:contents CreateDocumentType
对比上面查询出来的结果和通过
jdr_utils.printDocument(‘/oracle/apps/po/setup/webui/DocumentTypesPG’)工具导出的XML 文件内容就会发现,
JDR_COMPONENTS 中的数据是将XML 文件中的OAF 组件分解得到的
3,JDR_ATTRIBUTES :存储了页面各组件的属性
使用下面的SQL 查询出页面组件的属性信息
?[Copy to clipboard]View Code SQL
1 2 3 4 5 6 7 8 9 10 11
12
13
14
15
16
SELECT comp_seq ,
comp_element ,
comp_level ,
comp_grouping ,
comp_id ,
comp_ref ,
comp_extends ,
comp_use ,
att_name ,
att_value
FROM jdr_paths , jdr_components , jdr_attributes WHERE path_docid = 78629 AND path_docid = comp_docid (+) AND comp_docid = att_comp_docid (+) AND comp_seq = att_comp_seq (+) ORDER BY path_seq , comp_seq , att_comp_seq , att_seq; 执行结果在此就不列出了,留给读者自己去完成.
从上面的OAF 元数据存储不难看出, OAF 开发完成后,使用XMLImporter 工具导入OAF 页面的时候, XMLImport 工具将页面定义XML 文件按照组件进行分解,将文档的结构信息存储到JDR_PATHS 中;将组件信息保存到JDR_COMPONENTS 中; 组件的属性保存到
JDR_ATTRIBUTES 中.
而当运行OAF 页面的时候,OAF 引擎根据Function 定义中的URL 地址,即OAF 页面的页面路径,首先到JDR_PATHS 表中查询出DOCUMENT 的节点,然后再从JDR_COMPOENTS 和 JDR_ATTRIBUTES 表中取得组件和属性信息后输出Web 页面.
所以发布OAF 应用的时候, 页面定义文件是无需上传到JAVA_TOP 下的.
熟悉了JDR 相关的结构之后,对于我们理解OAF 的工作原理,以及解决一些疑难杂症非常有帮助. 同时对于OAF 页面的个性化也会涉及到这几张表.。

相关文档
最新文档