FORM开发之键性弹性域开发
1.创建表时带有键弹性域字段
SUMMARY_FLAG VARCHAR2(1) , /* 必须有此字段 */
ENABLED_FLAG VARCHAR2(1) , /* 必须有此字段 */
START_DATE_ACTIVE DATE , /* 必须有此字段 */
END_DATE_ACTIVE DATE , /* 必须有此字段 */
LAST_UPDATED_BY NUMBER , /* 必须有此字段 */
LAST_UPDATE_DATE DATE , /* 必须有此字段 */
SEGMENT1 VARCHAR2(30) ,
SEGMENT2 VARCHAR2(30) ,
SEGMENT3 VARCHAR2(30) ,
SEGMENT4 VARCHAR2(30) ,
SEGMENT5 VARCHAR2(30) ,
SEGMENT6 VARCHAR2(30) ,
SEGMENT7 VARCHAR2(30) ,
SEGMENT8 VARCHAR2(30) ,
SEGMENT9 VARCHAR2(30) ,
SEGMENT10 VARCHAR2(30) ,
SEGMENT11 VARCHAR2(30) ,
SEGMENT12 VARCHAR2(30) ,
SEGMENT13 VARCHAR2(30) ,
SEGMENT14 VARCHAR2(30) ,
SEGMENT15 VARCHAR2(30)
2.注册表和列
注册表
execute ad_dd.register_table('EDV', 'FLEX_LN_KEY', 'T');
注册列
execute ad_dd.register_column('EDV', 'FLEX_LN_KEY', 'KEY_FLEX_STRUCTURE_ID', 1, 'NUMBER', 38, 'Y','N' );
execute ad_dd.register_column('EDV', 'FLEX_LN_KEY', 'KEY_FLEX_ID', 2, 'NUMBER', 38, 'Y', 'N' );
execute ad_dd.register_column('EDV', 'FLEX_LN_KEY', 'SEGMENT1', 3, 'VARCHAR2', 30, 'Y', 'N' );
execute ad_dd.register_column('EDV', 'FLEX_LN_KEY', 'SEGMENT2', 4, 'VARCHAR2', 30, 'Y', 'N' );
execute ad_dd.register_column('EDV', 'FLEX_LN_KEY', 'SEGMENT3', 5, 'VARCHAR2', 30, 'Y', 'N' );
execute ad_dd.register_column('EDV', 'FLEX_LN_KEY', 'SEGMENT4', 6, 'VARCHAR2', 30, 'Y', 'N' );
execute ad_dd.register_column('EDV', 'FLEX_LN_KEY', 'SEGMENT5', 7, 'VARCHAR2', 30, 'Y', 'N' );
3.FORM中开发弹性域
(1)创建ITEM,可参考我的FORM开发之说明性弹性域开发
加入非基表域用于容纳弹性域,我们做一个ITEM叫KEY_FLEXITEM
注意这个ITEM的CLASS属性为TEXT_ITEM, LOV处选择ENABLE_LIST_LAMP,并把检查有效性设为NO。
(2)在when-new-form-instance中注册弹性域
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 );
(3)分别在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');