我有一些验证代码,当用户尝试保存时,这些代码将运行一些复杂的业务规则,并确定当前输入的数据是否足够匹配规则以允许保存。如果不匹配,则使用message('All foos of type bar must qux.')
在屏幕底部显示一条错误消息,告诉他们违反了什么规则。
当他们退出表单时,它也会运行验证,如果成功,询问他们是否要保存(使用内置的问题)。如果不成功,我有一个警告,通知他们所有数据将丢失,并询问他们是否仍然希望退出。问题是,当他们单击"无论如何退出"时,验证消息弹出。一旦他们单击"确定",表单将按预期关闭。
我试图抑制/清除消息,这样这个弹出窗口就不会出现。我试图改变消息级别,但它仍然会弹出。我试图插入一个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条答案
按热度按时间s3fp2yjn1#
您可以将:system. message_level设置为某个〉0的值以抑制某些级别的消息,然后在需要正常处理时将其设置回去。
从Forms Builder中的联机帮助:
使用窗体运行时消息
要控制最终用户在使用Oracle Forms应用程序时看到的消息,您可以执行以下操作:使用SYSTEM. MESSAGE_LEVEL系统变量抑制消息的特定"严重性级别"使用On-Error和On-Message触发器替换消息的标准处理使用SYSTEM. SUPPRESS_WORKING系统变量防止更新最终用户的屏幕(通过抑制"Working ..."消息)消息严重性级别
Forms运行时消息按严重性排序。使用SYSTEM. MESSAGE_LEVEL系统变量可以控制向最终用户显示的最低严重性级别。
您可以影响六个级别的消息严重性,此处按严重性的升序列出。
级别
消息描述
0
其他严重性级别的所有类型的消息。
5
重申了一个明显的条件。
10
表示最终用户犯了程序错误。
15
声明最终用户正在尝试执行窗体不是为其设计的功能。
20
表示由于触发器问题或其他未解决的情况,最终用户无法继续执行预期操作的情况。
25
指示可能导致表单执行不正确的条件。
25
指示无法通过SYSTEM. MESSAGE_LEVEL系统变量抑制的消息严重级别。
在Oracle Forms联机帮助系统中,各个Forms运行时消息的严重性级别标记为"级别"。消息类型
要使用On-Error和On-Message触发器替换表单运行时消息,需要了解以下三种类型的表单运行时消息:
信息通知最终用户当前的处理状态(例如,检索到的最后一个值。)或为最终用户提供上下文相关的指导(例如,按[接受]输入答案。)。使用消息触发器可以禁止显示这些消息。
错误将阻止最终用户操作的错误情况通知最终用户(例如,不允许使用功能键。按[显示功能键]可查看有效键的列表。)。使用出错时触发器可禁止显示这些消息。但是,您无法禁止显示命令行上显示的错误消息(例如,命令行上的参数太多。)。
正在工作通知最终用户Oracle Forms当前正在处理(例如,正在工作...)。不能使用"出错"或"消息"触发器或SYSTEM. MESSAGE_LEVEL系统变量来隐藏这些消息。
各个窗体运行时消息的消息类型在窗体中标记为"Type
相关主题
系统.消息级别示例
出错时触发
消息触发
关于处理触发器中的运行时错误
lnlaulya2#
我确实提出了一个解决方案,但不是很好。在我创建的验证函数中,我传递了另一个变量(一个设置为0或1的int),它仅指示我是否希望消息是弹出消息,基本上要么调用
message('warning...')
,要么调用message('warning...', no_acknowledge)
。然后,我标记了对validate函数的每个调用,以确定是否希望它显示在弹出的位置。我仍然更喜欢某种方式,我可以只在某些位置调用,这将清除任何消息是在窗体底部,所以它不会弹出,即使它还没有设置为不确认,因为我目前的解决方案似乎不是最佳的,但如果其他人有同样的问题,希望这将能够工作,即使它看起来不漂亮。