2014-04-17 73 views
5

有没有类似于PHP中try catch的方法?try catch in progress

try { 
    ... 
} 
catch (Exception $e) { 
    ... 
} 

我已经使用了这种类型的块:DO ON ERROR UNDO ...,但我不知道是否有另一种方式来做到这一点。

谢谢。

回答

3

是的。从版本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. 

旧样式的程序与错误做像你的例子,取自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. 

块级ON ERROR UNDO的完整描述,扔

从手册:

语法块级ON ERROR UNDO,扔掉。

此语句影响以下块类型:

外部过程的主块(.P)

内部程序

用户定义的函数

一类

方法

类构造函数

属性访问

ON使用的块如数据库,创建,删除,写入或 分配事件

REPEAT块

FOR块

进行事务块

此语句不触发影响:
破坏者

在单个非常规级别块中显式编码的错误指令

ON块是UI触发器。

注意这些替代块级ON ERROR UNDO,扔 声明:
,而不是添加语句源代码文件,你 可以使用-undothrow 2启动参数更改默认 无错误处理到UNDO,在编译期间受到 BLOCK-LEVEL语句影响的每个块的THROW。有关更多信息,请参阅“启动命令”和“ 参数参考”。

如果您想要更改只在例程级别的 块中的默认错误处理,则可以使用THROW语句的ERROR UNDO,THROW语句的程序级别。 (您可以使用-undothrow 1启动参数更改默认 错误处理例行级模块撤消,期间 编译扔。)

+0

妈的,我在10.1B和'块级'不被识别。 但我稍后保留此答案。非常感谢你。 :) – doydoy44

+0

'THROW'和'CATCH'也不能识别。 :( – doydoy44

+1

赶上实际添加在10.1C。太糟糕了。10.1B是从2007年,所以更新应该考虑。 – Jensd