TEC1304.值集和弹性域相关技术总结 - 第二章 说明性弹性域详解

 

 

第一节   说明性弹性域的概念

说明性弹性域包括两种不同类型的段:全局段上下文相关段

可以决定要在说明性弹性域结构中使用的段。

1)     全局段:是始终显示在说明性弹性域弹出式窗口中的段,它与上下文(表单中的任何其它信息)无关。

2)     上下文相关段:是可能会显示的段,是否显示要取决于表单中的其它信息。

clip_image002


 

第二节   上下文相关段

如果存在上下文相关段,则说明性弹性域需要上下文信息(上下文值)来确定要显示的上下文相关段。说明性弹性域可以从表单上的某个字段,或说明性弹性域弹出式窗口中的特殊字段(上下文字段)中获取上下文信息。如果说明性弹性域从某个表单字段(可能对用户显示,也可能隐藏)中导出上下文信息,则该表单字段称为说明性弹性域的参考字段

在最终用户看来,上下文字段只是自身具有提示的另一个段。但上下文字段与普通弹性域段(全局或上下文相关段)的作用不同。用户将上下文值输入上下文字段后,将会看到不同的上下文相关段,这取决于用户输入的上下文值。也可以定义不同的上下文字段。如果没有适合作为参考字段的表单字段,或者需要用户直接控制显示哪些上下文相关段,则可以使用上下文字段来代替参考字段。

一旦选择了适当的上下文信息,上下文相关段就会随之出现。如果上下文信息是在用户输入说明性弹性域之前从表单字段中导出的,则上下文相关段会立即出现。

对于含上下文相关段的说明性弹性域,一个单一的“结构”由全局段,加上某一特定上下文字段值的上下文相关段组成。也就是说,一个结构包含(在选定此结构后)同时显示在弹出式窗口中的所有段。


 

第三节   段使用基本列的方法

clip_image004

说明性弹性域使用添加至数据库表的列。该数据库表包含实体所需的任何列,如主关键字列和其它信息列。例如,“供应商”表可能包含用于标准供应商信息(如供应商名称、地址和供应商编号)的列。

说明性弹性域列提供了“空白”列,用于存储尚未在该表的其它列中存储的信息。说明性弹性域要求每个可能存在的段都有一列,并且要求有一个用来存储结构信息(即上下文值)的附加列。

只需将单一结构中的段数定义为与表中说明性弹性域段的列数相同。说明性弹性域列通常被命名为ATTRIBUTEn,此处的n是一个数字。

全局段对表中的所有行使用相同的列。一个结构的上下文相关段要使用指定的列,但是不同结构中的上下文相关段可以“重复使用”同一列。

在定义说明性弹性域时,始终应先定义全局段,以确保全局段可以为所有结构“保留”该列。然后,可以使用其它列定义上下文相关段。

请注意,在使用含上下文相关段的说明性弹性域时,如果将现有的上下文值更改为新的上下文值,则该弹性域会自动清除所有上下文相关段的列,并重新默认含默认值的所有段。

clip_image006


 

第四节   参考字段

将一个字段用作参考字段对字段本身并无影响。也就是说,参考字段只是一个普通的Form字段,与弹性域无关,除非定义该弹性域并将其用作参考字段。通常,在Form内建立说明性弹性域时,应用开发员会将Form上的一个或多个字段指定为潜在的参考字段,可以从中决定要使用的参考字段(如果有)。参考字段提供了一种方法,可以将获取的说明性弹性域信息的上下文相关性与业务数据中的现有条件联系在一起。

如果使用参考字段,则该字段的值将填入它本身的列中。例如,如果表单上的参考字段是“国家/地区”字段,则其填入表中的也会是“国家/地区”列(请记住,在选择将其作为参考字段使用之前,参考字段只是一个普通的表单字段)。但是,由于参考字段值指定了弹性域显示的结构,因此该值也会填入表内的结构(上下文)列中。如果在弹性域弹出式窗口中提供了一个上下文字段,则除了使用参考字段之外,参考字段还提供了一个上下文字段的默认值,使用户可以选择不同的上下文值。在这种情况下,参考字段列和结构列可能包含不同的值。如果在没有显示上下文字段的情况下使用参考字段,则两列的值将会相同。不管是否选择在弹出式窗口中显示上下文字段,Form均包含一个具有结构选项的隐藏上下文字段。

所选字段所处的块必须与说明性弹性域所处的块相同。此外,如果说明性弹性域出现在几个不同的窗口或块中,则同一字段必须存在于包含此说明性弹性域的所有块中。您可以使用字段名本身或使用:block.field表示法来指定字段。

通常,您要为参考字段所包含的每个值定义不同的说明性弹性域段结构。虽然您不必为参考字段可能包含的所有值都定义一个结构,但一个包含数千个可能值的字段可能不适合作为参考字段。一般来说,您应该仅使用含相对简短、静态的可能值列表的字段,如仅提供“是”和“否”两种选择,或一个国家/地区列表的字段;而不应使用包含无数个唯一值的字段。通常有特殊业务用途的窗口都会指明哪些字段(如果有)可作为参考字段。


 

第五节   段的不同排列

对于说明性弹性域结构的外观和行为,可以有多种选择。下表显示了段的不同排列,可以通过选择不同的说明性弹性域设置选项来定义这些排列。

Global Segments全局段

No

Context-sensitive Segments上下文相关段

Yes

Override Allowed允许重写

No

Reference Field参考字段

Yes

Default Context Value默认的上下文字段值

OK

“允许重写”选项控制用户能否在弹性域弹出式窗口中看到上下文字段。如果需要在说明性弹性域弹出式窗口中显示上下文字段,应该将“允许重写”设置为“是”。如果不想用户从弹出式窗口中选择结构,应该将“允许重写”设置为“否”。

在这些图中,“确定”意味着无论您为选项指定“是”还是“否”都无关紧要(另一个选项可能具有“重写”作用)。例如,如果您有一个默认的上下文字段值(结构选择),但也有一个上下文字段,则上下文字段中会显示默认值,但用户可以选择另一个值。

1.     一个结构

方法一,定义弹性域最简单的方式是创建一个仅包含全局段的结构。但是,如果将所有可用列用于全局段,则没有剩余的列供上下文相关段使用,因此,这种排列将来便不会有太大的灵活性。

clip_image008

方法二,获得类似效果的另一种方式,就是定义一个仅包含上下文相关段的单个结构。也要定义一个默认的上下文值,并且不提供上下文字段或参考字段。此设置的结果是用户始终看到相同的段结构,以便使该段从行为方式来看就好象是全局段的结构。但是,如果以后需要添加更多的上下文相关段结构,就需要通过启用上下文字段或参考字段、禁用默认的上下文字段值和定义新的上下文相关段结构来做到这一点。请注意,如果在第一个上下文相关结构中已使用了所有的可用段列,将无法将更多的段添加至该结构;只能定义附加结构。仅使用上下文相关段这一策略的一个缺陷就是,如果所有上下文(所有结构)的某些段应该显示,则必须为每一个上下文相关结构分别定义那些段。

clip_image010

方法三,最初可以定义一个混合结构,它包括一些全局段和一些上下文相关段,但只有一个具有默认上下文字段值(但没有上下文字段或参考字段)的上下文相关结构。

clip_image012

2.     多个结构

一旦确定需要多个(上下文相关)结构,则对于如何排列全局段和(或)上下文相关段、参考字段或非参考字段、上下文字段或非上下文字段等的各种组合,您有多种选择。下图显示这些不同排列(适用于使用了两个上下文相关结构的设置)。

clip_image014clip_image016

clip_image018clip_image020


 

第六节   FORM开发说明性弹性域详解

要定义说明性弹性域,需要定义构成说明性弹性域结构的段,以及结构中每个段的说明性信息和验证信息。还要确定说明性弹性域窗口的外观,包括窗口的大小、段的数目和顺序以及段说明和段默认值。单一结构内可包含的最大段数取决于要定义的说明性弹性域。

要在应用中充分利用说明性弹性域的弹性和强大功能,必须定义弹性域结构。如果没有定义任何说明性弹性域段,则不能使用窗口中的说明性弹性域,但不会影响其它功能。

一旦定义或更改了弹性域,必须冻结弹性域定义并保存所作的更改。此时,Oracle Applications会自动编译弹性域以提高联机性能。

一旦冻结了弹性域定义并保存了所作的更改,Oracle Applications会提交一个并发请求,用于为包含弹性域段列的表生成一个数据库视图。可以使用这些视图开发自定义报表。请参阅:弹性域视图概览。

在冻结并重新编译弹性域之后,可以看到弹性域会立即发生变化。但是,这些更改不会影响其他用户,除非他们更改责任或退出正在使用的应用产品并重新登录。

1.     调用EBS标准过程注册使用的表,这里使用之前第二章第三节注册过的表;

2.     注册弹性域,使用“应用开发员”职责登录EBS,菜单:弹性域->说明性->注册

这里名称一般和表名一致,标题会显示在弹出窗口的边框上,选择好结构列后保存:

clip_image022

保存后,点击“列”按钮,可以看到系统自动启用了所有的Attribute字段。

3.     Form中使用弹性域

在块中手工创建一个字段,名字通常叫DESC_FLEX,是非数据库项,子类为TEXT-ITEM-DESC-FLEXPrompt为一对大括号,布局时通常放在最后,但不随滚动条滚动:

clip_image024

clip_image026 clip_image028

添加From级触发器:

触发器

代码

WHEN-NEW-FORM-INSTANCE

Fnd_descr_flex.define(BLOCK                 => ‘ORDER_HEADERS’

Field                    =>‘DESC_FLEX’

Appl_short_name =>‘ONT’

Desc_flex_name   =>‘CUX_ORDER_HEADERS_ALL’ );

添加Block级触发器:

触发器

代码

PRE-INSERT

fnd_flex.event('PRE-INSERT');

PRE-UPDATE

fnd_flex.event('PRE-UPDATE');

PRE-QUERY

fnd_flex.event('PRE-QUERY');

POST-QUERY

fnd_flex.event('POST-QUERY');

WHEN-VALIDATE-RECORD

fnd_flex.event('WHEN-VALIDATE-RECORD');

注:可以把这些触发器写在Form级,这样不需要每个块都写,不过如果为了其它功能在块级写了同名触发器,执行层次需要改为Before

添加Item级触发器:

触发器

代码

WHEN-NEW-ITEM-INSTANCE

fnd_flex.event('WHEN-NEW-ITEM-INSTANCE');

WHEN-VALIDATE-ITEM

fnd_flex.event('WHEN-VALIDATE-ITEM');

注:可以把这些触发器写在Form级,这样不需要每个Item都写,不过如果为了其它功能在块级写了同名触发器,执行层次需要改为Before

4.     启用弹性域

注册弹性域,使用“应用开发员”职责登录EBS,菜单:弹性域->说明性->

clip_image030

5.     上传+编译

clip_image032



版权声明:本文为DeepSea_Allen原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。