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

Progress 12.8中如何自动遍历类内临时表以优化代码?

在Progress 12.8中自动遍历类内临时表的方案

可以实现自动遍历类内所有临时表,无需每次新增临时表都修改UploadData方法。核心思路是利用Progress的句柄机制遍历当前会话中的临时表集合,结合过滤条件精准定位需要处理的临时表。

优化后的实现代码

修改UploadData方法

将原有的逐个调用逻辑替换为遍历逻辑:

METHOD PUBLIC VOID UploadData():
    DEFINE VARIABLE hTempTable AS HANDLE NO-UNDO.

    // 遍历当前会话中所有临时表句柄
    DO hTempTable = FIRST SESSION:TEMP-TABLES:
        // 过滤条件:仅处理当前类创建的临时表
        IF hTempTable:CREATOR = THIS-OBJECT:HANDLE THEN DO:
            // 仅处理有数据的临时表,避免空表无效调用
            IF hTempTable:NUM-RECORDS > 0 THEN DO:
                LoadTableJSON(INPUT hTempTable, INPUT TRUE).
            END.
        END.

        // 可选:按临时表名称前缀过滤(比如你的临时表都以TT-开头)
        // IF hTempTable:NAME BEGINS "TT-" THEN DO:
        //     IF hTempTable:NUM-RECORDS > 0 THEN DO:
        //         LoadTableJSON(INPUT hTempTable, INPUT TRUE).
        //     END.
        // END.
    END.
END METHOD.

保留原LoadTableJSON方法

原方法无需修改,它已经通过句柄接收临时表,具备通用性:

METHOD PRIVATE CHARACTER LoadTableJSON(INPUT hTable  AS HANDLE,
                                       INPUT lUpload AS LOGICAL):
                                     
    DEFINE VARIABLE cTableName AS CHARACTER   NO-UNDO.
    DEFINE VARIABLE iTableID   AS INTEGER     NO-UNDO.
    DEFINE VARIABLE lcJson     AS LONGCHAR    NO-UNDO.
    DEFINE VARIABLE cResult    AS CHARACTER   NO-UNDO.
    
    ASSIGN cTableName = hTable:NAME
           iTableID   = INT(hTable:SERIALIZE-NAME).
                                     
    WriteLog(SUBSTITUTE("Processing &1", cTableName)).
    
    hTable:WRITE-JSON("LONGCHAR", lcJson, TRUE).
    
    ASSIGN cResult = TransformJSON(STRING(lcJson)).
    
    WriteLog(SUBSTITUTE("JSON Loaded - &1", cResult)).
    
    IF lUpload THEN
        PostData(INPUT cResult, INPUT iTableID).            
    
    WriteLog("Processing Finished").

END METHOD.

关键原理说明

  1. SESSION:TEMP-TABLES集合:Progress会话会维护当前所有临时表的句柄集合,通过FIRST/LAST/NEXT/PREVIOUS可以遍历所有临时表。
  2. CREATOR属性过滤:临时表句柄的CREATOR属性会指向创建它的对象(即你的自定义类实例),通过这个条件可以确保只处理当前类内定义的临时表,避免干扰其他临时表。
  3. NUM-RECORDS判断:提前检查临时表是否有数据,避免对空表执行无效的JSON序列化和上传操作,提升效率。

扩展说明

  • 如果你的临时表命名有统一规则(比如都以TT-开头),可以直接用名称前缀过滤,实现更简单。
  • 若需要按特定顺序处理临时表,可以在临时表的SERIALIZE-NAME或自定义属性中定义排序规则,遍历后排序再处理。

内容的提问来源于stack exchange,提问作者Raphael Frei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:55:13