以静态温度 table 作为输入的构造函数(Progress ABL)

Constructor that takes a static temp table as input (Progress ABL)

我有一个 class,他的主要目的是临时 table。我想制作一个采用相同温度 table 作为输入的构造函数。

到目前为止,编译器会阻止任何将临时 table 作为输入参数传递的尝试。如果我改用 table 句柄,它就可以工作。但我不想从动态 table 复制到静态

Progress 希望 table 在编译时匹配,但我知道它们是相同的 - 它们在 .i 文件中定义。

是否有一种简单的方法来排列 tables,或者我一次只能解析一个字段?

对我来说就像一个魅力。

CLASS Test.TTOO.TempTableWrapper:

    {Test/TTOO/ttCustomer.i}

    CONSTRUCTOR PUBLIC TempTableWrapper (TABLE ttCustomer):

        FOR EACH ttCustomer:
            DISPLAY ttCustomer.CustNum ttCustomer.Name .
        END.

    END CONSTRUCTOR. 
END CLASS.

和来电者:

ROUTINE-LEVEL ON ERROR UNDO, THROW.

USING Test.TTOO.* FROM PROPATH.

DEFINE VARIABLE oWrapper AS TempTableWrapper NO-UNDO .

{Test/TTOO/ttCustomer.i}

/* ***************************  Main Block  *************************** */

CREATE ttCustomer.
ASSIGN ttCustomer.CustNum = 42
       ttCustomer.Name    = "It works" .

oWrapper = NEW TempTableWrapper(TABLE ttCustomer )  .

您还可以通过参考传递临时table:

oWrapper = NEW TempTableWrapper(TABLE ttCustomer BY-REFERENCE)  .

但是,temp-table 数据仅在构造函数期间可用,因为 BY-REFERENCE 调用 "overlap" 被调用方中的 temp-table 仅在该期间有效打电话。

对于永久 "BY-REFERENCE",在调用和参数上使用 BIND 关键字 - 在这种情况下,被调用者必须将临时 table 定义为 REFERENCE-ONLY。

注意,在包含文件中定义 temp-tables 不是必需的(尽管至少我推荐)。在运行时和编译时,模式只需要匹配。

当编译器不喜欢你的调用时,删除 类 r 代码并重新编译。