FORM开发之说明性弹性域开发
1.注册使用弹性域的表,字段
注册表语法:ad_dd.register_table('所有者','表名','T自动扩展/S非自动扩展','下一区','自由','已使用')
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)
注册列语法:executead_dd.register_column('所有者','表名','字段名',序号,'类型',字段宽度,是否为空,是否可以转换)
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)
检查注册成功与否:
select ft.table_idfrom fnd_tables ft whereft.table_name='CUX_OM_POP_VALIDITY_ALL
删除注册:
executead_dd.delete_table('CUX','CUX_OM_POP_VALIDITY_ALL');
例
注册表
EXECUTE AD_DD.REGISTER_TABLE('CUX','CUX_AP_INVOICE','T',131072,10,);
注册列
EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','LAST_UPDATE_DATE',41,'DATE',9,'N','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','LAST_UPDATE_LOGIN',42,'NUMBER',38,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','PROGRAM_APPLICATION_ID',43,'NUMBER',38,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','PROGRAM_ID',44,'NUMBER',38,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','PROGRAM_UPDATE_DATE',45,'DATE',9,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','REQUEST_ID',46,'NUMBER',38,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE_CATEGORY',47,'VARCHAR2',30,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE1',48,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE2',49,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE3',50,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE4',51,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE5',52,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE6',53,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE7',54,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE8',55,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE9',56,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE10',57,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE11',58,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE12',59,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE13',60,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE14',61,'VARCHAR2',240,'Y','N'); EXECUTE AD_DD.REGISTER_COLUMN('CUX','CUX_AP_INVOICE','ATTRIBUTE15',62,'VARCHAR2',240,'Y','N');
2.系统中注册说明性弹性域
应用:选择注册的应用
名称:填写注册说明弹性域的名称(必须唯一)
标题:弹性域的标题,在今后的应用中,此说明弹性域将会在窗口标题上显示在此定义的标题内容
表应用:在注册表,列时指定的应用(appl_short_name)
表名: 选择注册的表名称
结构列:必须也是存在于注册过的列,结构列的意义就是存放说明性弹性域上下文提示的值
上下文提示:是在说明性弹性域上下文字段的标题描述
3.FORM中开发弹性域
(1):加入非基表域用于容纳弹性域,我们做一个ITEM叫DF 注意这个ITEM的CLASS属性为 TEXT_ITEM,LOV处选ENABLE_LIST_LAMP,并把检查有效性设为NO。
(2):FORM中要包含所设置的弹性域如ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2…... 注意这些域为基表项,设置CANVANS为NULL或者显示在画布上都可以
(3):把DF放在CANVANS上,弄成弹性域的样子.设置其属性:值列表=ENABLE_LIST_LAMP
(4):在FORM中注册弹性域
为了FORM识别弹性域,在FORM级别的WHEN-NEW_FORM_INSTANCE 上加上如下的代码
从列表中验证=否
fnd_descr_flex.define(
'FLEX_LN', -- form中的block name
field=>'DF', -- form中的弹性域的item name
appl_short_name=>'EDV', -- 注册弹性域在那个user下
desc_flex_name=>'FLEX_LN' -- 注册弹性域的名称
);
具体参数及意思.如下
含有弹性域的BLOCK 叫FLEX_LN
DF 我们命名的那个容纳弹性域的域.
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');
4.系统中启用弹性域
路径 ApplicationDeveloper --> 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: 自定义段结构
设置完成之后注意要冻结弹性域定义并保存