ADF Customization part 1: The MDS

Oracle Fusion Middleware中的客户化(Customization)均通过Oracle Metadata
Services(MDS)加以实现,客户化开发允许开发人员、用户或系统分析人员在运行时灵活的对程序进行修改。本文主要介绍MDS在ADF客户化应用时的作用、配置。ADF中实现客户化的几种方式将稍后介绍。

示例环境:
Oracle JDeveloper 11.1.1.2.0
Oracle XE (HR schema)

Oracle Metadata Services用于存储用户在对Fusion Application进行客户化开发/个性化时所作的修改。这里包括两方面内容:

1. 利用JDeveloper针对已经开发完成的Fusion Application进行客户化开发,设置客户化层,以使同一应用针对不同的使用环境(如医疗行业/金融行业,A公司/B公司)具有不同的展现形式等,而又不破坏原有的应用。
2. 终端用户或具有权限的系统管理员登录进入运行中的Fusion Application,通过拖拽、点击等方式对可定制的界面元素进行设置,如设置表格列宽、设置表格列显示顺序、设置默认搜索条件、设置控件的展开/收缩状态等,并将修改应用至指定用户/组中。所
有的这些修改,均将保存入Oracle Metadata Services
repository中,并允许在发布应用时将MDS中内容打包入MAR(Metadata
Archive),再将存储客户化信息的MAR打包入EAR进行Fusion Application的发布。

MDS repository支持两种方式的实现:文件/数据库。使用JDeveloper新建的ADF应用默认使用基于文件的MDS repository,并允许通过配置Profile的方式调整repository至数据库。

本文以下将介绍基于文件的MDS repository,基于数据库的MDS repository请至此观看(源地址已经被平平安安W.A.L.L掉了,此地址为转载 + 翻译)。

ADF应用默认使用基于文件的MDS repository,通过Application -> Application Properties,展开RUN节点,即可看到当前应用的MDS配置

可以看到应用使用默认MAR Profile,当前MDS repository的存储位置,以及是否在每次执行应用前清空MDS存储客户化信息。

对于已经进行客户化的应用,打开默认MDS repository路径
路径中queryTest为启用客户化的应用的名称,而mdssys即为系统默认MDS repository的存储文件夹。persdef为我的客户化应用中定义的自定义查询存储的repository。

展开mdssys可看到如下结构

以看到在queryTest这个应用中,包括user1、user2这两个用户的客户化信息,该信息来自于运行时分别以这两个用户的身份进行登录,并针对
queryTest.jspx中的一个表格(AdfRichTable)中的列进行客户化(增、删显示的列,调整列的顺序及列宽等),则客户化结果被保存
至MDS repository中以页面名称命名的XML文件中。

打开user1/queryTest.jspx.xml,看到对于表格列的客制化信息:
<?xml version = ‘1.0’ encoding = ‘UTF-8’?>
<mds:customization version="11.1.1.55.36" xmlns:mds="http://xmlns.oracle.com/mds"&gt;
<mds:modify element="resId1c1">
<mds:attribute name="visible" value="true"/>
<mds:attribute name="width" value="126"/>
</mds:modify>
<mds:modify element="resId1c2">
<mds:attribute name="visible" value="true"/>
</mds:modify>
<mds:modify element="resId1c4">
<mds:attribute name="visible" value="true"/>
</mds:modify>
</mds:customization>
从上述文件可看出改客制化信息定义了分别定义了queryTest.jspx页面中ID为resId1c1, resId1c2, resId1c4的控件的可见性、宽度等信息。