将静态临时表作为输入的构造函数(Progress ABL)

时间:2016-04-18 22:08:00

标签: progress-4gl openedge

我有一个主要目的围绕临时表的课程。我想创建一个构造函数,它将相同的临时表作为输入。

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

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

是否有一种简单的方法可以排列表格,或者我一次只能解析出一个字段?

1 个答案:

答案 0 :(得分:0)

对我来说就像一个魅力。

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 )  .

你也可以通过-ref:

传递temp-table
oWrapper = NEW TempTableWrapper(TABLE ttCustomer BY-REFERENCE)  .

然而,临时表数据仅在构造函数期间可用,因为BY-REFERENCE调用"重叠"被调用者中的临时表仅用于该呼叫的持续时间。

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

注意,不需要(尽管至少我建议)在include文件中定义临时表。在运行时和编译时,模式只需要匹配。

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