Flexfield学习研究心得

上传人:无*** 文档编号:46353366 上传时间:2021-12-12 格式:DOC 页数:17 大小:1.56MB
返回 下载 相关 举报
Flexfield学习研究心得_第1页
第1页 / 共17页
Flexfield学习研究心得_第2页
第2页 / 共17页
Flexfield学习研究心得_第3页
第3页 / 共17页
点击查看更多>>
资源描述
陈震南 Email: makemydaywo MSN: makemydaywo QQ: 31505614 这半个月来一直在学习设置EBS的设置,越来越觉得这其中环环相扣,博大精深。但就这其中一个Flexfield概念就值得琢磨半天,结合前一阵子的开发经验,我也来谈谈对Flexfield的认识。1. Flexfield的绑定表结构(皮之不存,毛将焉附) 刚开始接触Oracle Application ,看到某些表包括多达数个,十数个甚至是数十个ArributeN,SegementN的字段,总感到疑惑不解,觉得很多表这些字段很多都是空的,真是浪费空间。而这些特殊的表,实际上叫做Combination Table ,正是这些特殊的字段支持了Oracle ERP的弹性,可以说没有这些特殊的字段,Oracle ERP的通用性将会极大地下降。 对于熟悉数据库和程序开发的人员来说,理解Flexfield可能更直观深刻一些,对于其它人员来说,了解一下Combination Table的结构对理解Flexfield有百利而无一害。Who字段Col1Col2Atr1AtrNSeg1SegNSeg_Atr1Seg_AtrN也是Oracle表的一大特点,记录跟踪信息。表基本字段(正常字段)Attribute 字段,常与descriptive flexfield 配合使用 Segment 字段,常与key flexfield 配合使用具体我说不清楚,感觉就像Col对应Atr字段,Seg也可对应Seg_Atr字段 表 1.1上表是Combination Table的基本结构,这个例子的结构相对完整并且复杂,实际应用中可能某个Combination Table仅包括这些特殊列的一部分或者几部分。即使我们在其他数据库平台下构建一种可扩展,可重用,柔性高的应用系统,这种结构无疑具有很高的借鉴与启迪作用。至于这些字段是如何与FlexFlied相结合的,在后面会具体说明。2. Flexfield的相关概念 Flexfield中有几个相关的概念,我们先来了解下。Structure,Segment,Value Set ,一个Flexfield可以拥有多个Structure,这就好像一种物料,企业A会用三个字段去限定,而企业B却会用到四个字段。每个Structure又会拥有多个Segment,把Segment看作sub-field也好,看成属性也好,反正按照“用到什么就选什么”的原则就好。有Segment就会有Segment Value,一个 Segment可以取什么类型的值,什么范围的值,甚至精确到可以取那些值,这都可以交给Value Set,我觉得Value Set既是Value的容器,又是Value校验器(格式,范围等)。 这些概念的联系为:一个Flexfield可以对应多个Structure,每个Structure由不同排列或不同内容的Segment组成,每个Segment又会与一个Value Set相关联,这个Value Set中存放了这个Segment的可选取值,见下图。 图 2.1需要进一步说明的是,Value Set并不是Segment私有的,一个Value Set可以被任意多个Flexfield 的任意多个Segment共享,当然其容纳的可选Value也被共享。由上面的联系也可以推断出在Flexfield设置的一般步骤:第一步是先设Value Set;第二步设Flexfield的Structure,选择需要的Segment并且关联到上步设置的Value Set;最后一步是设置Value Set容纳的Value,另一种设法是到各个Segment下去设Value,它们会自动关联到Segment对应的Value Set下。我请教过同事,她说有一种情况,当Segment不需要可选值列表时(List of Type: None),可以不关联Value Set,系统会将它关联到默认的Non-Validated Value Set,使用时用手工输入的方式为该Segment赋值,只要输入的值不违反格式要求就行。3. Key Flexfields关于Descriptive和Key Flexfield之间的区别以及使用Flexfield的优点我不做赘述了,我想谈谈Key Flexfield的用法,设置及后台存储结构等。顾名思义,Key Flexfields就是要定义一个Entity的Key,而且这个Entity需要多个键值才能唯一的确定,Key Flexfields中的每一个Segment就对应着其中的一个键。这就很像数据库中联合主键的概念。每一个Key Flexfields都需要一个Combination Table,可参看第一节所示的结构。Oracle文档中根据使用Key Flexfields情况的不同将应用Key Flexfields的Form分为3类:Combination Form ,Foreign key Form,Range Form。个人认为,这种分类依据恰恰反映了不同类别的Form依赖了不同类别的Combination Table。首先来看Combination Form,我们先明确几个概念,Combination Table,Form Table(此处是我为了表达需要创建的名字,表示应用Key Flexfield的那个字段所在的数据库基表),下图表明Combination Form的Combination Table和Form Table是同一个Table。假如这个Form用来维护零件信息,我们在此创建了一条记录,那就意味着我们添加了一条唯一的零件信息,使用Key Flexfield填写的各Segment的Value都存入了该表的Segment Column中,另外系统还会产生一个唯一的ID存入Unique ID列中,等于是用单一的主键代替联合主键唯一的标识了一个零件。Structure ID标识该记录对应此前设置的该Key Flexfield的哪个Structure。 图 3.1Foreign key Form就不一样了,Combination Table和Form Table各不相同,其中Form Table中有一个特殊的外键字段引用了Combination Table的主键字段,Unique ID。图 3.2在Form中输入了那么多Segment的值,大部分都存入了Combination Table中。只有Unique ID的值被两个表同时记录。第三类是Range Form,这种Form使用的Combination Table比较特殊,配合了一对FlexFiled使用,Combination Table设置structure id和多个segment N_LOW、segment N_HIGH字段,多用于报表输出,具体设置我还不是很清楚。图 3.3下面就结合一个设置Key FlexField(Foreign key Form)的例子来看看使用要点。Step 1 Register假设已经定义并创建了Key FlexField的Combination Table,那么第一步的工作就是在系统中注册一个Key FlexField图 3.4NameDescriptionApplication没什么好说的CodeCode在Form代码里经常被引用来指定FlexFieldTitle就像一个犯人编号07573,它的名字叫李二黑Table Name指定的Combination Table Unique ID ColumnCombination Table Unique ID列Structure ColumnCombination Table Structure ID列KFV View Name下文说明Dynamic Insert Feasible 下文说明Allow ID Value Setswhether to allow values sets that use a hidden ID in your flexfield.Qualifiers下文说明Column下图说明表 3.1点击column按钮,出现图3.4所示窗口,显示的Combination Table中可储存FlexField Segment值的可选列,只有Enable的Column在随后的设置中才会被关联。 图 3.4Step 2 定义Value Set接下来我设置了一个名为SCF_GL_ACCFLXFLD_ACCOUNT 的Value Set 图 3.5NameDescriptionList of TypePoplist200SecurityNo Security 不应用安全验证 Hierarchical Security 应用级联的安全验证 父Value的安全特性绑定到子Value Non-Hierarchical Security非级联的安全验证,不绑定。Format Type格式类型:字符,日期,数字等等Maximum Size最大长度 (负号和小数点也算长度)Precision精度,小数点后面的位数Numbers OnlyCombination Table Structure ID列Uppercase全部大写,小写的字符自动转成大写Right-justify and Zero-fill Numbers 右对齐和自动补零Min Value最小值 当Maximum Size=5 Precision=2时Max Value最大值 Min Value=-9.99 Max Value=99.99Validation TypeIndependent,Dependent,Table,None等;Dependent时后面的Edit Information 按钮激活表 3.2定义完之后,可以立即对该Value Set进行修改,但是一旦该Value Set或者该Value Set的值被其他对象关联或引用的话(关联安全规则,值被使用,制定到某个参数等),那么就不能轻易地对其修改,即使确实要修改也要非常谨慎,做好备份。一个定义好的Value Set,有些属性是不能被修改的入Format Type,Precision等,其他属性如Maximum Size修改起来要慎重,因为它会对此前插入的数据产生影响。Step 3 设置Structure图 3.6NameDescriptionView Name没搞明白,大伙告诉我Freeze Flexfield Definition冻住,好像选中了就不能修改了,修改完后要重新编译,下文说明。Enabled激活Segment Separator分隔符Cross-Validate Segment下文说明Freeze RollupGroups好像GL里有用到,还不很明白Allow Dynamic Inserts允许动态插入,下文说明表 3.3 一旦完成Structure或者Segment的设置,需要Freeze Flexfield Definition复选框,系统对你做的设置进行编译并保存。以后当你在该窗体作了任何的修改或是在Shorthand Aliases 窗体激活或禁用shorthand entry,都需要到这个窗体重编译,使你的修改即时生效,需要注意的是即时生效仅仅对于你当前用户来说。对于其他的用户,你所做的变动在他们改变Responsibility或重新登录系统后生效。 谈到Allow Dynamic Inserts,这个比较有意思,还记得图3.4中有个Dynamic Insert Feasible复选框吗?可行和允许好像还是递进的关系。联系本节开头所讲的Combination Table的概念,究竟什么样的Key Flexfield需要设置Allow Dynamic Inserts,答案是Foreign key Form中的Key Flexfield才需要。这个属性的具体含义是,是否能在Form Table插入一条记录的时候,Combination Table也同时生成一条记录对应Form Table的记录。比如在采购窗体中录入某个物品时发现该物品在原物品表中未定义,常规的做法是打开物品定义的窗体先定义该物品,然后回到采购窗体中录入该物品;Allow Dynamic Inserts选中使得用户可以在采购窗体中利用Key Flexfield录入了一个新物品,同时在Combination Table生成物品记录,使得Form Table中的子项能找到Combination Table中的父项。并不是所有的Key Flexfield都可以使用Allow Dynamic Inserts,这和Combination Table的Column设置有很大的关系,详细内容请查阅 user guide,下图揭示了Allow Dynamic Inserts的底层联系。图 3.7图 3.8NameDescriptionNumber不允许重复Name略Window Prompt使用Flexfield对应Segment的提示Column对应的Combination Table的字段Value Set 关联的Value SetFlexfield Qualifers见图3.9Open见图3.10表 3.4接下来是设置Structure的各个Segment,如图3.8所示。点击图3.8中Flexfield Qualifers 按钮,会出现图3.9所示窗体。在EBS中,我设置了好几个Flexfield,有的不需要此处进行设置,有些就必须设置,就像下图中Segment Account 就必须对上Flexfield Qualifers中的NaturalAccount Segment,记得GL Accounting Flexfield的设置中,成本中心,自然帐户段,平衡段是必设的,另外两个不是必须的,个人认为这和Flexfield Qualifer的定义有关,关于Flexfield Qualifer,在第五节中还会进一步谈到。图 3.9图 3.10ValidationDefault Type缺省类型Default Value缺省值Required 是否必须输入Security Enabled激活安全性Range取值范围SizesDisplay Size加入Display SizeLINES,FIELD=ACCTG_FLEX_VALUES,ID=GL_ACCOUNT_CC_ID,APPL_SHORT_NAME=SQLGL,CODE=GL#,NUM=101);FND_DESCR_FLEX.DEFINE(BLOCK=ORDERS,FIELD=DESC_FLEX,APPL_SHORT_NAME=DEM,DESC_FLEX_NAME=DEM_ORDERS);这种区别和不同类型Flexfield的定义方法有关。 此外在Form-level的下列trigger中,加入后面的函数。如果在block/item-level 上override了这些trigger,在处理代码中也要加上后面的函数。Block/ item-level的 POST-QUERY trigger,Execution Hierarchy After。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-VALIDATERECORD FND_FLEX.EVENT(WHEN-VALIDATE-RECORD);WHEN-NEW-ITEMINSTANCE FND_FLEX.EVENT(WHEN-NEW-ITEMINSTANCE);WHEN-VALIDATE-ITEM FND_FLEX.EVENT(WHEN-VALIDATE-ITEM); 另外TEMPLATE form在下列form-level triggers调用的APP_STANDARD.EVENT 过程直接调用了FND_FLEX函数。如果在block/item-level 上override了这些trigger,在处理代码中加上后面的函数。 KEY-EDIT APP_STANDARD.EVENT(KEY-EDIT);KEY-LISTVAL APP_STANDARD.EVENT(KEY-LISTVAL);POST-FORM APP_STANDARD.EVENT(POST-FORM); Step 1的内容也可以放到最后一步完成。17
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!