弹性域分成键弹性域、说明性弹性域。这两种弹性域用途是不一样的。
关键性弹性域:在使用KEY 弹性域的基表中,只保存ID。但可以通 ID 查询到相应的SEGMENT。在表结构中表现为***_ID、SEGMENT1 等。
说明性弹性域: 针对特定用户扩展输入特定信息的字段。 在表结构中表现为attribute_category、 attribute1字段等。
注册说明性弹性域
一、弹性域开发中需要做的前期工作
1.注册一个可以使用弹性域的表,字段
例子以如下表为基础,进行弹性域的说明
create table hek_om_pop_validity_all(
line_id number,
inventory_item_id number, --物料编号189
number_of_day number, --天数
start_date date, --开始日期
end_date date, --结束日期
--=================扩展字段================================
created_by number,
creation_date date,
last_updated_by number,
last_update_date date,
last_update_login number,
org_id number,
attribute_category varchar2(30),
attribute1 varchar2(50),
attribute2 varchar2(50),
attribute3 varchar2(50),
attribute4 varchar2(150),
attribute5 varchar2(150)
);
注册数据库表,列
系统中的数据库表和列的注册旨在支持系统的弹性域和预警系统两个特性如果不需要这些特性不需要注册
表.注册方法: 用如下的过程注册表:
AD_DD.register_table (
p_appl_short_name in varchar2,
p_tab_name in varchar2,
p_tab_type in varchar2,
p_next_extent in number default 512,
p_pct_free in number default 10,
p_pct_used in number default 70);
2.注册表 HEK_OM_POP_VALIDITY_ALL :
begin
ad_dd.register_table('HEK','HEK_OM_POP_VALIDITY_ALL','T');--说明:HEK为新应用简称。(可新注册需要的简称)
commit;
end;
3.注册表中的列(弹性域列):
begin
ad_dd.register_column('HEK','HEK_OM_POP_VALIDITY_ALL','ATTRIBUTE1',1, 'VARCHAR2', 50,'N', 'N');
ad_dd.register_column('HEK','HEK_OM_POP_VALIDITY_ALL','ATTRIBUTE2',2, 'VARCHAR2', 50,'N', 'N');
ad_dd.register_column('HEK','HEK_OM_POP_VALIDITY_ALL','ATTRIBUTE3',3, 'VARCHAR2', 50,'N', 'N');
ad_dd.register_column('HEK','HEK_OM_POP_VALIDITY_ALL','ATTRIBUTE4',4, 'VARCHAR2', 150,'N', 'N');
ad_dd.register_column('HEK','HEK_OM_POP_VALIDITY_ALL','ATTRIBUTE_CATEGORY',5, 'VARCHAR2',30,'N', 'N');
COMMIT;
end;
4.查看是否注册成功:
select ft.table_id from FND_TABLES ft where ft.table_name = 'HEK_OM_POP_VALIDITY_ALL';
TABLE_ID
----------------
90060
select * from FND_COLUMNS fc where fc.table_id in (select ft.table_id from FND_TABLES ft
where ft.table_name = 'HEK_OM_POP_VALIDITY_ALL');
5.如果想删除注册可以引用下面的相应的过程.
procedure delete_table (p_appl_short_name in varchar2,p_tab_name in varchar2);
procedure delete_column (p_appl_short_name in varchar2,
p_tab_name in varchar2,
p_col_name in varchar2);
6.注册弹性域列
路径::应用开发员=>弹性域=>说明性=>注册
应用:选择注册的应用
名称:填写注册说明弹性域的名称(必须唯一)
标题:弹性域的标题,在今后的应用中,此说明弹性域将会在窗口标题上显示在此定义的标题内容
说明:
表应用:在注册表,列时指定的应用(appl_short_name)
表名: 选择注册的表名称
结构列:必须也是存在于注册过的列,结构列的意义就是存放说明性弹性域上下文提示的值
上下文提示:是在说明性弹性域上下文字段的标题描述
上面的界面是输入界面,系统提供输入,这里可以输入多个记录,当然最终只能有一个字段来起作用,需要在段里
指定。
字段名:必须与弹性域中选择的表中的字段一致。
说明:对字段的描述性文字
参考字段的含义:
参考字段的主要作用是 与结构列的作用类似,可以在不选择上下文字段的情况下,系统根据参考字段的含义
来对应显示不用的弹性域,
举例说明:例如参考字段为 NAME,则在系统中输入NAME信息后,系统会自动根据NAME的信息来确定显示什么样的弹性域,这样就可以避免来选择上下文来显示需要的弹性域。
这里面显示的是注册后的列字段(如果填写了结构列字段,则这里面将不在显示结构列字段,因为系统认为结构列字段与弹性字段是不同的)
如果对某个弹性字段不需要,可以将起用CHECKED失效,这样在构造弹性域的时候,此弹性字段不会作用显示
系统注册完弹性域的名称后,下一步需要配置弹性域的弹性字段
此处的界面需要重点注意的地方:
上下文字段
->提示:这里的提示是上下文PROMPT的信息,在这里输入信息后,在注册弹性域 “上下文提示” 栏的内容,两者的内容是一致的
->值集:为上下文字段的内容提供一个值的LOV形式选择,
以本例说明:值集SET_VALUE_DESC_FLEX中包括的信息是“弹性一”、“弹性二”,这样,就可以根据选择不同的信息来实现不同的弹性域,而且,选择的上下文字段信息(此处就是弹性域上下文AAAA栏)会保存在结构列中。
->默认值: 设定上下文的默认值
->参考字段:此处系统提供的是一个LOV输入,此处LOV里的数据来源于在注册弹性域里的时候“参考字段:”BUTTON里的输入记录。
参考字段的含义是,可以以其他字段的输入记录来判断是否显示哪种弹性域。
上下文字段值
这里可以定义多个弹性域段:比如 弹性域1=弹性字段1+弹性字段2
弹性域2=弹性字段1+弹性字段2+弹性字段3
弹性域3=弹性字段1+弹性字段2+弹性字段3+弹性字段4
这里需要说明下:每个弹性的段信息中,都有一个默认的段定义 Global Data Elements
弹性域Global Data Elements 的段结构如下:
如果我们定义的弹性域只有一种段结构的话,可以直接在 Global Data Elements段中进行定义,如果有多个的
话,需要在另创建记录进行段定义的需要,有一点需要说明的是,一旦有注册了的字段在 Global Data Elements中定义了
结构的话,那么用户自己在创建其他的段结构,则不会显示在Global Data Elements中使用了的字段
7.启用说明性弹性域
7.1 先按将相应的FORM开发好,然后在FORM级的以下TRIGGER (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-ITEM: FND_FLEX.EVENT('WHEN-VALIDATE-ITEM');
WHEN-VALIDATE-RECORD: FND_FLEX.EVENT('WHEN-VALIDATE-RECORD');
补充:
WHEN-NEW-ITEM-INSTANCE: FND_FLEX.Event('WHEN-NEW-ITEM-INSTANCE');
7.2 在PRE-FORM的 TRIGGER 中加入
fnd_descr_flex.define ( BLOCK=>'HEK_OM_POP_VALIDITY',
FIELD=>'DESC_FLEX',
APPL_SHORT_NAME=>'HEK',
DESC_FLEX_NAME=>'HEK_OM_POP_VALIDITY_ALL');
说明一下相应参数:BLOCK:指启用弹性域的数据块名
FIELD:指后面新增的ITEM
APPL_SHORT_NAME:指相应模块的简称(系统管理员->应用->注册)
DESC_FLEX_NAME:指注册弹性域时的名称
8.在要启用弹性域的数据块中增加一个ITEM。名称为:DESC_FLEX。
8.1 DESC_FLEX属性设置如下:
子类信息:TEXT_ITEM_DESC_FLEX
数据库项:否
画布:MAIN_C
8.2 在DESC_FLEX 项的以下trigger 中加入:
WHEN-VALIDATE-ITEM :FND_FLEX.EVENT('WHEN-VALIDATE-ITEM');
WHEN-NEW-ITEM-INSTANCE:FND_FLEX.EVENT('WHEN-NEW-ITEM-INSTANCE');
9.完成效果:
add by guozhenbin 20100421
目标:在2%销售订单(退货单)上的订单行中增加一个弹性域,记录补货编号。
1.在销售单上的行上查找是否已经存在弹性域。
2.在应用开发员->弹性域 查找:
3.查找相关段信息
其中“参考字段”是指以这个字段的值来决定显示哪种弹性域。
例如:当订单行类型为“24-常态搭赠退货”的时候,显示弹性域1,订单行类型为“25-非常搭赠退货”时,显示弹性域2。
4.设置“参考字段”为什么值的时候,显示什么弹性域。
例如:行类型“24-常态搭赠退货”将显示两个弹性域“受益产品”“补货行号”。
5.编辑相关的值集
6.最终效果: