从 Oracle Forms 12C 中的必需项向后处理制表符

Handle tab backward from required item in Oracle Forms 12C

我已将 Oracle Forms 10g 迁移到 12c,并且在 12c 中出现异常问题。这是用户反馈的问题之一。

我有一个包含某些必填字段的表单。当用户将该项目留空时,错误消息 "Field are required" 显示在表单状态栏上。通常情况下,用户只有在必填项目中输入内容后才能进入下一个字段。

在 10g 中,用户可以向后按 Tab 键将必填字段留空而不会出现错误,但在 12c 中就不行了。

我想出了一个类似这样的方法(根本不能说它是解决方案):

第一步。 "Yes" 项目属性 platelet.

中的初始要求

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

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

第三步。为所需的项目创建 key-next-item 并将所需的 属性 重置为 true。

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

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

非常感谢

我觉得那时候用DEFER_REQUIRED_ENFORCEMENT比较好。 我们这样做,如果我们导航出该项目,我们将其设置为 true,导航后设置为 false。

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

  • 此 属性 仅在项目级验证生效时适用。默认情况下,当一个项目将 Required 设置为 true 时,Oracle Forms 将不允许导航到项目之外,直到输入一个有效值。如果您将 Defer Required Enforcement 设置为 No,此行为将生效。验证不会发生。)
  • 如果您将延迟强制执行设置为是(PROPERTY_TRUE 运行时)或 4.5(PROPERTY_4_5 运行时),您允许最终用户在记录中的项目之间自由移动,即使它们为空,也会推迟 Required 属性的执行,直到在记录级别进行验证。
  • 当“延迟强制执行”设置为“是”时,空值的必需项目在导航出时不会被验证。也就是说,WHEN-VALIDATE-ITEM 触发器(如果有)不会触发,并且项目的 Item Is Valid 属性 不变。如果稍后进行记录级验证时项目值仍然为空,Oracle Forms 将发出错误。
  • 当 Defer Required Enforcement 设置为 4.5 时,空值 Required 项在导航出时不会被验证,并且项的 Item Is Valid 属性 不变。但是,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 触发器始终在项目级验证期间触发。)
  • 迁移说明:如果您的 Forms 应用程序使用“4.5”作为运行时兼容模式 属性 设置,Oracle Forms Migration Assistant 会自动将 Defer Required Enforcement 属性 设置为“4.5”,因为运行时兼容模式 属性 在 Oracle Forms 中已过时。