實戰 Deep Insert (SAP OData Service 實戰系列)


在實際開發中我們經常會遇到需要保存多層實體結構到后台系統的場景,比如SAP各種憑證都是抬頭和行項目一起保存,我今天就介紹一下創建深度插入OData實體的詳細步驟。

今天的例子是創建客戶發票憑證,需要同時保存憑證抬頭和行項目,SAP提供的標准BAPI 需要同時輸入憑證的行項目和抬頭信息。

 CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
        EXPORTING
          documentheader    = documentheader
        IMPORTING
          obj_key           = obj_key
        TABLES
          accountgl         = accountgl
          accountreceivable = accountreceivable
          accounttax        = accounttax
          currencyamount    = currencyamount
          return            return.
而我們的OData的設計是這樣的:

所以我們就需要使用SAP OData Service提供的Deep Insert方法,下面是相關的詳細步驟。

 

1.創建DocumentHeader和DocumentItem的關聯

在事務碼SEGW中創建關聯,如下圖:

 

 

 

 點擊創建運行時對象。

這時候系統自動創建了憑證抬頭和行項目之間的關聯,我們為了驗證系統正確的生成了關聯,我們在事務碼:/IWFND/GW_CLIENT中進行驗證,如下圖我們在OData Service的URL中加入$metadata,比如:/sap/opu/odata/BAO/FI_INVCUS_SRV/$metadata

2.重新定義方法/IWBEP/IF_MGW_APPL_SRV_RUNTIME~CREATE_DEEP_ENTITY

首先我們需要定義deep entity的Type, 代碼如下:

    DATA BEGIN OF ls_invoice_data.
        INCLUDE  TYPE /bao/cl_fi_invcus_mpc_ext=>ts_documentheader.
       DATA: documentitemset TYPE /bao/cl_fi_invcus_mpc_ext=>tt_documentitem,
         END OF ls_invoice_data.

然后我們通過以下語句來讀取前台傳來的entity信息:

io_data_provider->read_entry_dataIMPORTING es_data = ls_invoice_data ).

這里需要注意在定義deep entity的時候, documentitemset的命名一定要是 line item的entityset的名字,否不能生成正確的deep entity。

 

 

 3. 關於 Create Deep entity的測試

我們當然可以使用前台的UI5代碼進行測試,但是在集成測試之前使用 SAP Gateway Client進行測試。首先我們通過get expand獲得deep entity的信息,然后點擊 Use as Request。

 

更多精彩,請關注公眾號:環宇的后花園 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM