从Oracle Forms 12C中的所需项目向后处理选项卡

时间:2017-07-24 03:39:56

标签: oracle12c oracleforms

我已将Oracle Forms 10g迁移到12c,并在12c中发生异常问题。以下是用户反馈的问题之一。

我有一个包含某些必填字段的表单。当用户将项目留空时,需要出现错误消息"字段"显示在表单状态栏上。通常,用户不能进入下一个字段,直到在所需项目中放入某些内容。

在10g中,用户可以向后选项卡,将所需字段留空而不会出错,但不再出现在12c中。

我找到了类似的方法(不能说它完全是解决方案):

步骤1。项目属性血小板中"是" 的初始要求。

第二步。为所需项目创建 key-prev-item ,并输入以下代码:

If get_item_property(:system.cursor_name, required) = ‘true’ then
  Set_item_property(:system.cursor_name, required, property_false);  
End if;

步骤3。为所需项目创建 key-next-item ,并将required属性重置为true。

它看起来很愚蠢和不可靠,因为你创建的代码越多,出现的错误就越多。

Oracle Form 12c中是否有任何内置函数处理这种情况?

非常感谢

1 个答案:

答案 0 :(得分:0)

我认为最好在那一刻使用DEFER_REQUIRED_ENFORCEMENT。 我们这样做,如果我们导航出项目并在导航后输入false,我们将其设置为true。

oracle formsbuilder的使用说明有助于解释选项Yes和4.5之间的区别:

  • 此属性仅在项级验证生效时适用。默认情况下,当项目的Required设置为true时,Oracle Forms将不允许导出该项目,直到输入有效值。如果将Defer Required Enforcement设置为No,则此行为将生效(当项目实例不允许最终用户更新时会发生异常;在此不常见的情况下,将忽略Defer Required Enforcement设置为No并且项目级别验证不会发生。)
  • 如果将Defer Required Enforcement设置为Yes(PROPERTY_TRUE表示运行时)或4.5(PROPERTY_4_5表示运行时),则允许最终用户在记录中的项目之间自由移动,即使它们为空,也会推迟执行必需属性,直到验证发生在记录级别。
  • 当Defer Required Enforcement设置为Yes时,导出时不验证空值必需项。也就是说,WHEN-VALIDATE-ITEM触发器(如果有的话)不会触发,并且项目的Item Is Valid属性不变。如果稍后进行记录级别验证时项目值仍为null,则Oracle Forms将发出错误。
  • 当Defer Required Enforcement设置为4.5时,导航时不验证空值必需项,并且项的“项有效”属性未更改。但是,WHEN-VALIDATE-ITEM触发器(如果有)会触发。如果失败(引发Form_Trigger_Failure),则认为该项目验证失败,Oracle Forms将发出错误。如果触发器正常结束,则处理继续正常进行。如果稍后进行记录级别验证时项目值仍为null,则Oracle Forms将在此时发出错误。
  • 为Defer Required Enforcement设置值4.5允许您在WHEN-VALIDATE-ITEM触发器中对逻辑进行编码,只要最终用户更改项目的值(甚至为null),该触发器将立即执行导航出去。例如,这种逻辑可以更新其他项的值。 (名称" 4.5"对于此设置反映了这样的事实:在版本4.5中,以及在4.5模式下运行的后续版本中,WHEN-VALIDATE-ITEM触发器在项目级验证期间始终触发。)
  • 迁移说明:如果您的表单应用程序使用了" 4.5"作为运行时兼容模式属性设置,Oracle Forms Migration Assistant将自动将Defer Required Enforcement属性设置为" 4.5"因为Oracle Forms中的运行时兼容模式属性已过时。