代码之家  ›  专栏  ›  技术社区  ›  Jacob

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

  •  3
  • Jacob  · 技术社区  · 12 年前

    我在按钮上有以下代码 WHEN-BUTTON-PRESSED 触发

    BEGIN   
    
    SYNCHRONIZE;
    populate_maximo_records;
    
    END;
    

    将出现这样一种情况,即块中不会填充任何记录。如果没有记录,当前将抛出以下错误消息

    frm-40350 query caused no records to be retrieved
    

    相反,我希望抑制上述消息并显示自定义消息。 我该怎么做?

    2 回复  |  直到 12 年前
        1
  •  4
  •   Peter Å    12 年前

    您可以使用On Message或On Error触发器捕获任何内部表单消息或错误。FRM-40350被分类为信息型(可在表单帮助中查看),因此必须在消息触发中处理。捕获消息的代码应该是这样的:

    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;
    
        2
  •  1
  •   nightfox79    12 年前

    您可以使用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;
    

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

    推荐文章