【问题标题】:How to pass a temp-table to a window from a procedure file如何将临时表从过程文件传递到窗口
【发布时间】:2020-05-06 16:42:46
【问题描述】:

我正在使用一个窗口(.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.

我希望这不会太复杂。

【问题讨论】:

    标签: openedge progress-4gl


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 2020-09-25
      • 2014-06-11
      • 2019-01-31
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多