我有一些验证代码,当用户尝试保存时,会运行一些复杂的业务规则,并确定输入的当前数据是否与规则相匹配,以便进行保存。如果没有,则会使用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时,我希望在状态栏上放置另一条消息时弹出消息,但在这种情况下,我不希望它。因此,我问是否有办法清除消息或抑制消息,以便在这种情况下不会弹出消息。
答案 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也不会弹出,因为我的当前的解决方案似乎并不是最优的,但如果其他人遇到同样的问题,希望即使它看起来不漂亮也能够正常工作。