OpenEdge 4GL REST服务:计算临时表值会产生错误

时间:2019-01-22 03:04:28

标签: openedge progress-4gl

我有一个4gl rest webservice进度。 Create方法接受一个数据集,从该数据集中提取其基础临时表

METHOD PUBLIC VOID Createprices(INPUT-OUTPUT DATASET dsprices):
        DEFINE VARIABLE hT AS HANDLE.
        ht = DATASET dsprices:GET-BUFFER-HANDLE(TEMP-TABLE ttprices:NAME).
        ht = ht:DEFAULT-BUFFER-HANDLE.
        PreTransactionValidate(INPUT-OUTPUT TABLE-HANDLE ht).

然后我将临时表缓冲区传递给另一个方法(pretransactionvalidate),在该方法中我计算几个字段的值。 分配了伪值的PretransactionValidate方法-

METHOD  PUBLIC VOID PreTransactionValidate( INPUT-OUTPUT table-handle ttprices):
FOR EACH ttprices:
ASSIGN    
            ttprices.PricesId  = NEXT-VALUE(SeqPricesId)                
            ttprices.AddedDate = TODAY
            ttprices.AddedTime = TIME.
END. 

调用PretransactionValidate方法会导致我的Create方法失败。如果我注释掉该呼叫,则可以成功创建一条记录。我是Progress新手,在网上找不到很多资料,所以任何帮助都值得尝试。

欢呼

1 个答案:

答案 0 :(得分:1)

在您的Createprices方法中,将ht分配给缓冲区的句柄,但是过程PreTransactionValidate需要一个数据集句柄。

由于这两种方法都在同一个编译单元(类)中,因此无论如何都不需要将temp-table作为参数传递。不幸的是,临时表在ABL中始终是全局类。

如果两种方法都位于不同的编译单元中,则可以直接传递temp-table:

<some_object_reference>:PreTransactionValidate (INPUT-OUTPUT TABLE ttprices).