You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Progress 4GL:如何判断For Each更新操作是否执行成功?

在WebSpeed中处理Progress 4GL更新的锁定问题并返回状态

要解决记录锁定导致更新失败的问题,同时在WebSpeed中返回操作成功/失败的状态,你可以通过错误捕获机制结合Progress的错误码判断来实现。以下是具体的实现方案:

核心思路

Progress 4GL中记录被锁定的错误码为108(提示信息:Record is locked),我们可以通过错误处理块捕获该错误,区分是锁定失败还是其他异常,最终返回布尔值状态。

实现代码示例

方案1:捕获UPDATE时的锁定错误

此方案直接捕获UPDATE操作触发的锁定异常,适合需要遍历多条记录的场景:

OUTPUT CONTENT-TYPE 'text/plain'.

DEFINE VARIABLE lSuccess AS LOGICAL NO-UNDO INITIAL TRUE.

/* 错误捕获块:处理异常并区分错误类型 */
DO ON ERROR UNDO, THROW:
    FOR EACH products WHERE products.name = "ProductsName":
        UPDATE price = 1000.
    END.
CATCH e AS Progress.Lang.Error:
    /* 判断是否为记录锁定错误 */
    IF e:GetMessageNum(1) = 108 THEN DO:
        lSuccess = FALSE.
        /* 可选:添加日志记录锁定事件 */
        LOG-MESSAGE "Products record locked: " + products.name TO "webspeed-logs.log".
    END.
    ELSE DO:
        /* 非锁定错误,重新抛出以保留原始错误信息 */
        THROW e.
    END.
END.

/* 向Web前端输出结果 */
PUT UNFORMATTED STRING(lSuccess) SKIP.

方案2:主动尝试锁定记录(推荐)

使用EXCLUSIVE-LOCK NO-WAIT主动请求记录锁,避免程序因等待锁定而挂起,适合单条记录更新场景:

OUTPUT CONTENT-TYPE 'text/plain'.

DEFINE VARIABLE lSuccess AS LOGICAL NO-UNDO INITIAL TRUE.

DO ON ERROR UNDO, THROW:
    /* 尝试独占锁定记录,不等待 */
    FIND FIRST products WHERE products.name = "ProductsName" EXCLUSIVE-LOCK NO-WAIT.
    
    IF AVAILABLE products THEN DO:
        UPDATE price = 1000.
    END.
    ELSE DO:
        /* 记录不存在或锁定失败 */
        lSuccess = FALSE.
    END.
CATCH e AS Progress.Lang.Error:
    IF e:GetMessageNum(1) = 108 THEN DO:
        lSuccess = FALSE.
        LOG-MESSAGE "Failed to lock products record: " + "ProductsName" TO "webspeed-logs.log".
    END.
    ELSE DO:
        THROW e.
    END.
END.

PUT UNFORMATTED STRING(lSuccess) SKIP.

关键说明

  • Content-Type设置:通过OUTPUT CONTENT-TYPE 'text/plain'确保前端能正确解析返回的布尔值文本。
  • 错误码判断:错误号108是Progress标准的记录锁定错误码,精准识别锁定导致的失败。
  • 日志记录:可选添加LOG-MESSAGE语句,便于后续排查锁定问题的触发场景。
  • 异常处理:非锁定错误重新抛出,保证其他类型的异常能被正常捕获和处理。

内容的提问来源于stack exchange,提问作者Taki Tam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:25:43