Progress OpenEdge传递一个数据集作为参数丢失值

问题描述:

我试图将一个数据集作为参数传递给一个类,但是数据集一直在丢失它的值。Progress OpenEdge传递一个数据集作为参数丢失值

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

首先调用过程

这是一个单元测试过程调用服务器的serviceInterface等。服务器

此时上

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. 

商业实体

业务实体是一个单独的,含有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. 

我一直在研究这一段时间,我希望有人能帮我弄清楚这一点。

+0

你可以分享你的代码? –

+0

@ArnovanderEnde对不起,我按回车键,问题已发布。我已经完成并添加了代码。 –

+2

当您使用dsInvoice调用BE时,您的输入参数是phdsInvoice - 这些参数必须相同。 –

是的,正如Tim提到的那样,您在内部程序UpdateCustomerServiceInterfaces.p中使用了2个不同的数据集。

可以更改PARAMETER DATASET-HANDLE到:

DEFINE INPUT-OUTPUT PARAMETER DATASET FOR dsSelectionList.