首页 > 如何在Form中使用键弹性域(Key Flexfield)

如何在Form中使用键弹性域(Key Flexfield)

在应用弹性域之前必须先定义弹性域,定义之前必须先注册表列。如果你的弹性域已经在Oracle Application Object Library中已经定义和注册了,并且弹性域表和列已经在数据库中存在,则忽略1、2、3步骤,适用于关键性也适用于描述性弹性域。

1.建立相关的数据库表结构、注册表列

关键弹性域COMBINATIONS表必须包括这几个部分:

(1)唯一的ID列

(2)KEY段,SEGMENT1、SEGMENT2、、、SEGMENTn

(3)ENABLED_FLAG和SUMMARY_FLAG列

(4)START_DATE_ACTIVE和END_DATE_ACTIVE列

(5)一些WHO列

(6)结构ID列

(7)一个序列,名为“表名_S”

/***************************在客户化的用户下*******************************/
/* 键应用表 */
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 HEK.FLEX_LN_KEY  ;CREATE SYNONYM FLEX_LN_KEY_S FOR HEK.FLEX_LN_KEY_S;/* 注册键结构表和字段 */ 
BEGINad_dd.register_table('HEK', 'FLEX_LN_KEY', 'T');ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'KEY_FLEX_STRUCTURE_ID', 1, 'NUMBER', 38, 'Y','N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'KEY_FLEX_ID', 2, 'NUMBER', 38, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT1', 3, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT2', 4, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT3', 5, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT4', 6, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT5', 7, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT6', 8, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT7', 9, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT8', 10, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT9', 11, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT10',12, 'VARCHAR2', 30, 'Y', 'N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT11', 13, 'VARCHAR2', 30, 'Y','N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT12', 14, 'VARCHAR2', 30, 'Y','N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT13', 15, 'VARCHAR2', 30, 'Y','N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT14', 16, 'VARCHAR2', 30, 'Y','N' );ad_dd.register_column('HEK', 'FLEX_LN_KEY', 'SEGMENT15',17, 'VARCHAR2', 30, 'Y', 'N' );
COMMIT;
END;

 2.定义键弹性域

进入应用开发员--弹性域--(说明性/键)--注册可新定义一个弹性域

如图所示,只有在步骤1中已注册的Table,Colummn在定义弹性域时才能被选到。

对于同种类型的弹性域,每一个基表应只定义一个,但是一个弹性域可对应多个Structure。

在Form中启用弹性域时,可利用代码指定此弹性域使用的Structure。

应用:选择注册的应用

代码:填写注册键弹性域的CODE(必须唯一,最多四个字符,在调用键弹性域必须使用的值

标题:键弹性域的标题,在今后的应用中,此键弹性域将会在窗口标题上显示在此定义的标题内容

说明:

表应用:在注册表,列时指定的应用(appl_short_name)

表名:  选择注册的表名称

结构列:必须也是存在于注册过的列,结构列的意义就是存放键弹性域使用的是哪个段结构的代码

唯一标识列:是记录键弹性域唯一的值,要找到健弹性域的具体含义,必须通过此唯一标识列

3.定义键弹性域的段结构

4.在Form中启用弹性域:

(4.1)添加对应的弹性域字段

一般在基表对应的Block下面新建对应的弹性域字段,相关的外观设置可参考Oracle标准系统。

(4.1.1)创建隐藏字段

隐藏弹性域字段是作为从数据库表(或者视图)创建默认form block的一部分。在弹性域字段的canvas属性上设置为Null(这样它们就不会出现在canvas上)

注意:你不应该为隐藏字段写逻辑来直接为这些字段设值。因为弹性域会跟踪是否一个记录正被插入,更新,通过任意方法为这些字段设置值而不是弹性域本身(或者从数据库中查询)的话可能会引起错误和数据错误。

(4.1.2)创建显示字段

创建你的连接分段字段为2000字符的显示的,非数据库文本字段KEY_FLEXITEM,其属性:

Property                   Value  

List of Values            ENABLE_LIST_LAMP  

Database Item          No

(4.2)添加必要的触发器

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

(4.3)代码定义弹性域字段

在FORM级触发器PRE-FORM内定义键弹性域:

beginfnd_key_flex.define(block           => 'HEK_OM_POP_VALIDITY_V', -- 键弹性域所在的BLOCKfield           => 'KEY_FLEXITEM', -- 键弹性域所在的BLOCK上创建的ITEM,用来容纳键弹性域组合id              => 'LINE_ID', -- 键弹性域所在的BLOCK上创建的ITEM,保存KEY弹性域的唯一值(block的表)appl_short_name => 'HEK',  code            => 'TEST', -- 键弹性域的注册代码 fnd_id_flex_structures.id_flex_codenum             => '101' -- fnd_id_flex_structures.id_flex_num
                      );
end;

 5.补充

(5.1)定义会计科目键弹性域

begin--会计科目select chart_of_accounts_idinto :parameter.chart_of_accounts_idfrom org_organization_definitionswhere 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_FLAG\nI\nAPPL=SQLGL;NAME=GL_NO_PARENT_SEGMENT_ALLOWED\nN\0GL_GLOBAL\nDETAIL_POSTING_ALLOWED\nE\nAPPL=INV;NAME=INV_VRULE_POSTING\nN',usedbflds       => 'N',validate        => 'FULL',required        => 'N');fnd_key_flex.update_definition(block   => 'CUX_INV_BCP_GANOH',field   => 'TO_ACCOUNT',enabled => 'N');
end;

 

转载于:https://www.cnblogs.com/lynnwang/p/4417656.html

更多相关:

  • 前言 近期在做on nvme hash引擎相关的事情,对于非全序的数据集的存储需求,相比于我们传统的LSM或者B-tree的数据结构来说 能够减少很多维护全序上的计算/存储资源。当然我们要保证hash场景下的高写入能力,append-only 还是比较友好的选择。 像 Riak的bitcask 基于索引都在内存的hash引擎这种,...

  • 前言 最近在读 MyRocks 存储引擎2020年的论文,因为这个存储引擎是在Rocksdb之上进行封装的,并且作为Facebook 内部MySQL的底层引擎,用来解决Innodb的空间利用率低下 和 压缩效率低下的问题。而且MyRocks 在接入他们UDB 之后成功达成了他们的目标:将以万为单位的服务器集群server个数缩减了一...

  • 参考自:  https://www.cnblogs.com/zeng1994/p/03303c805731afc9aa9c60dbbd32a323.html 1、maven依赖

    springboot redis配置

    1、引入maven依赖 org.springframework.bootspring-boot-starter-data-redis   2、redis连接配置 spring:redis:h...

  • json 键值对增加、删除 obj.key='value'; // obj.key=obj[key]=eval("obj."+key); delete obj.key; vue中新增和删除属性 this.$set(object,key,value) this.$delete( object, key ) 触发视图更新 遍历键值 for...