弹性域分成键弹性域、说明性弹性域。这两种弹性域用途是不一样的。关键性弹性域:在使用KEY弹性域的基表中,只保存ID。但可以通ID查询到相应的SEGMENT。在表结构中表现为***_ID、SEGMENT1等。说明性弹性域:针对特定用户扩展输入特定信息的字段。在表结构中表现为attribute_category、attribute1字段等。注册说明性弹性域一、弹性域开发中需要做的前期工作1.注册一个可以使用弹性域的表,字段例子以如下表为基础,进行弹性域的说明createtablehek_om_pop_validity_all(line_idnumber,inventory_item_idnumber,--物料编号189number_of_daynumber,--天数start_datedate,--开始日期end_datedate,--结束日期--=================扩展字段================================created_bynumber,creation_datedate,last_updated_bynumber,last_update_datedate,last_update_loginnumber,org_idnumber,attribute_categoryvarchar2(30),attribute1varchar2(50),attribute2varchar2(50),attribute3varchar2(50),attribute4varchar2(150),attribute5varchar2(150));注册数据库表,列系统中的数据库表和列的注册旨在支持系统的弹性域和预警系统两个特性如果不需要这些特性不需要注册表.注册方法:用如下的过程注册表:AD_DD.register_table(p_appl_short_nameinvarchar2,p_tab_nameinvarchar2,p_tab_typeinvarchar2,p_next_extentinnumberdefault512,p_pct_freeinnumberdefault10,p_pct_usedinnumberdefault70);2.注册表HEK_OM_POP_VALIDITY_ALL:beginad_dd.register_table('HEK','HEK_OM_POP_VALIDITY_ALL','T');--说明:HEK为新应用简称。(可新注册需要的简称)commit;end;3.注册表中的列(弹性域列):beginad_dd.register_column('HEK','HEK_OM_POP_VALIDITY_ALL','ATTRIBUTE1',1,'VARCHAR2',50,'N','N');ad_dd.register_column('HEK','HEK_OM_POP_VALIDITY_ALL','ATTRIBUTE2',2,'VARCHAR2',50,'N','N');ad_dd.register_column('HEK','HEK_OM_POP_VALIDITY_ALL','ATTRIBUTE3',3,'VARCHAR2',50,'N','N');ad_dd.register_column('HEK','HEK_OM_POP_VALIDITY_ALL','ATTRIBUTE4',4,'VARCHAR2',150,'N','N');ad_dd.register_column('HEK','HEK_OM_POP_VALIDITY_ALL','ATTRIBUTE_CATEGORY',5,'VARCHAR2',30,'N','N');COMMIT;end;4.查看是否注册成功:selectft.table_idfromFND_TABLESftwhereft.table_name='HEK_OM_POP_VALIDITY_ALL';TABLE_ID----------------90060select*fromFND_COLUMNSfcwherefc.table_idin(selectft.table_idfromFND_TABLESftwhereft.table_name='HEK_OM_POP_VALIDITY_ALL');5.如果想删除注册可以引用下面的相应的过程.proceduredelete_table(p_appl_short_nameinvarchar2,p_tab_nameinvarchar2);proceduredelete_column(p_appl_short_nameinvarchar2,p_tab_nameinvarchar2,p_col_nameinvarchar2);6.注册弹性域列路径::应用开发员=弹性域=说明性=注册应用:选择注册的应用名称:填写注册说明弹性域的名称(必须唯一)标题:弹性域的标题,在今后的应用中,此说明弹性域将会在窗口标题上显示在此定义的标题内容说明:表应用:在注册表,列时指定的应用(appl_short_name)表名:选择注册的表名称结构列:必须也是存在于注册过的列,结构列的意义就是存放说明性弹性域上下文提示的值上下文提示:是在说明性弹性域上下文字段的标题描述上面的界面是输入界面,系统提供输入,这里可以输入多个记录,当然最终只能有一个字段来起作用,需要在段里指定。字段名:必须与弹性域中选择的表中的字段一致。说明:对字段的描述性文字参考字段的含义:参考字段的主要作用是与结构列的作用类似,可以在不选择上下文字段的情况下,系统根据参考字段的含义来对应显示不用的弹性域,举例说明:例如参考字段为NAME,则在系统中输入NAME信息后,系统会自动根据NAME的信息来确定显示什么样的弹性域,这样就可以避免来选择上下文来显示需要的弹性域。这里面显示的是注册后的列字段(如果填写了结构列字段,则这里面将不在显示结构列字段,因为系统认为结构列字段与弹性字段是不同的)如果对某个弹性字段不需要,可以将起用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中使用了的字段7.启用说明性弹性域7.1先按将相应的FORM开发好,然后在FORM级的以下TRIGGER(BLOCK级)中加入PRE-QUERY:FND_FLEX.EVENT('PRE-QUERY');POST-QUERY:FND_FLEX.EVENT('POST-QUERY');PRE-INSERT:FND_FLEX.EVENT('PRE-INSERT');PRE-UPDATE:FND_FLEX.EVENT('PRE-UPDATE');WHEN-VALIDATE-ITEM:FND_FLEX.EVENT('WHEN-VALIDATE-ITEM');WHEN-VALIDATE-RECORD:FND_FLEX.EVENT('WHEN-VALIDATE-RECORD');7.2在PRE-FORM的TRIGGER中加入fnd_descr_flex.define(BLOCK='HEK_OM_POP_VALIDITY',FIELD='DESC_FLEX',APPL_SHORT_NAME='HEK',DESC_FLEX_NAME='HEK_OM_POP_VALIDITY_ALL');说明一下相应参数:BLOCK:指启用弹性域的数据块名FIELD:指后面新增的ITEMAPPL_SHORT_NAME:指相应模块的简称(系统管理员-应用-注册)DESC_FLEX_NAME:指注册弹性域时的名称8.在要启用弹性域的数据块中增加一个ITEM。名称为:DESC_FLEX。8.1DESC_FLEX属性设置如下:子类信息:TEXT_ITEM_DESC_FLEX数据库项:否画布:MAIN_C8.2在DESC_FLEX项的以下trigger中加入:WHEN-VALIDATE-ITEM:FND_FLEX.EVENT('WHEN-VALIDATE-ITEM');WHEN-NEW-ITEM-INSTANCE:FND_FLEX.EVENT('WHEN-NEW-ITEM-INSTANCE');9.完成效果:addbyguozhenbin20100421目标:在2%销售订单(退货单)上的订单行中增加一个弹性域,记录补货编号。1.在销售单上的行上查找是否已经存在弹性域。2.在应用开发员-弹性域查找:3.查找相关段信息其中“参考字段”是指以这个字段的值来决定显示哪种弹性域。例如:当订单行类型为“24-常态搭赠退货”的时候,显示弹性域1,订单行类型为“25-非常搭赠退货”时,显示弹性域2。4.设置“参考字段”为什么值的时候,显示什么弹性域。例如:行类型“24-常态搭赠退货”将显示两个弹性域“受益产品”“补货行号”。5.编辑相关的值集6.最终效果:结构列一般为ATTRIBUTE_CATEGORY或者CONTEXT列,在注册DiscriptiveFlexfield时指定AttributeN外还要指定Structure字段。一个DiscriptiveFlexfield可以多种Structure,每种Structure的Segment构成、排序各不相同。(图1-弹性域注册)上下文字段上下文字段弹性域字段的一种,对应结构列TTRIBUTE_CATEGORY。(图2)在上下文字段区域可以设置该字段的提示,值集和默认值,它的每一个值都对应一种弹性域结构(注意:GlobalDataElements不受上下文字段值影响,在任何结构中都显示)。如果勾选‘显示’它会出现在Form弹性域窗口中,用户可选择值集的某一个值,选择不同的值,可动态改变弹性域结构。(图2-弹性域定义)参考字段到这里,已经可以利用弹性域窗口中上下文字段的值来改变弹性域的结构,但是我们希望将弹性域结构的灵活性与业务联系起来,而不是每次由用户自己选择一个上下文字段值来取得相应的结构,如:当FORM上PO的类型不同时,用不同的弹性域段来输入信息。此时就用到了参考字段。(图3-参考字段)参考字段是弹性域所对应的Form界面上的Block的某一个字段:block.field格式也可以是field。当上下文字段设定参考字段后,它的取值就引用该:block.field的值,如在PO头上使用:headers.type_lookup_code