如何将临时表从过程文件传递到窗口

问题描述 投票:0回答:1

我正在使用一个窗口(.w),该窗口具有一个将变量传递给过程(.p)的按钮,发挥其魔力,然后需要将临时表中的结果返回到该窗口以进行显示。

。w文件

定义

DEFINE TEMP-TABLE Return_Results
    FIELD tt_var1Return    AS CHARACTER FORMAT "x(20)"
    FIELD tt_var2Return    AS CHARACTER FORMAT "x(30)"
    FIELD tt_var3Return    AS CHARACTER FORMAT "x(30)"
    FIELD tt_var4Return    AS CHARACTER FORMAT "x(30)"
    .

按钮代码

ON CHOOSE OF RecordFinder IN FRAME Dialog-Frame 
DO:
    DEFINE VARIABLE varInput AS CHARACTER NO-UNDO 
    DEFINE VARIABLE Return_Results REFERENCE-ONLY. /* <--- I'm pretty sure this is the problem */                

    varInput = Fill-In:SCREEN-VALUE.

    RUN RecordFinder.p(INPUT varInput, OUTPUT Return_Results).

    FOR EACH Return_Results:

        Display Return_Results.

    END.


END.

。p文件

我省略了一些我认为不必要的东西,但它基本上接受了输入变量,将其匹配并根据结果生成一个临时表,并将这些记录分配给一个新的临时表,该表将被传回。

定义

DEFINE INPUT PARAMETER windowInput AS CHARACTER NO-UNDO. 
DEFINE OUTPUT PARAMETER Results_Output 

DEFINE TEMP-TABLE Original_tt
    FIELD tt_var1Original    AS CHARACTER FORMAT "x(20)"
    FIELD tt_var2Origianl    AS CHARACTER FORMAT "x(30)"
    FIELD tt_var3Original    AS CHARACTER FORMAT "x(30)"
    FIELD tt_var4Original    AS CHARACTER FORMAT "x(30)"
    .

DEFINE TEMP-TABLE Return_tt
    FIELD tt_var1Return    AS CHARACTER FORMAT "x(20)"
    FIELD tt_var2Return    AS CHARACTER FORMAT "x(30)"
    FIELD tt_var3Return    AS CHARACTER FORMAT "x(30)"
    FIELD tt_var4Return    AS CHARACTER FORMAT "x(30)"
    .


*additional code that works*

代码的下一部分用于对与输入变量匹配的临时表的结果进行排序

FOR EACH Original_tt WHERE Original_tt.Var1 = windowInput:

    CREATE Return_tt.
    BUFFER-COPY Original_tt TO Results_tt

    Return_tt.tt_var1Return  = Original_tt.tt_var1Original.
    Return_tt.tt_var2Return  = Original_tt.tt_var2Original.
    Return_tt.tt_var3Return  = Original_tt.tt_var3Original.
    Return_tt.tt_var4Return  = Original_tt.tt_var4Original.

    /* This is where I know I'm wrong */
    /* I figured you could assign the Return_tt to the output variable */

    Results_Output = Return_tt.
END.

我希望这不要太令人费解。

progress openedge
1个回答
0
投票

https://docs.progress.com/bundle/abl-reference/page/Parameter-passing-syntax.html处的文档详细介绍了参数传递语法(尽管没有不错的示例)。>>

在被调用程序(.p)中,您需要定义参数

DEFINE INPUT PARAMETER windowInput AS CHARACTER NO-UNDO. 
DEFINE OUTPUT PARAMETER TABLE FOR Return_tt. 

在呼叫者(.w)中,您说以下

RUN RecordFinder.p(INPUT varInput, OUTPUT TABLE Return_Results).

现在您的呼叫者中有了数据。

这是一个深层副本(因此.W在内存中获得了自己的副本)。这可能会导致性能问题(因为必须进行复制),尽管也有进行深层复制的原因。

您可以很容易地将深(按值)调用转换为浅(按引用)调用。

RUN RecordFinder.p(INPUT varInput, OUTPUT TABLE Return_Results BY-REFERENCE).

https://docs.progress.com/bundle/develop-abl/page/Passing-a-temp-table-by-reference.html的其他文档。您无需在调用方中将临时表定义为REFERENCE-ONLY

© www.soinside.com 2019 - 2024. All rights reserved.