加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

弹性域学习——键弹性域

发布时间:2020-12-15 01:07:16 所属栏目:百科 来源:网络整理
导读:? 键弹性域 键弹性域的开发例子: /***************************在客户化的用户下*******************************/ /* 键应用表 */ create table hek_om_pop_validity_all( ? line_id??????????????????????? number, ? inventory_item_id????????????? num
?

键弹性域

键弹性域的开发例子:
/***************************在客户化的用户下*******************************/
/* 键应用表 */

create table hek_om_pop_validity_all(
? line_id??????????????????????? number,
? inventory_item_id????????????? number,??????

? 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)
);


/* 创建存放键弹性域的结构表 */
CREATE TABLE FLEX_LN_KEY
(
? KEY_FLEX_STRUCTURE_ID? NUMBER,
? KEY_FLEX_ID??????????? NUMBER,
? 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)
);
/* 必须要创建一个与键结构表对应的序列 */
?CREATE SEQUENCE FLEX_LN_KEY_S?? START WITH 1;? --创建存放键弹性域表的对应序列(键弹性域表名+"_S")
?grant all on T_KEY_FLEX to apps;
?grant all on FLEX_LN_KEY to apps;
?grant all on flex_ln_key_s to apps;
?
/***************************在公共用户APPS下*******************************/
conn apps/apps
??
/* 创建同义词 */
?? CREATE SYNONYM FLEX_LN_KEY FOR HEKFLEX_LN_KEY? ;
?? CREATE SYNONYM FLEX_LN_KEY_S FOR HEK.FLEX_LN_KEY_S;
/* 注册键结构表和字段 */
BEGIN
?ad_dd.register_table('HEK','FLEX_LN_KEY','T');
?ad_dd.register_column('HEK','KEY_FLEX_STRUCTURE_ID',1,'NUMBER',38,'Y','N' );
?ad_dd.register_column('HEK','KEY_FLEX_ID',2,'SEGMENT1',3,'VARCHAR2',30,'SEGMENT2',4,'SEGMENT3',5,'SEGMENT4',6,'SEGMENT5',7,'SEGMENT6',8,'SEGMENT7',9,'SEGMENT8',10,'SEGMENT9',11,'SEGMENT10',12,'SEGMENT11',13,'SEGMENT12',14,'SEGMENT13',15,'SEGMENT14',16,'SEGMENT15',17,'N' );
COMMIT;
END;


?

FORM的PRE-FORM:

FND_KEY_FLEX.DEFINE (
BLOCK => 'HEK_OM_POP_VALIDITY_V',-- 操作的BLOCK
FIELD => 'KEY_FLEXITEM',-- 创建的ITEM,用来容纳键弹性域
ID => 'LINE_ID',--保存KEY弹性域的唯一值(block的表)
APPL_SHORT_NAME => 'HEK',
CODE => 'TEST',-- 键弹性域的注册代码 fnd_id_flex_structures.id_flex_code
NUM => '101' --fnd_id_flex_structures.id_flex_num
);

?

KEY_FLEXITEM属性:itemclass - TEST_ITEM,?? LOV选择ENABLE_LIST_LAMP,检查有效性否。

分别在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');


?

注册键弹性域

  ??应用:选择注册的应用
??????? 代码:填写注册键弹性域的CODE(必须唯一,最多四个字符,在调用键弹性域必须使用的值)
??????? 标题:键弹性域的标题,在今后的应用中,此键弹性域将会在窗口标题上显示在此定义的标题内容
??????? 说明:
??????? 表应用:在注册表,列时指定的应用(appl_short_name)
??????? 表名:? 选择注册的表名称
??????? 结构列:必须也是存在于注册过的列,结构列的意义就是存放键弹性域使用的是哪个段结构的代码
??????? 唯一标识列:是记录键弹性域唯一的值,要找到健弹性域的具体含义,必须通过此唯一标识列

定义键弹性域的段结构


?

备注说明:
/******************
键弹性域的数据字典
******************/
SELECT * FROM FND_ID_FLEXS where? id_flex_code='TEST';
SELECT * FROM FND_ID_FLEX_SEGMENTS_TL where? id_flex_code='TEST';
SELECT * FROM FND_ID_FLEX_SEGMENTS WHERE id_flex_code='TEST';
SELECT * FROM Fnd_Id_Flex_Structures where id_flex_code='TEST';
SELECT * FROM FND_ID_FLEX_STRUCTURES_TL? where id_flex_code='TEST';
/*************************
完全删除键弹性域的语法
*************************/
--删除键弹性域的结构段
DELETE FND_ID_FLEX_SEGMENTS_VL WHERE ID_FLEX_CODE = ?;
--删除键弹性域的结构
DELETE FND_ID_FLEX_STRUCTURES_VL WHERE ID_FLEX_CODE = ?;
--删除键弹性注册
DELETE? FND_ID_FLEXS WHERE ID_FLEX_CODE = ?;


?

效果:

?

-----------------------------------------------------------------------------------

补充:

PRE-FORM

?

--会计科目
SELECT chart_of_accounts_id
? INTO :parameter.chart_of_accounts_id
? FROM org_organization_definitions
?WHERE organization_id = :parameter.org_id;

?FND_KEY_FLEX.DEFINE(BLOCK=>'CUX_INV_BCP_GANOH',
??????????????????? FIELD=>'TO_ACCOUNT',
??????????????????? ID=>'TO_ACCOUNT_ID',
??????????????????? APPL_SHORT_NAME=>'SQLGL',
??????????????????? CODE=>'GL#',
??????????????????? NUM=>':PARAMETER.CHART_OF_ACCOUNTS_ID',
??????????????????? VRULE=> 'nSUMMARY_FLAGnInAPPL=SQLGL;NAME=GL_NO_PARENT_SEGMENT_ALLOWEDnNGL_GLOBALnDETAIL_POSTING_ALLOWEDnEnAPPL=INV;NAME=INV_VRULE_POSTINGnN',
??????????????????? USEDBFLDS=> 'N',
??????????????????? VALIDATE=>'FULL',
??????????????????? REQUIRED=>'N');
?FND_KEY_FLEX.UPDATE_DEFINITION(BLOCK=>'CUX_INV_BCP_GANOH',
????? FIELD=>'TO_ACCOUNT',
????? ENABLED=>'N');

?

?

范围弹性域(转)

范围弹性域是使用的键弹性域的一种扩展,其没有专门的弹性注册,全部来源于键弹性域的结构定义:
应用表
CREATE TABLE? FLEX_RANG_LN
?(?
? CONCATENATED_SEGMENTS_LOW?????? VARCHAR2(300),
? CONCATENATED_SEGMENTS_HIGH????? VARCHAR2(300),?
? SEGMENT1_LOW??????????? VARCHAR2(30),
? SEGMENT2_LOW??????????? VARCHAR2(30),
? SEGMENT3_LOW??????????? VARCHAR2(30),
? SEGMENT4_LOW??????????? VARCHAR2(30),
? SEGMENT5_LOW??????????? VARCHAR2(30),
? SEGMENT6_LOW??????????? VARCHAR2(30),
? SEGMENT7_LOW??????????? VARCHAR2(30),
? SEGMENT1_HIGH?????????? VARCHAR2(30),
? SEGMENT2_HIGH?????????? VARCHAR2(30),
? SEGMENT3_HIGH?????????? VARCHAR2(30),
? SEGMENT4_HIGH?????????? VARCHAR2(30),
? SEGMENT5_HIGH?????????? VARCHAR2(30),
? SEGMENT6_HIGH?????????? VARCHAR2(30),
? SEGMENT7_HIGH?????????? VARCHAR2(30)
?) ;
需要说明点:SEGMENTn_LOW和 SEGMENTn_HIGH 是用来存放上,下范围的段,在应用表中必须出现,
CONCATENATED_SEGMENTS_LOW与 CONCATENATED_SEGMENTS_HIGH 也必须成对出现,因为在应用脚本中,需要指定的
?/* 创建同义词 */
?CREATE SYNONYM FLEX_RANG_LN FOR ERP_DEV.FLEX_RANG_LN? ;
??????? FND_RANGE_FLEX.DEFINE(
??????? BLOCK=> 'FLEX_RANG_LN',-- 操作的BLOCK
??????? FIELD=> 'RANGE_FLEX',?? - 创建的ITEM,用来容纳范围弹性域(在FORM界面中无RANGE_FLEX数据项,只有
RANGE_FLEX_LOW与RANGE_FLEX_HIGH数据项)
??????? DATA_FIELD=>'CONCATENATED_SEGMENTS',? --保存范围性域的值(CONCATENATED_SEGMENTS_LOW与
CONCATENATED_SEGMENTS_HIGH的共同段名称)
??????? APPL_SHORT_NAME=> 'EDV',
??????? CODE=> 'K_LN',-- 键弹性域的注册代码 fnd_id_flex_structures.id_flex_code
??????? NUM=> '101',? --fnd_id_flex_structures.id_flex_num??????? DISPLAYABLE=> '!ALL',
??????? UPDATEABLE=> '!ALL',
??????? INSERTABLE=> '!ALL',
??????? ALLOWNULLS=> 'Y');?
使用范围弹性域是不需要任何注册表和字段的,因为其值就保存在应用表中,引用的确实键弹性域的段结构


代码说明: ??????? FIELD=> 'RANGE_FLEX'? 在FORM界面中,不存在RANG_FLEX的项,在此 泛指的是 RANG_FLEX_LOW与 RANG_FLEX_HIGH两个范围性的项,用来加载范围弹性域 ??????? DATA_FIELD=>'CONCATENATED_SEGMENTS' 在FORM界面中,不存在CONCATENATED_SEGMENTS的项,在此 泛指的是 CONCATENATED_SEGMENTS_LOW与CONCATENATED_SEGMENTS _HIGH两个范围性的项,用来存放范围弹性域的组合信息,其中 SEGMENTn_LOW 与 SEGMENTn_HIGH 是存放上下范围的每个段信息,从上图中可以看到记录的存放形式。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读