表单抑制错误消息和捕获frm-40350

时间:2014-03-05 08:19:01

标签: oracle oracleforms

我在按钮的WHEN-BUTTON-PRESSED触发器

上有以下代码
BEGIN   

SYNCHRONIZE;
populate_maximo_records;

END;

将会出现一个场景,即块中不会有任何记录填充。如果没有记录,则当前它抛出以下错误消息

frm-40350 query caused no records to be retrieved

相反,我想抑制上述消息并显示自定义消息。 我怎么能这样做?

2 个答案:

答案 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;

如果您在变量或表格中发生任何错误,则在此代码之后通过检查变量是否发生错误来显示您自己的消息。