如何自行給指定的SAP OData服務新增自定義日誌記錄功能

i042416發表於2019-11-28

有的時候,SAP標準的OData實現或者相關的工具沒有提供我們想記錄的日誌功能,此時可以利用SAP系統強大的擴充套件特性,進行自定義日誌功能的二次開發。

以SAP CRM Fiori應用“My Opportunity”為例:我們首先在其OData服務CRM_OPPORTUNITY的實現類CL_CRM_OPPORTUNITY_IMPL的建構函式方法CONSTRUCTOR裡設定一個值為GET_BADI的動態斷點,這樣除錯模式下,ABAP偵錯程式會自動停在所有出現了GET BADI關鍵字呼叫的地方。

如何自行給指定的SAP OData服務新增自定義日誌記錄功能

通過這個方法,我們很快找到了一個能夠放置我們自定義日記記錄邏輯的地方:就是程式碼85行的BAdI定義,CRM_OPPORTUNITY_ODATA_DB. 在SAP標準OData服務實現的讀取操作裡,每次從資料庫呼叫One Order API讀取Opportunity資料後,都要執行這個BAdI.

如何自行給指定的SAP OData服務新增自定義日誌記錄功能

這是該BAdI執行的呼叫棧:

如何自行給指定的SAP OData服務新增自定義日誌記錄功能

事務碼SE18,根據我們剛剛找到的BAdI定義建立一個增強實現:

如何自行給指定的SAP OData服務新增自定義日誌記錄功能 如何自行給指定的SAP OData服務新增自定義日誌記錄功能 如何自行給指定的SAP OData服務新增自定義日誌記錄功能

這個增強實現類ZCL_JERRY_ODATA_TRACE裡,現在可以編寫我們的日誌記錄邏輯了。

首先建立一個資料庫表,用於存放我們的日誌記錄。為簡單起見,我僅僅記錄了請求的使用者名稱,請求日期和時間,大家可以根據自己實際需求新增相關欄位。

如何自行給指定的SAP OData服務新增自定義日誌記錄功能

增強程式碼也很簡單:

DATA(ls_log) = VALUE zorder_guid( user_name = sy-uname
      req_date = sy-datum req_time = sy-timlo ).
    CALL FUNCTION 'SYSTEM_UUID_CREATE'
      IMPORTING
        uuid = ls_log-guid.
    INSERT zorder_guid FROM ls_log.

如何自行給指定的SAP OData服務新增自定義日誌記錄功能

啟用這個增強後,到Fiori UI上隨便做幾個點選操作:

如何自行給指定的SAP OData服務新增自定義日誌記錄功能

回到我們自定義的日誌記錄表裡,發現填充了一些記錄了,這個自定義日誌記錄功能就實現了。

如何自行給指定的SAP OData服務新增自定義日誌記錄功能

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

如何自行給指定的SAP OData服務新增自定義日誌記錄功能


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2666010/,如需轉載,請註明出處,否則將追究法律責任。

相關文章