1

我有一些验证代码,当用户尝试保存时,它将运行一些复杂的业务规则,并确定当前输入的数据是否与规则足够匹配以允许保存。如果不是,则会在屏幕底部显示一条错误消息,告诉他们违反了哪些规则message('All foos of type bar must qux.')

当他们退出表单时,它也会违反验证,如果成功,会询问他们是否要保存(使用内置的问题)。如果不成功,我会发出警报,通知他们所有数据都将丢失,并询问他们是否仍希望退出。问题是,当他们单击“仍然退出”时,会弹出验证消息。一旦他们单击确定,表单就会按预期关闭。

我正在尝试抑制/清除消息,以免出现此弹出窗口。我已经尝试更改消息级别,但它仍然会弹出。我试过坚持 a message('', NO_ACKNOWLEDGE),但这只能让我控制我希望消息弹出的 if/else 链中的哪个位置。

我可以做些clear_messages什么来取消表单上等待显示的所有消息?

按照目前的情况,如果我这样做

message('something')

我在状态栏中收到一条消息。

如果我做

message('something')
message('something else')

第二个在消息栏中,而第一个在屏幕上弹出。

我在问是否有办法阻止第一条消息弹出。这显然是以 oracle 形式完成的,我已经解释了一些清除它的尝试。是的,我不明白如何清除状态栏以防止消息弹出,这就是我问这个问题的全部原因。

也许我需要说明原因

message('something', no_acknowledge);
message('something else');

不能解决我的问题?

如果是这种情况,原因是因为第一条消息是由程序单元打印出来的,在除此之外的所有情况下,如果有另一条消息进来,我希望它弹出。

换句话说,我有

function do_something return number is
  ...
begin
  ...
  message('something');
  ...
end;

do_something 处理针对某些业务规则运行的位置。

在其他地方,在我的键退出触发器中

...
if do_something = 0 then
  if Show_Alert('Alert_that_explains_data_is_not_being_saved_due_to_validation_failure') = alert_button 1 then
    exit_form(no_validate);
  end if;
else
  exit_form;
end if;
...

在除此之外的所有其他情况下,当我调用 do_something 时,我希望在状态栏上放置另一条消息时弹出该消息,但在这种情况下,我不希望它出现。因此,我问是否有办法清除消息或抑制它,以便在这种情况下它不会弹出。

4

2 回答 2

0

我确实为此想出了一个解决方案,但不是一个很好的解决方案。在我创建的验证函数中,我传递了另一个变量(一个设置为 0 或 1 的 int),它仅指示我是否希望消息是弹出消息,基本上是调用message('warning...')message('warning...', no_acknowledge). 然后,我标记了对 validate 函数的每个调用,如果我希望它显示在它会弹出或不弹出的位置。

我仍然更喜欢某种方式,我只能在某些位置调用,这样可以清除表单底部的任何消息,因此即使它没有设置为不确认也不会弹出,因为我当前的解决方案确实如此似乎不是最佳的,但如果其他人有同样的问题,希望即使它看起来不漂亮,它也能工作。

于 2013-12-02T15:35:14.910 回答
0

您可以将 :system.message_level 设置为某个值 > 0 以抑制某些级别的消息,然后在您想要正常处理时将其设置回来。

从 Forms Builder 中的联机帮助:

使用表单运行时消息

要控制最终用户在使用 Oracle Forms 应用程序时看到的消息,您可以: 使用 SYSTEM.MESSAGE_LEVEL 系统变量来抑制消息的特定“严重性级别” 使用 On-Error 和 On-Message 触发器来替换消息使用 SYSTEM.SUPPRESS_WORKING 系统变量来防止更新最终用户的屏幕(通过抑制“Working...”消息) 消息严重性级别

表单运行时消息按严重性排序。使用 SYSTEM.MESSAGE_LEVEL 系统变量可以控制显示给最终用户的最低严重性级别。

您可以影响六个级别的消息严重性,此处按严重性升序列出。

等级

消息说明

0

来自其他严重级别的所有类型的消息。

5

重申一个明显的条件。

10

表示最终用户犯了程序错误。

15

声明最终用户正在尝试执行表单不是为之设计的功能。

20

表示最终用户由于触发器问题或其他未决条件而无法继续预期操作的情况。

25

表示可能导致表单执行不正确的情况。

25

指示您无法通过 SYSTEM.MESSAGE_LEVEL 系统变量抑制的消息严重性级别。

在 Oracle Forms 联机帮助系统中,各个 Forms Runtime 消息的严重级别标记为“级别”。消息类型

要使用 On-Error 和 On-Message 触发器替换 Forms Runtime 消息,您需要了解 Forms Runtime 消息的三种类型:

信息性 通知最终用户当前的处理状态(例如,最后检索的值。)或为最终用户提供上下文相关的指导(例如,按 [Accept] 输入答案。)。使用 On-Message 触发器抑制这些消息的出现。

错误 将阻止最终用户操作的错误情况通知最终用户(例如,不允许使用功能键。按 [显示功能键] 可查看有效键列表。)。使用 On-Error 触发器来抑制这些消息的出现。但是,您不能抑制出现在命令行上的错误消息(例如,命令行上的参数过多。)。

工作 通知最终用户 Oracle Forms 当前正在处理(例如,工作...)。您不能使用 On-Error 或 On-Message 触发器或 SYSTEM.MESSAGE_LEVEL 系统变量来抑制这些消息。

单个表单运行时消息的消息类型在表单中标有“类型”

相关话题

SYSTEM.MESSAGE_LEVEL 示例

错误触发

消息触发

关于处理触发器中的运行时错误

于 2013-07-24T20:17:07.097 回答