将数据集作为参数传递的Progress OpenEdge会丢失值

时间:2017-03-02 07:29:25

标签: openedge

我正在尝试将数据集作为参数传递给类,但数据集会不断丢失它的值。

我们的想法是将一个客户编号放入数据集中,将数据集传递给服务器,让服务器用所有客户信息填充数据集,然后将其传递回客户端。

第一个呼叫程序

这是一个调用服务器中ServiceInterface的unittest过程。

USING OpenEdge.Core.Assert.
BLOCK-LEVEL ON ERROR UNDO, THROW.

{USS/Common/Invoice/Include/dsInvoice.i}

DEFINE VARIABLE hProc      AS HANDLE NO-UNDO.
RUN USS/Server/Invoice/ServiceInterfaces.p PERSISTENT SET hProc.

TEMP-TABLE ttInvoice:TRACKING-CHANGES = TRUE.
ttInvoice.CustomerNr = CustomerNr.
TEMP-TABLE ttInvoice:TRACKING-CHANGES = FALSE.

RUN UpdateCustomer IN hProc(INPUT CustomerNr, INPUT-OUTPUT DATASET dsInvoice BY-VALUE).

Assert:Equals("MIDDELLANDBAAN 1 B", ttInvoice.DeliveryStreet).

DELETE PROCEDURE hProc.

服务器上的服务接口

此时数据集仍包含所有值。这些值将传递给业务实体,其中应添加其他值。

PROCEDURE UpdateCustomer:
    DEFINE INPUT PARAMETER CustomerNr AS INT.
    DEFINE INPUT-OUTPUT PARAMETER DATASET-HANDLE phdsInvoice.          
    USS.Server.Invoice.BusinessEntity.InvoiceEntity:Instance:UpdateCustomer(INPUT CustomerNr, INPUT-OUTPUT DATASET dsInvoice BY-REFERENCE).     
    RETURN.
END PROCEDURE.

业务实体

Business Entity是一个包含UpdateCustomer方法的单例。 将数据集传递给此方法时,它完全为空。

USING Progress.Lang.*.
USING USS.Common.Interfaces.IBusinessEntity.
USING USS.Server.Invoice.DataAccess.InvoiceBE-DA.

BLOCK-LEVEL ON ERROR UNDO, THROW.

CLASS USS.Server.Invoice.BusinessEntity.InvoiceEntity IMPLEMENTS IBusinessEntity:   
    { USS\Common\Invoice\Include\dsInvoice.i &CLassAccess = "private" }

    DEFINE PRIVATE VARIABLE InvoiceDA        AS InvoiceBE-DA NO-UNDO.
    DEFINE PRIVATE VARIABLE hDSEventHandlers AS HANDLE       NO-UNDO.

    DEFINE PUBLIC STATIC PROPERTY Instance AS USS.Server.Invoice.BusinessEntity.InvoiceEntity
        GET.
        PRIVATE SET.

    CONSTRUCTOR STATIC InvoiceEntity ():
        USS.Server.Invoice.BusinessEntity.InvoiceEntity:Instance = NEW USS.Server.Invoice.BusinessEntity.InvoiceEntity().
    END CONSTRUCTOR.

    CONSTRUCTOR PUBLIC InvoiceEntity ():
        SUPER().
        InvoiceDA = NEW InvoiceBE-DA().
    END CONSTRUCTOR.

    METHOD PUBLIC VOID UpdateCustomer(INPUT pCustomerNr AS INT, INPUT-OUTPUT DATASET dsInvoice ):
        DEF VAR hUpdateCustomerService AS HANDLE NO-UNDO.
        RUN USS/Server/Invoice/Services/UpdateCustomer.p PERSISTENT SET hUpdateCustomerService.

        RUN UpdateCustomer IN hUpdateCustomerService (INPUT pCustomerNr, INPUT-OUTPUT DATASET dsInvoice BY-REFERENCE).
        RETURN.
    END METHOD.
END CLASS.

我一直在研究这个问题一段时间了,我希望有人可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

是的,正如Tim所说,你在UpdateCustomer的内部程序ServiceInterfaces.p中使用了2个不同的数据集。

您可以将PARAMETER DATASET-HANDLE更改为:

DEFINE INPUT-OUTPUT PARAMETER DATASET FOR dsSelectionList.
相关问题