2014-03-05 264 views
2

我有一個按鈕的WHEN-BUTTON-PRESSED觸發下面的代碼形式禁止錯誤信息,並抓住FRM-40350

BEGIN 

SYNCHRONIZE; 
populate_maximo_records; 

END; 

將會有一個場景,不會有TI塊填充任何記錄。如果沒有記錄,目前它拋出以下錯誤消息

frm-40350 query caused no records to be retrieved 

相反,我想抑制上述消息並顯示自定義的消息。 我該怎麼做?

回答

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; 

如果你持有一個變量或表,那麼你通過檢查你的變量,如果顯示此代碼後,自己的消息出現的任何錯誤發生了錯誤。

+0

如何檢查是否發生了錯誤'frm-40350'並顯示一條自定義消息?並在哪個觸發器?形成槓桿,塊級或物品級別?謝謝 – user75ponic

3

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

請注意,「開」觸發器替換隱性形式的功能,因此,如果您在本例中離開了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; 
+0

謝謝,這很有幫助。 – user75ponic