EBS OAF开发中的弹性域(Flexfields)(二)--关键性弹性域及其它

EBS OAF开发中的弹性域(Flexfields)(二)--关键性弹性域及其它

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处;否则请与本人联系,违者必究)

关键性弹性域

关键性弹性域在OAF中实现为类.

oracle.apps.fnd.framework.webui.beans.OAKeyFlexBean

一个OAKeyFlexBean自动生成用于分段值录入的布局。因为关键性弹性域没有上下文字段,对于特定的结构编码所有的分段都会生成。

每个关键性弹性域都有一个相应的表,被称为组合表,用于存储所有编码的列表(编码的每个分段都有一列),以及相应的唯一ID编号(编码组合或者CCID)。潜在视图对象包含一个引用组合表的页面被称为”外键页”,而潜在实体对象使用组合表的页面被称为”组合页”或者”维护页”.

注意: OAKeyFlexBean目前仅支持”外键页”.

附加信息:更多关于CCID的资料,参考第二章的”组合”和”动态插入” ("Planningand Defining Key Flexfields") of the Oracle ApplicationsFlexfields Guide Release 12.也可以参考"Flexfields" chapter of the Oracle E-Business Suite Developer‘s Guide.

当你添加OAKeyFlexBean到你的页面,它:

l  显示弹性域分段用于输入或者更新,或者从相应的视图对象为弹性域分段设置数据库值。

l  验证弹性域分段的输入值,且如果这样的组合已经存在,使用当前组合的CCID来更新视图对象.如果这样的组合不存在,将会插入一个新的CCID行到组合表。

l  自动使用CCID来更新视图对象的CCID属性,这样如果没有错误,调用页面可以访问这些值。如果有错误,OAF框架会重画页面并显示错误消息。

表中的关键弹性域UI

当弹性域显示在表中时,连接字符串的描述也会显示在表中

EBS OAF开发中的弹性域(Flexfields)(二)--关键性弹性域及其它

关键性弹性域绑定LOVUI

基于Oracle Brower Look-and-Feel(BLAF)Guidelines,关键性弹性域实现为编码组合LOVs而不是UI上的一个个分段。你可以直接在编码组合LOV输入框输入组合编码。

使用这个新的UI,你也可以选择输入字段右边的编码组合LOV图标,就像图3显示的Operations Accounting 弹性域.

EBS OAF开发中的弹性域(Flexfields)(二)--关键性弹性域及其它

结果高级查询页面可以用于查找一个存在的关键性弹性域组合。查询页面分为两个区域,查询区域和结果区域。在查询区域,每个关键性弹性域的分段都会生成。当查询关键性弹性域编码组合时,你不需要为所有的分段输入值.

EBS OAF开发中的弹性域(Flexfields)(二)--关键性弹性域及其它

注意:OAF框架不支持连接分段的范围或者单个分段的查询,如果指定的话就会返回一个开发模式错误。参考第二章的”Range form”标题("Planning and Defining KeyFlexfields") of the Oracle E-Business Suite Flexfields Guide Release 12。

注意:向后兼容性-新的关键性弹性域组合LOV UI为关键性弹性域生成一个LOV web bean,而不是为每个关键性弹性域分段生成多个子web bean。一些控制器可能依赖于旧的关键性弹性域UI。为修复向后兼容的问题,你需要设置FND_FWK_COMPATIBILITY_MODEprofile 为 11.5.9或者使用下面的JavaAPI来关闭新关键性弹性域UI.

OAKeyFlexBean.useCodeCombinationLOV (boolean false);

动态插入

当关键性弹性域打开动态输入时,会在关键性弹性域组合LOV查询页面启用一个新建按钮.当允许动态插入,并且你为关键性弹性域输入所有必需的分段,且在组合LOV查询页面找不到匹配的组合时,你可以选择新建按钮来创建一个新的编码组合。

必填分段

如果一个关键性弹性域的分段在Oracle Applications中被定义为”必填”,OAF框架在分段前面显示一个*号。当你在组合LOV查询页面进行查询的时候,你不必为必填字段指定值.OAF框架仅在你在允许动态创建并尝试创建一个新的编码组合时才考虑必填属性。

PPR支持

如果页面上有PPR事件发生并且关键性弹性域的视图对象属性在processFormRequest方法中发生了改变,OAF框架自动添加弹性域web bean为PPR事件目标并且重新生成关键性弹性域.

在OracleE-Business Suite中设置关键性弹性域

在把关键性弹性域添加到OAF页面之前,你必须首先在Oracle E-Business Suite中设置关键性弹性域.请参考Chapter 2("Planning and Defining Key Flexfields") in the Oracle E-Business Suite Flexfields GuideRelease 12.

当你为要设置的关键性弹性域有清晰的计划时,请参考"Implementing Key Flexfields" in Chapter 14("Flexfields") of the Oracle E-Business SuiteDeveloper‘s Guide Release 12中的基本步骤:

第一步:在数据库中定义关键性弹性域列,包括组合表.

第二步:在Oracle Application Object Library中注册关键性弹性域表.

第三步:使用关键性弹性域窗口注册你的关键性弹性域.

接下来,参考Oracle E-Business Suite Flexfields GuideRelease 12中的下面的步骤:

第四步:在值集窗口定义值集,就像第五张(“值和值集”)中描述的.

第五步:使用关键性弹性域分段窗口定义关键性弹性域结构和分段,就像第三章("Planning and Defining Key Flexfields")中”定义关键性弹性域结构”和”定义分段”部分描述的.

第六步:当你准备添加关键性弹性域到OAF页面,可以按照”声明式实现”和”运行时控制”部分中的步骤。

声明式实现

下面的步骤描述了如何添加关键性弹性域item到OAF区域:

步骤0:确认区域潜在的视图对象包含CCID列(外键引用).

步骤1:在你的区域,从上下文菜单选择New->Item并设置Item类型为flex.

注意:你不能直接在messageComponentLayout区域下创建flexitem,但是你可以在messageComponentLayout区域下创建messageLayout区域,然后再messageLayout下创建flex item。

步骤2:为你的弹性域指明视图实例.这个视图对象实例必须和你在区域上指定的视图对象实例一样。注意当你创建视图对象时,你仅需要包含CCID列.

注意:OAF框架支持同一页面的多个关键性弹性域,也支持一个table中的多个关键性弹性域,只要每个关键性弹性域使用不同的CCID属性名.参看运行时控制部分如何为视图对象指定CCID列。

注意:如果弹性域的视图对象不返回行,OAException也不会被抛出,这样控制器的processRequest方法仍可以运行并生成弹性域。

注意:OAF框架为你自动处理动态插入。如果你要自己处理动态插入,可以参看运行时控制.

步骤3:设置关键性弹性域”Appl Short Name”属性为注册的关键性弹性域的应用的缩写名.

步骤4:设置关键性弹性域的Name属性为注册的关键性弹性域的编码。

注意:这和使用Name定义描述性弹性域不同.

步骤5:设置关键性弹性域Type属性为key.

步骤6:最后,根据需要设置分段列表属性(参看关键性弹性域分段列表)。

关键性弹性域分段列表

如果你想显示部分而不是你的弹性域的所有分段,你可能要设置Segment List属性。如果这个属性留空,所有的分段都会生成.语法就和描述性弹性域类似,仅仅你应该使用结构编码来替代上下文的值,格式是:

structure code1|segment1‘s name|segment2‘sname...||structure code2|segment4‘s name|segment5‘ name...

特定结构编码的分段有”|”隔离,但不同的结构编码的数据是由”||”隔离,下面的示例列出了一个结构编码的分段:

FWK Item Flexfield|Manufacturer|ProductFamily|Product

只读分段

你可以在列表中任意分段后面添加只读标记($RO$)。比如,下面的结构编码code1中的($RO$)显示Segment1为只读。

Structure code1|Segment1($RO$)|Segment2...

运行时控制

警告:你应该仅仅在不能通过声明来创建的时候再通过编程来创建web beans.编程创建的web beans不能个性化,重用或者简单的扩展.

当创建web bean控制代码时,你可以参考OA FrameworkController Coding Standards 中需要考虑的额外信息.

如果你需要编程来创建关键性弹性域,你应该把下面的东西加入到你的代码中去:

l  调用OAKeyFlexBeansetStructureCode方法指明关键性弹性域的结构。

l  调用OAKeyFlexBeansetCCIDAttributeName方法指明你的视图对象上的CCID属性名,如果它不包含视图对象中所有单个的分段.当你再关键性弹性域输入一个值并提交页面,关键性弹性域从组合表决定编码组合(由OAF框架决定)并且设置你的视图对象的CCID列的CCID值。如果允许关键性弹性域的动态插入,并且你输入了一个不存在于组合表的组合,OAF框架将在组合表中创建那个组合记录,并返回一个有效的CCID。如果不允许动态插入,OAF框架返回’-20’作为CCID,表明输入组合在组合表中没有发现并且动态验证关闭了.

下面的代码演示了如何编程创建关键性弹性域:

public class RegionCO extends OAControllerImpl 

{

  public void processRequest(OAPageContext pageContext, OAWebBean webBean) 

  { 

      super.processRequest(pageContext, webBean); 

      OAKeyFlexBean kffBean = (OAKeyFlexBean)

        createWebBean(pageContext, KEY_FLEX_BEAN); 

      kffBean.setAttributeValue(OAWebBeanConstants.VIEW_USAGE_NAME,

        "FNDFlexTestVO"); 

      kffBean.setAttributeValue(OAWebBeanConstants.FLEXFIELD_APPLICATION_SHORT_NAME,

        applicationShortName); 
      kffBean.setAttributeValue(OAWebBeanConstants.REGION_APPLICATION_ID,

        new Integer(applicationId)); 
      kffBean.setAttributeValue(OAWebBeanConstants.FLEXFIELD_NAME,idFlexCode);

      kffBean.setCCIDAttributeName("UniqueIdColumn2");

      kffBean.setStructureCode(idFlexStructureCode);

 

      //optional: 
      kffBean.setDynamicInsertion(isdynamicInsertion); //set dynamic insertion

      kffBean.setAttributeValue(OAWebBeanConstants.FLEXFIELD_SEGMENT_LIST,

        segmentList); //set segmentlist

      kffBean.useCodeCombinationLOV(false); 

      //if you need old style key flexfield in 5.10 mode 

  }

 

  public void processFormRequest(OAPageContext pageContext, OAWebBean webBean) 

  { 

      super.processFormRequest(pageContext, webBean); 

   } 

}


你也应该考虑下面这些关键性弹性域运行时控制:

l  合并关键性弹性域分段到父布局

l  处理动态插入

l  只读和生成绑定值

l  添加VRule到关键性弹性域WebBean

把关键性弹性域分段合并到父布局

默认,弹性域分段是在弹性域内对齐的,但是在整个父区域内是不对齐的。如果你想要合并关键性弹性域到父布局,你必须通过属性名找到OAKeyFlexBean并调用OAKeyFlexBean的方法mergeSegmentsWithParent.

下面的代码示例把关键性弹性域分段合并到父布局中,在这个示例中,KeyFF是你的区域中item名称(类型为flex):

public class RegionCO extends OAControllerImpl 

{

  public void processRequest(OAPageContext pageContext, OAWebBean webBean) 

  { 

      super.processRequest(pageContext, webBean); 

 

      //find the flexfield that is defined in this region as item "KeyFF" and merge each 

      //individual segment to the outside layout

 

      OAKeyFlexBean kffBean = (OAKeyFlexBean)webBean.findIndexedChildRecursive("KeyFF");
      flexBean.setStructureCode("FWK Item Flexfield"); 
      flexBean.setCCIDAttributeName("FwkitemId"); 
      flexBean.mergeSegmentsWithParent(pageContext);

  }

 

  public void processFormRequest(OAPageContext pageContext, OAWebBean webBean) 

  { 

      super.processFormRequest(pageContext, webBean); 

   } 

}


处理动态插入

如果你希望自己处理动态插入,你必须调用OAKeyFlexBean的方法setDynamicInsertion(false)来禁用动态插入。另外,包含关键性弹性域的页面的submitButton必须禁用验证.

注意:关于动态插入的额外信息,请参考"Dynamic Insertion"section of Chapter 2 ("Planning and Defining Key Flexfields") in the Oracle E-Business Suite Flexfields GuideRelease 12.

只读和生成绑定值

如果你在表中实现弹性域,且弹性域是只读或者在一些行中生成,而在其它行中不生成,你可以使用绑定值来编程实现.现在没有对这个声明式实现.

kffBean.setAttributeValue(READ_ONLY_ATTR,boundValue);

或者

kffBean.setAttributeValue(RENDERED_ATTR,boundValue);

添加VRule到关键性弹性域Web Bean

一个VRule是一个验证规则,允许你添加额外的限制,用于限制用户在关键性弹性域分段上可以输入的值,基于分段值qualifiers(附加于单个分段的值).

额外信息:参考"Qualifiers" topic inChapter 2 ("Planning and Defining Key Flexfields") of the Oracle E-Business Suite Flexfields GuideRelease 12

你可以使用OAKeyFlexBean的方法addVRule添加一个或者多个VRule到一个关键性弹性域webbean.这个方法允许你指明用于验证的弹性域qualifiers和分段qualifiers,以及分段qualifiers的验证值,是不是包含(true)或者排除(false)用户输入的值如果它的分段qualifier匹配指明的验证值,以及用来显示的消息字典的错误消息如果输入了不合适的值.参考addVRule在 Javadoc中关于这个方法的完全使用。这个方法必须在processFlexmergeSegmentsWithParent方法之前调用.

作为一个示例,假设你要实现一个页面,在这个页面上你想禁止用户输入分段值到 Oracle General Ledger‘s Accounting Flexfield的分段上,这里detailposting是不允许的. DETAIL_POSTING_ALLOWED是分段qualifier,它是基于全局弹性域qualifierGL_GLOBAL,你想在你的规则中使用DETAIL_POSTING_ALLOWED.你想排除所有的其分段qulifierDETAIL_POSTING_ALLOWED的值为N(No)的值.你的消息名称为”GLDetail Posting Not Allowed”,它对应的消息是”you cannot use values of which detail posting is not allowed”.你应该像下面这样添加VRule:

当一个用户在由这个qualifier影响的字段上输入一个不包含在内的值时,用户就会得到上面这个错误消息.另外,不包含在内的值也不会出现在你的分段的LOV中.所有其它的值,没有明确排除的都会显示出来。

额外信息:更多关于VRules,请参考第9章("Key Flexfield Routines forSpecial Validation") in the Oracle E-Business SuiteFlexfields Guide Release 12.

个性化考虑

请参考OracleApplication Framework Personalization Guide.中的弹性域个性化考虑总结.

引用字段

一个引用字段用来参与一个弹性域的一个或多个属性计算的web bean,比如默认的分段值,值集合和描述性弹性域的上下文引用字段.这种引用字段可以这样:$PROFILES$.*<NAME>来映射引用,可以使用在弹性域的属性中。<NAME>可以使用任何字母数字值从而提供了一个潜在的无限的命名空间的命名参数,参数可以通过OAF框架UI传递到弹性域定义中.命名参数使用弹性域映射来映射到引用的web beans。无论什么时候引用web bean的值改变了,页面也会随着弹性域的属性的改变而刷新.引用的web bean的显示值用于替代在属性中的引用.

注意:OAF框架对:<BLOCK>.<FIELD>没有直接的支持,:<BLOCK>.<FIELD>在基于Forms的应用中用于映射form中的字段到弹性域。如果一个基于Forms的应用的弹性域要在基于OAF框架的应用中重用,所有的:<BLOCK>.<FIELD>引用都必须使用使用:$PROFILES$.*<NAME>替换。

声明式实现

默认在flex item下,没有弹性域映射元数据.下面的步骤描述了如何添加弹性域映射到flex item来建立引用字段:

1.      右键点击flex item并选择New->flexMaps

2.      指定一个符合标准的ID,一个属性集和像其它item的通常的属性。

3.      在flex映射的Name属性指明为参数名称。比如,如果弹性域定义使用了一个命名的参数$PROFILE$.*paramName,那么就设置Name属性为*paramName

4.      指明需要设置在参数的值或者绑定值.这些值可以是下面的其中之一:

l  一个常量值

l  一个视图属性,由SPEL(SimplestPossible Expression Language)表示比如${oa.<viewUsage>.<viewAttribute>}

l  当前OAF页面上作为引用字段的webbean的名称,由SPEL表示${oa.page.<referenceId>}

5.      (可选): (仅对描述性弹性域)如果flex映射作为引用字段,要设置引用上下文属性为true

有多少引用就重复上面的步骤创建多少flex映射.

 

运行时控制:

你可以通过编程访问或者修改flex映射元数据,也可以移除存在的flex映射.这样做,因为flex映射元数据就可以重载行为.

public void processRequest(OAPageContext pageContext, OAWebBean webBean)

{ 

   super.processRequest(pageContext, webBean);

   ... 

   OADescriptiveFlexBean flexBean = 

 (OADescriptiveFlexBean)webBean.findIndexedChildRecursive("FlexItem"); 

    OAFlexMaps flexMaps = new OAFlexMaps(); 

    if (dffBean != null) 

    { 

      flexMaps = flexBean.processFlexMap(pageContext); 

    } 

    flexMaps.remove("flexMap"); 

    OAWebBean referenceField = webBean.findChildRecursive("referenceItem");    

    OAFlexMap map1 = new OAFlexMap("flexMap1", new 

OABoundValueFlexReference(referenceField), "*paramName", true); 

       flexMaps.add(map1); 

 flexBean.setFlexMaps(flexMaps); 

...

}


如果需要为你弹性域编程来创建弹性域映射,你可以在你的控制器的processRequest方法中添加下面类似的代码,在下面的示例中,flexBean是弹性域web bean,它包含了新的弹性域映射,referenceItem是引用web bean的名称.

public void processRequest(OAPageContextpageContext, OAWebBean webBean)
{
super.processRequest(pageContext, webBean);
...
OAWebBean rootBean = pageContext.getRootWebBean();
OAWebBean referenceBean =rootBean.findIndexedChildRecursive("referenceItem");
OAFlexMaps flexMaps = flexBean.getFlexMaps();
if (flexMaps == null) flexMaps = new OAFlexMaps();
OAFlexMap map = new OAFlexMap("flexMap", newOABoundValueFlexReference(referenceBean), "*paramName");
flexMaps.add(map);
flexBean.setFlexMaps(flexMaps);
...
}

注意下面重要的限制:

l  OABoundValueFlexReference和SPEL${oa.page.<id>}绑定是一样的。OAFlexMap可以使用可选择的第四个Boolean类型参数.true值表明这个字段的值改变将会触发上下文的改变.请参考Javadoc中关于OAFlexMaps的更多细节.

l  当为上下文引用字段(描述性弹性域)定义flex映射并且在弹性域定义中选择了同步上下文标志,那么在UI中上下文字段会被禁用,因为上下文引用web bean就作为上下文中的单一来源。

当flexitem在更新模式,并且从关联弹性域的视图对象行得到的值和引用web bean中得到的值不同,那么下面的消息就会显示

"The value in flexfield contextreference web bean does not match with the value in the context of theDescriptive flexfield web bean PermitFlex. If this is not intended, please goback to correct the data or contact your Systems Administrator for assistance."

l  OAF框架会关联一个标准的名为” FlexReferenceUpdate” flex事件到任意引用webbean。如果引用web bean已经关联了一个事件,一个错误就会抛出来,表明这个web bean不能作为一个引用web bean。

使用限制

1.      如果引用web bean有一个默认值,那么这个应该声明式实现,或者在flex web bean的任意容器区域的控制器的processRequest实现.

2.      引用web bean不能设置在Table,高级Table或者HGrid下面。

3.      其它的限制,参考弹性域已知问题.

个性化考虑

l  参看OracleApplication Framework Personalization Guide中关于弹性域个性化考虑总结。

l  系统管理员可以使用个性化UI创建flexMaps.

值和值集

通常来说,在关键性或者描述性弹性域分段输入的值是由预定义的有效值集来验证的(一个值集).当定义你的值集时,你可以指定值的类型,并通过设置格式规则来符合值集。你为值集指定的验证类型会决定用户如何输入或者使用弹性域中的分段,验证类型如下:

l  没有(None)-没有验证,因此只要满足格式规则的值都可以输入。

l  独立(Independent)-为分段提供了一个预定义的存储于Oracle Application Object Library表中的值列表.

l  表(Table)-提供了一个就像独立值集的预定义的值列表,但是它的值是存储在应用表中的。你指定的表中定义的值和where 条件限制值集中使用的值。你可以在WHERE条件使用如$FLEX$和$PROFILES$绑定值来基于其它的值来创建可能的值列表。比如,$PROFILES$可以绑定值到特定的profile选项,$FLEX$让你绑定值到前面分段的值。

额外信息:关于如何使用这些绑定值的更多细节,请参考"Bind Variables" inChapter 4 ("Values and Value Sets") of the Oracle E-Business Suite Flexfields GuideRelease 12。

l  依赖(Dependent)-提供了一个预定义的值列表,但是这些值依赖于弹性域结构中前一个分段中独立的值。

l  可翻译的独立值和可翻译的依赖值-类似于独立和可依赖的值集,不同是的,除了可以使用翻译的值。

l  特殊和值对集合-这些值集提供了能够把关键性弹性域分段值或者组合作为标准报表提交的报表查询条件的机制(也被称为”弹性域内的弹性域”)。”特别”和”对”验证类型在OAF中是不支持的,如果指明这种类型的话会报开发模式错误.

额外信息:要了解更多关于用于标准请求提交的定义报表参数窗口(描述性弹性域),或者关于”特别”和”对”值集,请参考第七章("Standard RequestSubmission") in the Oracle E-Business SuiteFlexfields Guide Release 12.

当值集的列表类型为”Poplist”或者”List of Values”, OAF框架自动为弹出式列表或者LOV分别生成分段。

额外信息:要了解关于值集的更多信息,请参考第4章- "Values and ValueSets", in the Oracle ApplicationsFlexfields Guide Release 12.

弹性域验证

但你实现了一个包含提交按钮的页面时,当选择这个按钮时,你可以选择设置页面的提交为验证或者未验证。在这个页面中的弹性域的行为依赖于你是否设置submitButton的Disable Server Side Validation 和Disable Client Side Validation属性为true或者false.

注意:对于弹性域,为向后兼容,设置DisableServer Side Validation 或Disable Client Side Validation属性为true会禁用所有验证,既包含客户端也包含服务端的验证。

下面的表描述了当客户端和服务端都禁用或启用时弹性域的行为.

禁用验证(客户端和/或服务端)

弹性域行为的影响

False

1.  在客户端,客户端Javascript检查必填字段,日期格式,如果错误发生的话显示Javascript错误。

2.  在服务端,在UI上输入的所有数据都被提交到FlexJ对象上,如果任何分段输入的数据无效(比如格式错误),就会抛出错误。

3.  调用方法FlexJ object.validate来验证整个弹性域。如果有错误,异常会抛出到UI上。

4.  如果所有的验证通过,数据会设置到视图对象上。

True

1.  任何客户端Javascript都不会触发

2.  在客户端,当所有的数据提交到FlexJ 对象时,如果用户输入的某分段有无效的格式,那么这个值会被忽略,但是不会有错误抛出来。

3.  不会调用FlexJ object.validate方法。

4.  所有的数据就像期望的一样设置到视图对象上。

当你在查询区域有描述性弹性域时,就是一个你可能想要未验证提交的例子。

弹性域和标准请求提交

标准请求提交(SRS)的报表参数窗口,其允许用户为他们的报表输入查询条件,这个窗口就是一个特别的弹性域。其中,多数报表参数的设置步骤和描述性弹性域类似,主要的区别是你使用Concurrent Programs窗口来定义你的分段而不是使用描述性弹性域分段窗口,而且为SRS报表参数定义和使用值集的方式要复杂多了。

额外信息:请参考Chapters 7 ("Standard RequestSubmission") and 8 ("Reporting on Flexfields Data") in the Oracle E-Business Suite Flexfields GuideRelease 12.

如果你想使用弹性域作为报表参数(请参考弹性域中的弹性域),你可以使用弹性域程序来指明哪种类型的弹性域你想作为报表参数的值。

额外信息:关于关键性弹性域routine的语法,请参考Chapter 9 ("Key FlexfieldRoutines for Special Validation") in the OracleE-Business Suite Flexfields Guide Release 12

 

开发模式错误

如果检测到下面之一的弹性域实现,Oracle E-Bussiness Suite就会抛出开发模式错误:

l  弹性域中使用了引用字段

l  弹性域中使用了"对”(pair)值集

l  弹性域中使用了特殊(special)值集.

l  弹性域在表中表布局中.

l  弹性域直接放在MessageLayout中

l  弹性域在查询bean布局中

弹性域的问题处理

如果你的弹性域不像期望的那样工作,或者弹性域上有错误,你可以按照下面的故障解决步骤来分析引起问题的根源。

步骤1:检查弹性域设置

作为应用开发人员登陆基于Forms 的Oracle E-Business Suite 环境,导航到分段窗口(Flexfield->Descriptive/Key->Segments)。找到你使用的弹性域,确认这个弹性域的FreezeFlexfield Definition选框选上了.再次编译这个弹性域,如果你的弹性域使用了OAF页面不支持的功能,警告消息就会出现。

步骤2:在你的支持代表的指导下运行弹性域测试工具。

作为应用开发人员登陆基于Forms的Oracle E-Business Suite,导航到Flexfiled Test窗口(Flexfield->FlexfiledTest).找到你再使用的弹性域,并按钮支持代表的说明使用弹性域测试窗口。

步骤3:在OAF页面上检查你的弹性域是否有开发模式错误。

在运行时,OAF检查弹性域是否被合适的配置和使用。如果它找到弹性域的任何错误,OAF会在页面生成开发模式错误。如果有,在About Page.要启用开发测试模式调试,你必须设置profile选项FND: Developer Mode / FND_DEVELOPER_MODE为Yes.要在每个OAF页面的底部生成”Aboutthis page”链接,你必须设置profileFND: Diagnostics / FND_DIAGNOSTICS为Yes。

步骤4:使用”About”页面得到关于这个弹性域的更多信息。

在每个OAF页面的底部,有一个”About this page”的链接(如果profile FND: Diagnostics / FND_DIAGNOSTICS设置为Yes)。当你打开”About”页面,你可以在页面的tab中看到页面的结构,也包含弹性域的详细信息。所有的弹性域信息列在弹性域引用部分,包括:

l  弹性域名称和应用ID

l  关于每个分段的详细信息,比如分段名和分段值集。

l  是否弹性域有开发模式错误

 

已知问题

l  参考已知的弹性域问题列表极其建议的变通方法如果有的话。

l  在当前OAF页面存在指定的引用字段。

l  一个名为"FlexReferenceUpdate"标准flex事件应该关联到指定的引用bean。如果引用bean已经关联到一个动作,就会抛出一个表明指定的bean不能作为引用字段的错误。

l  当一个flex item在更新模式,并且从关联这个弹性域的视图行中得到的值和从引用的web bean的值不同的时候,下面的消息就会显示出来

"The value in flexfield contextreference web bean does not match with the value in the context of theDescriptive flexfield web bean PermitFlex. If this is not intended, please goback to correct the data or contact your Systems Administrator for assistance."

l  如果一个字段的同一个属性有多个引用字段,那么所使用的引用字段是顺序是不确定的。

l  引用字段不能放在Table或者AdvancedTable或者HGrid下面。

EBS OAF开发中的弹性域(Flexfields)(二)--关键性弹性域及其它

上一篇:戒烟新论(反嗜平衡点的稳步降低)及戒除过程探究 - 为自已的健康开始做准备


下一篇:Flex简介