如何在Form中使用描述性弹性域 .

弹性域包括键弹性域和描述性弹性域,其开发方法和用途均不一样,在此主要介绍描述性弹性域在Form中的开发方法。

    描述性弹性域的开发步骤主要包括:

    1、创建表,表中包括弹性域结构列和弹性域列

    2、创建视图,视图中包括弹性域相关列(非必需)

    3、使用AD_DD工具包注册表和表列

    4、在Oracle EBS系统中注册描述性弹性域

    5、启用描述性弹性域

    6、按照一般Form开发的步骤,创建相关对象

        1)、在块中创建一个DF非数据库项,并设置属性

        2)、给DF项和数据块添加必要的触发器和标准代码

        3)、在PRE-FORM触发器中初始化第四步中注册的弹性域

    7、登录Oracle EBS系统验证弹性域

 

    一、创建表

    创建的表中必须包括描述性弹性域列:

    ATTRIBUTE_CATEGORY   结构列

    ATTRIBUTE1…N          弹性域列的数据库段

    脚本如下

DROP TABLE CUX.CUX_FORM_DFF_TEST;

CREATE TABLE CUX.CUX_FORM_DFF_TEST
(
 ITEM_ID NUMBER NOT NULL,
 ITEM_NUMBER VARCHAR2(30) NOT NULL,
 ITEM_NAME VARCHAR2(100) NOT NULL,
 ITEM_DESCRIPTION VARCHAR2(255),
 START_DATE_ACTIVE DATE,
  END_DATE_ACTIVE DATE,
  ATTRIBUTE_CATEGORY VARCHAR2(30),
  ATTRIBUTE1 VARCHAR2(150),
  ATTRIBUTE2 VARCHAR2(150),
  ATTRIBUTE3 VARCHAR2(150),
  ATTRIBUTE4 VARCHAR2(150),
  ATTRIBUTE5 VARCHAR2(150),
  ATTRIBUTE6 VARCHAR2(150),
  ATTRIBUTE7 VARCHAR2(150),
  ATTRIBUTE8 VARCHAR2(150),
  ATTRIBUTE9 VARCHAR2(150),
  ATTRIBUTE10 VARCHAR2(150),
  ATTRIBUTE11 VARCHAR2(150),
  ATTRIBUTE12 VARCHAR2(150),
  ATTRIBUTE13 VARCHAR2(150),
  ATTRIBUTE14 VARCHAR2(150),
  ATTRIBUTE15 VARCHAR2(150),
  CREATED_BY NUMBER NOT NULL,
  CREATION_DATE DATE NOT NULL,
  LAST_UPDATED_BY NUMBER NOT NULL,
  LAST_UPDATE_DATE DATE NOT NULL,
  LAST_UPDATE_LOGIN NUMBER
)
TABLESPACE CUX;


--Create Index
CREATE UNIQUE INDEX CUX_FORM_DFF_TEST_U1 ON CUX.CUX_FORM_DFF_TEST(ITEM_ID);

--Create Sequence
CREATE SEQUENCE CUX.CUX_FORM_DFF_TEST_S START WITH 1;

--Create Synonym
CREATE SYNONYM CUX_FORM_DFF_TEST FOR CUX.CUX_FORM_DFF_TEST;
CREATE SYNONYM CUX_FORM_DFF_TEST_S FOR CUX.CUX_FORM_DFF_TEST_S;

 

    二、创建视图

    略

 

    三、注册表和列

    使用AD_DD包来注册表和列

    注册表

    AD_DD.REGISTER_TABLE(p_appl_short_name in varchar2, --应用名简称/所有者

                             p_tab_name        in varchar2, --表名

                             p_tab_type        in varchar2, --T自动扩展/S非自动扩展/F

                             p_next_extent     in number, --下一区

                             p_pct_free        in number,

                             p_pct_used        in number)

 

    注册列

    AD_DD.REGISTER_COLUMN(p_appl_short_name in varchar2,

                                p_tab_name        in varchar2, --应用名简称/所有者

                                p_col_name        in varchar2, --列名

                                p_col_seq         in number,   --序号,唯一

                                p_col_type        in varchar2, --类型

                                p_col_width       in number,   --字段宽度

                                p_nullable        in varchar2, --是否为空

                                p_translate       in varchar2, --是否可以转换

                                p_precision       in number default null,

                                p_scale           in number default null)

 

    可以自己编写工具包来自动生成注册脚本,或者可以使用Excel来生成,脚本如下

--注册表
EXECUTE AD_DD.REGISTER_TABLE('CUX', 'CUX_FORM_DFF_TEST', 'T', 8, 10, 90);

--注册列

EXECUTE AD_DD.REGISTER_COLUMN('CUX', 'CUX_FORM_DFF_TEST', 'ITEM_ID', 1, 'NUMBER', 38, 'N', 'N');
EXECUTE AD_DD.REGISTER_COLUMN('CUX', 'CUX_FORM_DFF_TEST', 'ITEM_NUMBER', 2, 'VARCHAR2', 30, 'N', 'N');
EXECUTE AD_DD.REGISTER_COLUMN('CUX', 'CUX_FORM_DFF_TEST', 'ITEM_NAME', 3, 'VARCHAR2', 100, 'N', 'N');
EXECUTE AD_DD.REGISTER_COLUMN('CUX', 'CUX_FORM_DFF_TEST', 'ITEM_DESCRIPTION', 4, 'VARCHAR2', 255, 'Y', 'N');
EXECUTE AD_DD.REGISTER_COLUMN('CUX', 'CUX_FORM_DFF_TEST', 'START_DATE_ACTIVE', 5, 'DATE', 9, 'Y', 'N');
EXECUTE AD_DD.REGISTER_COLUMN('CUX', 'CUX_FORM_DFF_TEST', 'END_DATE_ACTIVE', 6, 'DATE', 9, 'Y', 'N');
EXECUTE AD_DD.REGISTER_COLUMN('CUX', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE_CATEGORY', 7, 'VARCHAR2', 30, 'Y', 'N');
EXECUTE AD_DD.REGISTER_COLUMN('CUX', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE1', 8, 'VARCHAR2', 150, 'Y', 'N');
EXECUTE AD_DD.REGISTER_COLUMN('CUX', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE2', 9, 'VARCHAR2', 150, 'Y', 'N');
EXECUTE AD_DD.REGISTER_COLUMN('CUX', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE3', 10, 'VARCHAR2', 150, 'Y', 'N');
EXECUTE AD_DD.REGISTER_COLUMN('CUX', 'CUX_FORM_DFF_TEST', 'ATTRIBUTE4', 11, 'VARCHAR2', 150, 'Y', 'N');

 

    四、在EBS中注册描述性弹性域

    路径 Application Developer --> Flexfield --> Descriptive --> Register


 
    Application: 弹性域注册的应用名称

    Name:描述性弹性域的名称,必须唯一。一般设置成和表名一样

    Title: 弹性域的标题,在今后的应用中,此说描述性弹性域将会在窗口标题上显示在此定义的标题内容

    Description: 说明

    Table Application: 在(第三步)注册表和列时所指定的应用名称

    Table Name: 注册时的表名称

    Structure Column: 结构列,一般为ATTRIBUTE_CATEGORY,必须是存在于注册过的列。结构列的意义就是存放说明性弹性域上下文提示的值

    Context Prompt: 上下文提示,是在描述性弹性域上下文字段的标题描述

    DFV View Name:

    Reference Fields: 参考字段的主要作用与结构列的作用类似,可以在不选择上下文字段的情况下,系统根据参考字段的含义来对应显示不用的弹性域。举例说明,例如参考字段为 NAME,则在系统中输入NAME信息后,系统会自动根据NAME的信息来确定显示什么样的弹性域,这样就可以避免来选择上下文来显示需要的弹性域。

 

    五、启用描述性弹性域

    路径 Application Developer --> Flexfield --> Descriptive --> Segments

    弹性域设置结束后,需要将Freeze Flexfield Definition冻结才能使设置生效

 

    Application: 弹性域注册的应用名称

    Title: 弹性域标题,打开弹性域窗体时所显示的名称

    Freeze Flexfield Definition: 冻结弹性域定义,修改时需要解除冻结,设置完成之后需要冻结才能生效

    Segment Separator: 段分隔符

    Prompt: 上下文提示

    Value Set: 为上下文内容提供一个LOV值集选择

    Default Value: 上下文默认值

    Reference Field: 参考字段,作用是根据参考字段的值来判断显示哪一中弹性域(上下文)

    Global Data Elements: 每个弹性的段信息中,都有一个默认的段定义 Global Data Elements。如果我们定义的弹性域只有一种段结构的话,可以直接在  Global Data Elements段中进行定义,如果有多个的话,需要在另创建记录进行段定义的需要,有一点需要说明的是,一旦有注册了的字段在 Global Data Elements中定义了结构的话,那么用户自己在创建其他的段结构,则不会显示在Global Data Elements中使用了的字段

    Parts: 自定义段结构

    Vehicle: 自定义段结构

 

   设置完成之后注意要冻结弹性域定义并保存

 

 

    六、开发Form

    Form开发的基本步骤不再冗述,仅对开发描述性弹性域需要的操作做说明:

      1)、创建DF项

      在Data Block中新增一个Item,命名为”DF”,其Subclass InfoRMAtion设置为TEXT_ITEM_DESC_FLEX,(List of Values设置为ENABLE_LIST_LAMP,Validate from List设置为NO,非必需)Database Item设置为NO,


 

      2)、给DF项和数据块添加必要的触发器和标准代码

      为DF项添加WHEN-NEW-ITEM-INSTANCE触发器,并将其Execution Hierarchy属性从Override修改为Before,触发器代码如下

      FND_FLEX.EVENT('WHEN-NEW-ITEM-INSTANCE');

 

      为DF项添加WHEN-VALIDATE-ITEM触发器,其代码为

      FND_FLEX.EVENT('WHEN-VALIDATE-ITEM');

 

      在DF项所在Data Block下添加几个Block级别的触发器,分别为

      PRE-QUERY:  FND_FLEX.EVENT('PRE-QUERY');

      POST-QUERY:   FND_FLEX.EVENT('POST-QUERY');

      PRE-INSERT:   FND_FLEX.EVENT('PRE-INSERT');

      PRE-UPDATE:   FND_FLEX.EVENT('PRE-UPDATE');

      WHEN-VALIDATE-RECORD:   FND_FLEX.EVENT('WHEN-VALIDATE-RECORD');

      WHEN-VALIDATE-ITEM:   FND_FLEX.EVENT('WHEN-VALIDATE-ITEM');

 

      3)、在Form级别的触发器PRE-FORM中注册弹性域

      在Form级别的触发器PRE-FORM中使用FND_DESCR_FLEX.DEFINE来初始化描述性弹性域,如

      FND_DESCR_FLEX.DEFINE(block => 'ITEMS',

                                 field => 'DF',

                                 appl_short_name => 'CUX',

                                 desc_flex_name => 'CUX_FORM_DFF_TEST');

 

      参数说明如下

      block: 弹性域显示项DF所在的Data Block名称

      field: 描述性弹性域显示字段的名称,一般都命名为DF

      appl_short_name: 描述性弹性域注册时的应用简称

      desc_flex_name: 描述性弹性域注册时的名称,一般都与表名一致

 

    七、验证弹性域

    登录EBS中验证开发的描述性弹性域,最终效果如下

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值