在oracle表单10g中抑制/清除消息

时间:2013-07-23 20:17:28

标签: oracle oracleforms

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

当他们退出表单时,它也会针对验证运行,如果成功,则会询问他们是否要保存(使用内置问题)。如果没有成功,我会发出警报,通知他们所有数据都将丢失,并询问他们是否仍希望退出。麻烦的是,当他们点击“Exit Anyway”时,会弹出验证消息。单击确定后,表单将按预期关闭。

我正在尝试抑制/清除消息,以便不会发生此弹出窗口。我已经尝试更改消息级别但它仍然会弹出。我已经尝试过坚持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时,我希望在状态栏上放置另一条消息时弹出消息,但在这种情况下,我不希望它。因此,我问是否有办法清除消息或抑制消息,以便在这种情况下不会弹出消息。

2 个答案:

答案 0 :(得分:0)

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

从Forms Builder中的在线帮助:

  

使用表单运行时消息

     

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

     

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

     

列出了您可以影响的六种级别的邮件严重性   这里的严重程度越来越高。

     

等级

     

消息说明

     

0

     

来自其他严重级别的所有类型的邮件。

     

5

     

重申一个明显的条件。

     

10

     

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

     

15

     

声明最终用户正在尝试执行某项功能   哪种形式没有设计。

     

20

     

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

     

25

     

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

     
    

25

  
     

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

     

单个表单运行时消息的严重级别标有   Oracle Forms联机帮助系统中的“级别”。消息类型

     

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

     

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

     

错误通知最终用户阻止结束的错误条件   用户的操作(例如,不允许使用功能键。按[显示功能]   密钥]用于有效密钥列表。使用On-Error触发器来抑制   这些消息的外观。但是,您无法抑制错误   出现在命令行上的消息(例如,参数太多   命令行。)。

     

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

     

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

     

相关主题

     

SYSTEM.MESSAGE_LEVEL示例

     

错误触发

     

On-Message Trigger

     

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

答案 1 :(得分:0)

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

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