解析OAF页面元数据结构((转自Oracle 探索者)

在 Oracle E-Business Suite的二次开发中,基于OAF的开发在JDeveloper OA Extension中进行,完成后使用XMLImporter工具导入页面定义到数据库中,

之后上传相关的Java Class文件到JAVA_TOP下便可以使用OAF应用了,下面我们来看看OAF的页面导入数据库中发生了什么?

下面以采购订单类型定义页面为例来进行剖析。

po_document_types

 

一、导出OAF页面设计的XML定义

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

在EBS中可以通过Abort this Page 的功能来查找出页面相关的信息,如页面结构、个性化、页面上下文、Java系统属性、预置文件等等,

利用这个功能查询出页面的路径:

oaf_page_path

然后使用如下方法来导出页面的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文件,然后将页面信息分别存储在下图的几个表中。

jdr_erd

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页面的个性化也会涉及到这几张表. 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21014973/viewspace-732858/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21014973/viewspace-732858/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值