我在按钮的WHEN-BUTTON-PRESSED
触发器
BEGIN
SYNCHRONIZE;
populate_maximo_records;
END;
将会出现一个场景,即块中不会有任何记录填充。如果没有记录,则当前它抛出以下错误消息
frm-40350 query caused no records to be retrieved
相反,我想抑制上述消息并显示自定义消息。 我怎么能这样做?
答案 0 :(得分:4)
您可以使用On-Message或On-Error触发器来捕获任何内部表单消息或错误。 FRM-40350被归类为信息类型(可以在Forms帮助中检查),因此必须在On-Message触发器中处理。捕获消息的代码应该是这样的:
IF message_code = 40350 THEN
Message('Your custom message');
ELSE
Message(message_type||'-'||TO_CHAR(message_code)||':'||message_text);
END IF;
请注意'On'触发器会替换隐式表单功能,因此如果您在示例中省略了ELSE语句,那么您将隐藏所有其他表单消息!使用On-Error触发器时,您必须记住在显示自己的消息后使用RAISe,否则表格将继续,因为错误从未发生过!
IF error_code = 50026 THEN
Message('My Own message');
RAISE FORM_TRIGGER_FAILURE;
ELSE
Message(error_type||'-'||TO_CHAR(error_code)||':'||error_text);
RAISE FORM_TRIGGER_FAILURE;
END IF;
答案 1 :(得分:1)
您可以使用system.message_level来禁止来自系统的消息: 您有消息级别:0,5,10,15,20,25,> 25
在触发器中,您可以指定仅包含指定严重性级别以上的消息 由表格发出。您可以通过为MESSAGE_LEVEL
指定值来完成此操作示例:
declare
old_message_level number;
begin
:old_message_level := :system.message_level;
:system.message_level := 20; -- suppresses most errors
commit; -- action you want to do without messages or errors
:system.message_level := old_message_level;
end;
如果您在变量或表格中发生任何错误,则在此代码之后通过检查变量是否发生错误来显示您自己的消息。