弹性域的使用整理版.docx
- 文档编号:26613748
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:30
- 大小:2.07MB
弹性域的使用整理版.docx
《弹性域的使用整理版.docx》由会员分享,可在线阅读,更多相关《弹性域的使用整理版.docx(30页珍藏版)》请在冰豆网上搜索。
弹性域的使用整理版
弹性域的使用
弹性域分为键弹性域和说明性弹性域,本文就针对这两种弹性域在二次开发中使用进行举例说明,并附带说明弹性域中经常使用的值集;一个弹性域由多个段组合起来,数据库中,段以单个表列形式出现。
一、弹性域开发中需要做的前期工作
1.注册一个可以使用弹性域的表,字段
本范例全部以如下对象为基础,进行弹性域的说明
CREATETABLEflex_ln
(
nameVARCHAR2(20),
ageNUMBER,
deptVARCHAR2(20),
attribute1VARCHAR2(250),
attribute2VARCHAR2(250),
attribute3VARCHAR2(250),
attribute4VARCHAR2(250),
attribute_categoryVARCHAR2(250)
);
注册数据库表,列
系统中的数据库表和列的注册旨在支持系统的弹性域和预警系统两个特性如果不需要这些特性不需要注册
表.注册方法:
用如下的过程注册表
语法:
ad_dd.register_table('所有者','表名','T自动扩展/S非自动扩展','下一区','自由','已使用')
executead_dd.register_table('EDU','FLEX_LN','T');
检查注册成功与否:
selectft.table_idfromfnd_tablesftwhereft.table_name='CUX_OM_POP_VALIDITY_ALL';
删除注册:
executead_dd.delete_table('CUX','CUX_OM_POP_VALIDITY_ALL');
这里说明下,EDV是在系统注册过的一个应用简称,二次开发的程序,最好重新注册一个应用,这样便
于今后的管理。
如下图:
注册表中的列(弹性域列)
语法:
executead_dd.register_column('所有者','表名','字段名',序号,'类型',字段宽度,是否为空,是否可以转换)
executead_dd.register_column('EDV','FLEX_LN','ATTRIBUTE1',1,'VARCHAR2',50,'N','N');
executead_dd.register_column('EDV','FLEX_LN','ATTRIBUTE2',2,'VARCHAR2',50,'N','N');
executead_dd.register_column('EDV','FLEX_LN','ATTRIBUTE3',3,'VARCHAR2',50,'N','N');
executead_dd.register_column('EDV','FLEX_LN','ATTRIBUTE4',4,'VARCHAR2',150,'N','N');
executead_dd.register_column('EDV','FLEX_LN','ATTRIBUTE_CATEGORY',5,'VARCHAR2',30,'N','N');
注册说明性弹性域
应用:
选择注册的应用
名称:
填写注册说明弹性域的名称(必须唯一)
标题:
弹性域的标题,在今后的应用中,此说明弹性域将会在窗口标题上显示在此定义的标题内容
表应用:
在注册表,列时指定的应用(appl_short_name)
表名:
选择注册的表名称
结构列:
必须也是存在于注册过的列,结构列的意义就是存放说明性弹性域上下文提示的值
上下文提示:
是在说明性弹性域上下文字段的标题描述
参考字段BUTTON里,如下界面:
上面的界面是输入界面,系统提供输入,这里可以输入多个记录,当然最终只能有一个字段来起作用,需要在段里指定。
字段名:
必须与弹性域中选择的表中的字段一致。
说明:
对字段的描述性文字
参考字段的含义:
参考字段的主要作用是与结构列的作用类似,可以在不选择上下文字段的情况下,系统根据参考字段的含义来对应显示不用的弹性域,
举例说明:
例如参考字段为NAME,则在系统中输入NAME信息后,系统会自动根据NAME的信息来确定显示什么样的弹性域,这样就可以避免来选择上下文来显示需要的弹性域。
列BUTTON里,如下界面
这里面显示的是注册后的列字段(如果填写了结构列字段,则这里面将不在显示结构列字段,因为系统认为结构列字段与弹性字段是不同的)
如果对某个弹性字段不需要,可以将起用CHECKED失效,这样在构造弹性域的时候,此弹性字段不会作用显示
系统注册完弹性域的名称后,下一步需要配置弹性域的弹性字段.
界面如下:
[弹性域上下文]的范围定义在值集里面,每一个值,都会定义自己的[段];根据[参考字段]的值和[上下文字段]的值进行比较,如果存在,则显示维护弹性值,如果不存在,则不显示.
名称:
填写注册说明弹性域的名称(必须唯一)
此处的界面需要重点注意的地方:
上下文字段
->提示:
这里的提示是上下文PROMPT的信息,在这里输入信息后,在注册弹性域“上下文提示”栏的内容,两者的内容是一致的
->值集:
为上下文字段的内容提供一个值的LOV形式选择,
以本例说明:
值集SET_VALUE_DESC_FLEX中包括的信息是“弹性一”、“弹性二”,这样,就可以根据选择不
同的信息来实现不同的弹性域,而且,选择的上下文字段信息(此处就是弹性域上下文AAAA栏)会保存在结构列中。
->默认值:
设定上下文的默认值
->参考字段:
此处系统提供的是一个LOV输入,此处LOV里的数据来源于在注册弹性域里的时候“参考字段:
”BUTTON里的输入记录。
参考字段的含义是,可以以其他字段的输入记录来判断是否显示哪种弹性域。
上下文字段值
这里可以定义多个弹性域段:
比如
弹性域1=弹性字段1+弹性字段2
弹性域2=弹性字段1+弹性字段2+弹性字段3
弹性域3=弹性字段1+弹性字段2+弹性字段3+弹性字段4
这里需要说明下:
每个弹性的段信息中,都有一个默认的段定义GlobalDataElements
弹性域GlobalDataElements的段结构如下:
如果我们定义的弹性域只有一种段结构的话,可以直接在
GlobalDataElements段中进行定义,如果有多个的话,需要在另创建记录进行段定义的需要,有一点需要说明的是,一旦有注册了的字段在GlobalDataElements中定义了结构的话,那么用户自己在创建其他的段结构,则不会显示在GlobalDataElements中使用了的字段
具体定义弹性域中需要那些弹性字段,需要在“段”BUTTON里的界面中进行定义
如弹性一的段结构
弹性二的段结构
以本文中的为例进行说明:
GlobalDataElements段中定义了一个ATTRIBUTE1字段,那么在弹性一、弹性二中的段定义的时候,无法在选择ATTRIBUTE1这个字段。
针对此弹性域的配置,在实际使用中的说明:
图中红色框代表的是加载说明性弹性域的字段,点击此处,便可出现弹性域的结构。
由于在系统设置弹性域段的时候,给上下文段一个默认值=“弹性一”则系统会自动将弹性一的段结构给显示出来(定义了三个弹性字段TITLE分别为10、15、20),由于此弹性域还定义了一个GlobalDataElements的段结构,则系统会将GlobalDataElements显示在最前面,作为整个弹性域的公共字段(不论弹性域上下文AAAA选择的是“弹性一、弹性二”)整个弹性域都将会显示GlobalDataElements的段结构。
选择“弹性二”后的界面如下:
下面在图文说明下定义的参考字段“NAME”的作用
在应用弹性域界面中在“NAME”栏输入“弹性一”,选择弹性栏位得到的结果如下
如果在“NAME”栏输入“弹性二”选择弹性栏位得到的结果如下
从以上两个图可以说明参考字段也可以决定需要显示的弹性结构。
在这里需要提一个:
参考字段+上下文段(不显示+不需要)这样就可以在界面中动态的控制弹性的结构,而不需要来选择上下文的内容
当然,参考字段与上下文段还是有所区别的,在参考字段输入“弹性一”后,虽然显示的是弹性一的段结构,然而也可以在选择上下文段的值来重新选择需要的段结构,这样的话,参考字段的值=弹性一,而上下文的值=弹性二,也就是说,参考字段的作用是在于初始话一个弹性域的结构,一旦该弹性段有值以后,就不在作用了。
真正跟弹性结构相关的字段还是结构列字段,也就是上下文段
这里可以看到,虽然参考字段是“弹性二”,但可以在继续选择上下文来需要相应的段结构。
编写FORM设置和弹性域
1:
加入非基表域用于容纳弹性域,我们做一个ITEM叫DESC_FLEX注意这个ITEM的CLASS属性为TEXT_ITEM,LOV处选择ENABLE_LIST_LAMP,并把检查有效性设为NO。
2:
FORM中要包含所设置的弹性域如ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2…...注意这些域为基表项,设置CANVANS为NULL或者显示在画布上都可以
3:
把DESC_FLEX放在CANVANS上,弄成弹性域的样子.设置其属性:
值列表=ENABLE_LIST_LAMP
4:
在FORM中注册弹性域
为了FORM识别弹性域,在FORM级别的WHEN-NEW_FORM_INSTANCE上加上如下的代码
从列表中验证=否
fnd_descr_flex.define(
'FLEX_LN',--form中的blockname
field=>'DESC_FLEX',--form中的弹性域的itemname
appl_short_name=>'EDV',--注册弹性域在那个user下
desc_flex_name=>'FLEX_LN'--注册弹性域的名称
);
具体参数及意思.如下
含有弹性域的BLOCK叫FLEX_LN
DESC_FLEX我们命名的那个容纳弹性域的域.
FLEX_LN我们注册的那个弹性域的名称.
5:
加入触发器以支持弹性域.
分别在BLOCK级别加入如下的触发器.
PRE-QUERY
PRE-UPDATE
PRE-INSERT
POST-QUERY
其触发器的代码分别对应
FND_FLEX.EVENT('PRE-QUERY');
FND_FLEX.EVENT('PRE-UPDATE');
FND_FLEX.EVENT('PRE-INSERT');
FND_FLEX.EVENT('POST-QUERY');
在容纳弹性域的域ITEM级别加入如下的触发器
WHEN-VALIDATE_ITEM
FND_FLEX.EVENT('WHEN-VALIDATE-ITEM');
至此我们完成了本FORM,只要打开弹性域我们就可以像用系统弹性域一样用这些弹性域了。
手工删除说明性弹性域脚本:
/*删除说明性弹性域的段结构*/
DELETEfnd_descr_flex_col_usage_tl
WHERE(application_id=660)
AND(descriptive_flexfield_nameLIKE'FLEX_LN');
/*删除说明性弹性域的段*/
DELETEfnd_descr_flex_contexts_tl
WHERE(application_id=660)
AND(descriptive_flexfield_nameLIKE'FLEX_LN');
DELETEfnd_descr_flex_column_usages
WHERE(application_id=660)
AND(descriptive_flexfield_nameLIKE'FLEX_LN');
/*删除说明性弹性域的注册信息*/
DELETEfnd_descriptive_flexs_tla
WHEREa.application_id=660ANDa.descriptive_flexfield_name='FLEX_LN';
注册键弹性域
键弹性域的注册如下图
应用:
选择注册的应用
代码:
填写注册键弹性域的CODE(必须唯一,最多四个字符,在调用键弹性域必须使用的值)
标题:
键弹性域的标题,在今后的应用中,此键弹性域将会在窗口标题上显示在此定义的标题内容
说明:
表应用:
在注册表,列时指定的应用(appl_short_name)
表名:
选择注册的表名称
结构列:
必须也是存在于注册过的列,结构列的意义就是存放键弹性域使用的是哪个段结构的代码
唯一标识列:
是记录键弹性域唯一的值,要找到健弹性域的具体含义,必须通过此唯一标识列
定义键弹性域的段结构,如下图
点击“段”按纽进行定义:
此处定义段结构与说明性弹性域一致,在此不再多说。
键弹性域的开发例子:
/***************************在客户化的用户下*******************************/
/*键应用表*/
/*Formattedon2011/11/300:
12:
17(QP5v5.115.810.9015)*/
CREATETABLEt_key_flex
(
key_idNUMBER,/*键弹性域唯一值*/
ageNUMBER,
nameVARCHAR2(30),
deptVARCHAR2(30),
TYPEVARCHAR2(30)
);
/*创建存放键弹性域的结构表*/
/*Formattedon2011/11/300:
13:
03(QP5v5.115.810.9015)*/
CREATETABLEflex_ln_key
(
key_flex_structure_idNUMBER,
key_flex_idNUMBER,
summary_flagVARCHAR2
(1),/*必须有此字段*/
enabled_flagVARCHAR2
(1),/*必须有此字段*/
start_date_activeDATE,/*必须有此字段*/
end_date_activeDATE,/*必须有此字段*/
last_updated_byNUMBER,/*必须有此字段*/
last_update_dateDATE,/*必须有此字段*/
segment1VARCHAR2(30),
segment2VARCHAR2(30),
segment3VARCHAR2(30),
segment4VARCHAR2(30),
segment5VARCHAR2(30),
segment6VARCHAR2(30),
segment7VARCHAR2(30),
segment8VARCHAR2(30),
segment9VARCHAR2(30),
segment10VARCHAR2(30),
segment11VARCHAR2(30),
segment12VARCHAR2(30),
segment13VARCHAR2(30),
segment14VARCHAR2(30),
segment15VARCHAR2(30)
);
/*必须要创建一个与键结构表对应的序列*/
CREATESEQUENCEFLEX_LN_KEY_SSTARTWITH1;
--创建存放键弹性域表的对应序列(键弹性域表名+"_S")
/***************************在公共用户APPS下*******************************/
/*创建同义词*/
/*Formattedon2011/11/300:
14:
01(QP5v5.115.810.9015)*/
CREATESYNONYMflex_ln_keyFORerp_dev.flex_ln_key;
createsynonymt_key_flexforerp_dev.t_key_flex;
createsynonymflex_ln_key_sforerp_dev.flex_ln_key_s;
/*注册键结构表和字段*/
executead_dd.register_table('EDV','FLEX_LN_KEY','T');
executead_dd.register_column('EDV','FLEX_LN_KEY','KEY_FLEX_STRUCTURE_ID',1,'NUMBER',38,'Y','N');
executead_dd.register_column('EDV','FLEX_LN_KEY','KEY_FLEX_ID',2,'NUMBER',38,'Y','N');
executead_dd.register_column('EDV','FLEX_LN_KEY','SEGMENT1',3,'VARCHAR2',30,'Y','N');
executead_dd.register_column('EDV','FLEX_LN_KEY','SEGMENT2',4,'VARCHAR2',30,'Y','N');
executead_dd.register_column('EDV','FLEX_LN_KEY','SEGMENT3',5,'VARCHAR2',30,'Y','N');
executead_dd.register_column('EDV','FLEX_LN_KEY','SEGMENT4',6,'VARCHAR2',30,'Y','N');
executead_dd.register_column('EDV','FLEX_LN_KEY','SEGMENT5',7,'VARCHAR2',30,'Y','N');
FORM程序语法:
fnd_key_flex.define(
block=>'T_KEY_FLEX',--操作的block
field=>'KEY_FLEXITEM',--创建的item,用来容纳键弹性域
id=>'KEY_ID',--保存key弹性域的唯一值
appl_short_name=>'EDV',
code=>'K_LN',--键弹性域的注册代码fnd_id_flex_structures.id_flex_code
num=>'101'--fnd_id_flex_structures.id_flex_num
);
分别在BLOCK级别加入如下的触发器(可参考说明性弹性域的应用代码).
PRE-QUERY
PRE-UPDATE
PRE-INSERT
POST-QUERY
WHEN-NEW-ITEM-INSTANCE
WHEN-VALIDATE-ITEM
WHEN-VALIDATE-RECORD
其触发器的代码分别对应
FND_FLEX.EVENT('PRE-QUERY');
FND_FLEX.EVENT('PRE-UPDATE');
FND_FLEX.EVENT('PRE-INSERT');
FND_FLEX.EVENT('POST-QUERY');
FND_FLEX.EVENT('WHEN-NEW-ITEM-INSTANCE');
FND_FLEX.EVENT('WHEN-VALIDATE-ITEM');
FND_FLEX.EVENT('WHEN-VALIDATE-RECORD');
编写FORM设置和弹性域
加入非基表域用于容纳弹性域,我们做一个ITEM叫KEY_FLEXITEM
注意这个ITEM的CLASS属性为TEXT_ITEM,LOV处选择ENABLE_LIST_LAMP,并把检查有效性设为NO。
由下图可以看出键弹性域的存放关系,在应用表里存放的是键唯一值,而在键结构表中存放的是键结构值(段结构代码和键唯一值)
备注说明:
/******************
键弹性域的数据字典
******************/
select*fromfnd_id_flexswhereid_flex_code='K_LN';
select*fromfnd_id_flex_segments_tlwhereid_flex_code='K_LN';
select*fromfnd_id_flex_segmentswhereid_flex_code='K_LN';
select*fromfnd_id_flex_structureswhereid_flex_code='K_LN';
select*fromfnd_id_flex_structures_tlwhereid_flex_code='K_LN';
/*************************
完全删除键弹性域的语法
*************************/
--删除键弹性域的结构段
DELETEFND_ID_FLEX_SEGMENTS_VLWHEREID_FLEX_CODE='KFTV';
--删除键弹性域的结构
DELETEFND_ID_FLEX_STRUCTURES_VLWHEREID_FLEX_CODE='KFTV';
--删除键弹性注册
DELETEFND_ID_FLEXSWHEREID_FLEX_CODE='KFTV';
范围弹性域
范围弹性域是使用的键弹性域的一种扩展,其没有专门的弹性注册,全部来源于键弹性域的结构定义:
应用表
CREATETABLEflex_rang_ln
(
concatenated_segments_lowVARCHAR2(300),
concatenated_segments_highVARCHAR2(300),
segment1_lowVARCHAR2(30),
segment2_lowVARCHAR2(30),
segment3_lowVARCHAR2(30),
segment4_lowVARCHAR2(30),
segment5_lowVARCHAR2(30),
segment6_lowVARCHAR2(30),
segment7_lowVARCHAR2(30),
segment1_highVARCHAR2(30),
segment2_highVARCHAR2(30),
segment3_highVARCHAR2(30),
segment4_highVARCHAR2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 弹性 使用 整理