Oracle ADF中的History Column

十二月 2, 2009 in Oracle 融合中间件

概述

Oracle相关技术开发人员肯定对History Column不陌生,尤其是Oracle EBS二次开发技术人员,因此对于这些字段的作用就不再罗嗦了。

在Oracle ADF中,同样具有History Column,其默认包含了五种:created on, modified on, created by, modified by, version number,在ADF中已经提供了这些History Column的默认实现。但由于不同应用的需要,有可能需要扩展History Column或修改其实现,在ADF中可以轻易做到这些。

实现

1、打开JDeveloper 11g,选择Tools->Preferences,展开Business Components节点。此时可以看到,默认的无种History Column已经包含在此。

2、点击“New”按钮,增加新的History Column,填写入相应的内容,必须要注意的是:

ADF中的History Column的Type Id,从0-10为其保留数字,在我们新增的History Column中是无法使用的,因此在此我们填入数字11作为其Type Id,显示名为modified login(可根据需要修改)

3、在添加History Column完成后,在EO的属性设置时,就可以选到该History Column

4、为避免每个EO中分别为其赋值,我们需要提供该History Column的默认实现,可在EO的实现类(EntityImpl)中进行,重写getHistoryContextForAttribute(AttributeDefImpl attributeDefImpl)方法即可,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  private static final byte LASTUPDATEBY_HISTORY_TYPE = 4;
  private static final byte LASTCREATEBY_HISTORY_TYPE = 3;
  private static final byte MODIFIEDLOGIN_HISITORY_TYPE = 11;
  ……
  @Override
  protected Object getHistoryContextForAttribute(AttributeDefImpl attributeDefImpl) {
    logger.info("getHistoryContextForAttribute");
    Number userId =
      (Number)(this.getDBTransaction().getSession().getUserData().get("UserId") !=
               null ?
               this.getDBTransaction().getSession().getUserData().get("UserId") :
               new Number(-1));
    if (attributeDefImpl.getHistoryKind() == LASTUPDATEBY_HISTORY_TYPE ||
        attributeDefImpl.getHistoryKind() == LASTCREATEBY_HISTORY_TYPE ||
        attributeDefImpl.getHistoryKind() == MODIFIEDLOGIN_HISITORY_TYPE) {
      return userId;
    } else {
      return super.getHistoryContextForAttribute(attributeDefImpl);
    }
  }

5、保存并运行业务组件浏览器,每次创建新记录时,该值都将会赋值。

相关文章:

  1. OAF中多语言转换开发实现解析

0 responses to Oracle ADF中的History Column

Leave a reply

You must be logged in to post a comment.