【问题标题】:try catch in Progress尝试捕获进行中
【发布时间】:2014-04-17 08:03:08
【问题描述】:

有没有类似于php中的try catch的方法?

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

我已经使用了这种类型的块:DO ON ERROR UNDO ...,但我想知道是否还有其他方法。

谢谢。

【问题讨论】:

    标签: progress-4gl


    【解决方案1】:

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

    BLOCK-LEVEL ON ERROR UNDO, THROW 的完整描述

    来自手册:

    ERROR UNDO, THROW 上的语法块级。

    此语句影响以下块类型:

    外部过程的主块 (.p)

    内部程序

    用户自定义函数

    类的方法

    类构造函数

    属性访问器

    ON 块用作数据库触发器,具有 CREATE、DELETE、WRITE 或 分配事件

    重复块

    FOR 块

    DO TRANSACTION 块

    此声明不影响:
    析构函数

    在单独的非例程级块中显式编码的错误指令

    作为 UI 触发器的 ON 块。

    注意这些替代 BLOCK-LEVEL ON ERROR UNDO, THROW 声明:
    您无需将语句添加到源代码文件中,而是 可以使用 -undothrow 2 启动参数来改变默认值 对 UNDO 的错误处理,THROW 对受 编译期间的 BLOCK-LEVEL 语句。请参阅启动命令和 参数参考了解更多信息。

    可以使用 ROUTINE-LEVEL ON ERROR UNDO, THROW 语句,如果您 只想在例程级别更改默认错误处理 块。 (您可以使用 -undothrow 1 启动参数来更改 例程级别块上的默认错误处理为 UNDO,THROW 期间 编译。)

    【讨论】:

    • 该死,我在 10.1B 中,无法识别 BLOCK-LEVEL。但我把这个答案留到以后。非常感谢你。 :)
    • THROWCATCH 也无法识别。 :(
    • 在 10.1C 中实际添加的捕获。太糟糕了。 10.1B 来自 2007 年,因此应考虑更新。
    猜你喜欢
    • 2015-09-07
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 2019-08-25
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多