2017-03-02 11 views
1

データセットをパラメータとしてクラスに渡そうとしていますが、データセットは値を失い続けています。進捗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. 

ビジネスエンティティ

ビジネスエンティティは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申し訳ありませんが、私はenterを押して質問が投稿されました。私はそれを終了し、コードを追加しました。 –

+2

dsInvoiceでBEを呼び出している間は、入力パラメータがphdsInvoiceです。これらは同じである必要があります。 –

答えて

1

はい、Timが述べたように、内部プロシージャUpdateCustomerの2つの異なるデータセットをServiceInterfaces.pに使用します。

あなたはにPARAMETER DATASET-HANDLEを変更することができます:あなたのコードを共有することができ

DEFINE INPUT-OUTPUT PARAMETER DATASET FOR dsSelectionList. 
関連する問題