ADF CUSTOMIZATION PART 2: PERSONALIZATION

ADF CUSTOMIZATION PART 2: PERSONALIZATION

ADF应用的客制化包含两个方面,一方面是允许在运行时,由最终用户对应用进行客制化,如针对用户调整表格的显示状态、查询面板的默认查询、PanelBox的展开状态等,即Personialization;另一方面是允许针对已开发完成的应用进行定制,如修改页面模板、修改页面字段显示值、修改页面跳转逻辑等,即Customization。这些客制化内容均不会对已开发完成的应用作出修改,而是存储在MDS中。本文主要介绍如何为ADF应用启用Personialization。

JDeveloper Ver. 11.1.1.2.0

DB Ver. 10g(XE), Schema HR

启用Personialization步骤:

  1. 使用默认角色进入JDeveloper
  2. 设置应用中ViewController项目的属性,在"ADF View"下勾选"Enable User Customizations","Enable Seeded Customizations",并选择"Across Session using MDS"以使客户化可以保存下来。
  3. 在 Appliaction Navigator 的 Application Resources 中,修改adf-config.xml
     在 MDS Configuration 中增加 Customization Classes UserCC,包路径为oracle.adf.share.config.UserCC,以允许针对用户的客制化。
     在 View 中,确认 Tag Library URI 为 http://xmlns.oracle.com/adf/faces/rich,这里是用于配置哪一组标签及其属性将被存储至MDS,这里声明为ADF Rich Components。
    而 Tags 中则可新增允许进行客制化的标签类型及属性。这里增加几种常用标签
  4. 设定页面元素是否允许客制化修改
    为应用完成上述3步骤的配置后,将为整个应用中adf-config.xml中指定的类型控件及属性启用客户化支持。但在实际使用中往往会遇到应用中不同页面同种控件部分需要客制化,部分不允许客制化的情况。则需对页面控件设置 persist 及 dontpersist 属性。
    需要注意的两点:
    • persist 及 dontpersist 属性只对于将客制化信息存入MDS的情况有效。
    • 在任何情况下如果客制化信息保存至MDS失败,则仅将客制化信息保存在当前Session中。
    • 控件默认将所有客制化信息保存至MDS,可以点击persist/dontpersist的edit进行可用属性的编辑。
    • dontpersist的优先级高于persist,即当同一属性被设置入persist及dontpersist,则该属性的客制化信息不会保存入MDS。

至此完成应用的客制化定义部分。

由于本示例为针对用户的客制化定义,因此接下来需要定义应用的安全验证及用户,至少定义两个用户用于验证客制化的定义。

  1. 进入 "Configure ADF Security" (Application -> Secure -> Configure ADF Security),在Step1中选择 "ADF Authentication and Authorization"。
  2. Step2,确认需要应用验证的Web项目,选择HTTP Basic Authentication。这里HTTP Basic Authentication即为最常用的Web验证方式,使用浏览器的弹出窗口进行验证。
  3. Step3,确认选择为 "No Automatic Grants",点击下一步
  4. Step4,确认没有勾选 "Redirect Upon Successful Authentication" ,并点击Finish完成定义。
  5. 进行jazn-data.xml的配置,Application -> Secure -> Application Roles,增加Role,此示例使用DjTestRole
  6. 点击Users,增加两个用户名为user1,user2,密码分别为password1,password2。
  7. 点击Application Roles,为第五步创建的组增加成员user1及user2
  8. 点击左下角ADF Policies,将需要访问的页面/taskflow授权给之前创建的Role,并确认勾选Customize, Grant, Personalize

至此完成应用的配置,运行应用,分别以user1/user2登录,对于表格列的操作,则对于已经定义允许客户化的控件的状态修改将依用户区分保存至MDS。如使用user1登录后修改表格显示的列及列宽,则user1下一次登录将看到本次的修改结果;而user2看到的表格显示状态不随user1的修改而改变。

附注:

对于启用基于MDS的客制化支持后QueryPanel不能保存自定义查询,报出异常

oracle.mds.exception.ReadOnlyStoreException: MDS-01273: 未能对资源 /persdef/dj/demo/model/queries/EmployeesVO.xml 执行操作, 因为映射到名称空间 / BASE DEFAULT 的源元数据存储为只读。

的问题,Oracle官方在JDeveloper 11.1.1.1.0 的
Release Note 中有提到,需要在应用的adf-config.xml中<mds-config>节点下<cust-config>节点后配置如下内容

<mds-config>

    ……

    <cust-config>

        ……

    </cust-config>

    <persistence-config>

        <metadata-namespaces>

            <namespace path="/persdef" metadata-store-usage="MAR_TargetRepos"/>

        </metadata-namespaces>

        <metadata-store-usages>

            <metadata-store-usage id="MAR_TargetRepos" deploy-target="true"

                                    default-cust-store="true"></metadata-store-usage>

        </metadata-store-usages>

    </persistence-config>

    ……

</mds-config>

则关于查询面板的客制化信息将存储在MDS目录下的/persdef目录中。详见
ADF Customization part 1: The MDS。

经实际部署发现,11.1.1.2.0版本中,服务器MDS分区名称必须为persdef,否则查询面板的个性化保存会报错。应该是Oracle开发人员尚未完善该功能。关于应用的部署,见ADF Customization part 4: Deploy.


你可能感兴趣的:(ADF CUSTOMIZATION PART 2: PERSONALIZATION)