有没有类似于php中的try catch的方法?
try {
...
}
catch (Exception $e) {
...
}
Run Code Online (Sandbox Code Playgroud)
我已经使用了这种类型的块:DO ON ERROR UNDO ...但我想知道是否还有其他方法可以做到这一点.
谢谢.
是的。从版本 11.2 开始,有一条BLOCK-LEVEL ON ERROR UNDO, THROW.语句可以更改整个程序的默认行为。CATCH自版本 10.1C 以来,它已经存在了更长的时间。
/* Must be first line of program */
BLOCK-LEVEL ON ERROR UNDO, THROW.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
i = INTEGER("Hello").
CATCH err AS Progress.Lang.Error:
MESSAGE "Error: " err:GetMessage(1)
VIEW-AS ALERT-BOX ERROR.
END.
Run Code Online (Sandbox Code Playgroud)
旧式程序在错误时执行操作,例如您的示例,取自Progress KnowledgeBase。
DO ON ERROR UNDO, THROW:
/* The following line raises error (138) which is diverted to a Progress.Lang.SysError object and thrown to the main block. */
FIND Customer 1000.
END.
CATCH eAnyError AS Progress.Lang.Error:
MESSAGE
"Error Number:~t" eAnyError:GetMessageNum(1) "~n"
"Error Text:~t" eAnyError:GetMessage(1)
VIEW-AS ALERT-BOX BUTTONS OK TITLE "Error processing in the CATCH for mainprocedure block".
END CATCH.
Run Code Online (Sandbox Code Playgroud)
块级错误撤消、抛出的完整描述
从手册中:
语法 BLOCK-LEVEL ON ERROR UNDO, THROW。
该语句影响以下块类型:
外部过程的主块 (.p)
内部程序
用户定义函数
一个类的方法
类构造函数
属性访问器
ON 块用作具有 CREATE、DELETE、WRITE 或 ASSIGN 事件的数据库触发器
重复块
FOR 块
DO 交易区块
该语句不影响:
析构函数在单独的非例程级块中显式编码的错误指令
ON 块是 UI 触发器。
请注意 BLOCK-LEVEL ON ERROR UNDO, THROW 语句的替代方法:
您可以使用 -undothrow 2 启动参数将默认错误处理更改为对每个受影响的块进行 UNDO、THROW,而不是将该语句添加到源代码文件中通过编译期间的 BLOCK-LEVEL 语句。有关详细信息,请参阅启动命令和参数参考。如果您只想更改例程级块上的默认错误处理,则可以使用 ROUTINE-LEVEL ON ERROR UNDO, THROW 语句。(您可以在编译期间使用 -undothrow 1 启动参数将例程级块上的默认错误处理更改为 UNDO、THROW。)
| 归档时间: |
|
| 查看次数: |
3193 次 |
| 最近记录: |