使用描述性弹性域
一、创建表,表中包括弹性域结构列和弹性域列
CREATE TABLE RICK_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
);
二、创建视图,视图中包括弹性域相关列(非必需)
三、使用AD_DD工具包注册表
应用名简称、表名、T自动扩展/S非自动扩展/F、下一区
begin
AD_DD.REGISTER_TABLE('XXSRS2', 'RICK_FORM_DFF_TEST', 'T', 8, 10, 90);
END;
四、注册列
应用名简称、表名、列名、序号(唯一)、类型、字段宽度、是否为空、是否可以转换
begin
AD_DD.REGISTER_COLUMN('XXSRS2', 'RICK_FORM_DFF_TEST', 'ITEM_ID', 1, 'NUMBER', 38, 'N', 'N');
AD_DD.REGISTER_COLUMN('XXSRS2', 'RICK_FORM_DFF_TEST', 'ITEM_NUMBER', 2, 'VARCHAR2', 30, 'N', 'N');
AD_DD.REGISTER_COLUMN('XXSRS2', 'RICK_FORM_DFF_TEST', 'ITEM_NAME', 3, 'VARCHAR2', 100, 'N', 'N');
AD_DD.REGISTER_COLUMN('XXSRS2', 'RICK_FORM_DFF_TEST', 'ITEM_DESCRIPTION', 4, 'VARCHAR2', 255, 'Y', 'N');
AD_DD.REGISTER_COLUMN('XXSRS2', 'RICK_FORM_DFF_TEST', 'START_DATE_ACTIVE', 5, 'DATE', 9, 'Y', 'N');
AD_DD.REGISTER_COLUMN('XXSRS2', 'RICK_FORM_DFF_TEST', 'END_DATE_ACTIVE', 6, 'DATE', 9, 'Y', 'N');
AD_DD.REGISTER_COLUMN('XXSRS2', 'RICK_FORM_DFF_TEST', 'ATTRIBUTE_CATEGORY', 7, 'VARCHAR2', 30, 'Y', 'N');
AD_DD.REGISTER_COLUMN('XXSRS2', 'RICK_FORM_DFF_TEST', 'ATTRIBUTE1', 8, 'VARCHAR2', 150, 'Y', 'N');
AD_DD.REGISTER_COLUMN('XXSRS2', 'RICK_FORM_DFF_TEST', 'ATTRIBUTE2', 9, 'VARCHAR2', 150, 'Y', 'N');
AD_DD.REGISTER_COLUMN('XXSRS2', 'RICK_FORM_DFF_TEST', 'ATTRIBUTE3', 10, 'VARCHAR2', 150, 'Y', 'N');
AD_DD.REGISTER_COLUMN('XXSRS2', 'RICK_FORM_DFF_TEST', 'ATTRIBUTE4', 11, 'VARCHAR2', 150, 'Y', 'N');
end;
五、注意提交
commit;
六、在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
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中验证开发的描述性弹性域。