我正在努力将系统错误对象从UI触发器传播到主程序。
ON CHOOSE OF btnButton IN FRAME frmFrame
DO:
/* this will cause a system error */
FIND FIRST Customer NO-LOCK
WHERE Customer.CustNum = 1875918759178.
CATCH eErr AS Progress.Lang.SysError:
/* It does get caught over here */
UNDO, THROW eErr.
END CATCH.
END.
CATCH eMain AS Progress.Lang.SysError:
/* this message doesn't happen */
MESSAGE
"caught"
VIEW-AS ALERT-BOX.
END CATCH.
它似乎并不想传播错误对象。有什么想法吗?
答案 0 :(得分:1)
从THROW选项的文档中,撤消声明:
“UNDO,THROW不允许在用户界面触发器的CATCH块中.ABL不会从用户界面触发器中引发或返回错误。这样做会导致编译时错误。” 上面的句子说“你不......”我认为它应该是“不允许你”。但文档本身是错误的。
无论如何,从今天(2016年12月27日)开始,你想要完成的事情似乎还不可能。
答案 1 :(得分:0)
尝试在FIND语句的末尾使用NO-ERROR:
FIND FIRST Customer NO-LOCK
WHERE Customer.CustNum = 1875918759178 NO-ERROR.
然后您可以使用ERROR-STATUS系统句柄来捕获错误:
MESSAGE ERROR-STATUS:ERROR SKIP
ERROR-STATUS:GET-MESSAGE(1)
VIEW-AS ALERT-BOX.
应该设置该错误状态,直到使用NO-ERROR执行其他语句。您还可以使用AVAILABLE(客户)查看是否找到了记录:
MESSAGE AVAILABLE(Customer) VIEW-AS ALERT-BOX.