安裝及設定 Business Eventing Toolkit for SAP

本文說明如何安裝及設定適用於 SAP 的 Business Eventing Toolkit。

安裝適用於 SAP 的 Business Eventing Toolkit

當您安裝最新版的 ABAP SDK for Google Cloud 本機版或任何雲端版本時,系統會為您安裝 SAP 的 Business Eventing Toolkit。如要瞭解安裝步驟,請參閱「為 Google Cloud 安裝及設定內部部署或任何雲端版本的 ABAP SDK」。

如果您使用的是 1.9 以下版本的 ABAP SDK for Google Cloud 或任何雲端版本,請將 SDK 更新至最新版本,以便取得適用於 SAP 的 Business Eventing Toolkit。如需更多資訊,請參閱「更新 Google Cloud 適用的 ABAP SDK」。

啟用目標 Google Cloud API

使用目標 Google Cloud 服務前,請確認專案中已啟用對應的Google Cloud API。舉例來說,如果您打算將事件發布至 Pub/Sub,請啟用 Pub/Sub API。

如要瞭解如何啟用 Google Cloud API,請參閱「啟用 API」。

設定驗證方法

設定驗證機制後,您就能在內部部署或任何 Google Cloud 版 ABAP SDK 的雲端版本中存取 API。 Google Cloud SAP 的 Business Eventing Toolkit 會使用相同的驗證方法,將 SAP 事件發布至 API。 Google Cloud 如要瞭解如何在內部部署或任何雲端版 ABAP SDK for Google Cloud 中設定驗證機制,請參閱「驗證機制總覽」。

請確認在 ABAP SDK 中為 Google Cloud 用戶端金鑰設定的服務帳戶,是否具有目標Google Cloud 服務的必要 IAM 角色。

請記下您在驗證設定過程中建立的用戶端金鑰。在 SAP 系統中設定 Business Eventing Toolkit for SAP 時,請使用這個用戶端金鑰。

設定 CloudEvent 屬性

您可以為 CloudEvent 屬性維護預設值。這些值會儲存在 /GOOG/CE_DEFAULT 資料表中。

這是選用設定。您可以直接在程式碼中傳遞 CloudEvent 屬性,或覆寫預設屬性。

如要設定 CloudEvent 屬性,請按照下列步驟操作:

  1. 在 SAP GUI 中執行交易代碼 /GOOG/SDK_IMG

    或者,您也可以執行交易代碼 SPRO,然後按一下「SAP Reference IMG」

  2. 依序點選「ABAP SDK for Google Cloud」>「基本設定」>「業務事件:為 Cloud 事件設定內容屬性」

  3. 按一下「新增項目」

  4. 在下列欄位中輸入值:

    欄位 資料類型 說明
    雲端事件預設屬性鍵 String 指定預設 CloudEvent 屬性設定的名稱。例如:CLOUD_EVENT_ATTRIBUTE_KEY。
    來源 String 提供 URI 參照,用於識別事件發生的內容。
    ID String 事件的專屬 ID。製作者必須確保每個獨立事件的來源 + ID 皆不重複。
    規格版本 String 事件使用的 CloudEvents 規格版本。如果留空,系統會使用 1.0。
    類型 String 說明發生的事件類型。通常用於路由、可觀察性和政策強制執行。
    資料內容類型 String 資料值的內容類型。可讓資料攜帶任何類型的內容。
    資料結構 String 用於識別資料所遵循的結構定義的 URI。
    Subject String 說明事件製作者在事件脈絡中的主題。

    如要瞭解這些欄位的相關資訊,請參閱 CloudEvents 的內容屬性

  5. 儲存新項目。

設定目標 Google Cloud 服務

您可以使用這項設定來維護活動的目標 Google Cloud 服務。

使用 SAP 的 Business Eventing Toolkit 將事件從 SAP 發布至服務時,就會使用這個設定。 Google Cloud

如要設定目標 Google Cloud 服務,請按照下列步驟操作:

  1. 在 SAP GUI 中執行交易代碼 /GOOG/SDK_IMG

    或者,您也可以執行交易代碼 SPRO,然後按一下「SAP Reference IMG」

  2. 依序點選「ABAP SDK for Google Cloud」>「基本設定」>「Business Eventing:為事件設定 Google Cloud 目標」

  3. 按一下「新增項目」

  4. 在下列欄位中輸入值:

    欄位 資料類型 說明
    事件鍵 String 指定發布商事件設定的名稱。例如 EVENT_KEY。
    事件處理器類別 String

    指定事件的處理器類別。請根據目標 Google Cloud 服務選取下列其中一個選項:

    • /GOOG/CL_PUBLISHER_PUBSUB:用於將事件發布到 Pub/Sub。
    • /GOOG/CL_PUBLISHER_CLOUDFUNC:用於將事件發布至 Cloud Run 函式。
    • /GOOG/CL_PUBLISHER_FCM:用於將事件發布至 Firebase 雲端通訊 (FCM)。
    • /GOOG/CL_PUBLISHER_CONNECTORS:用於將事件發布至 Integration Connectors API。
    Google Cloud 金鑰名稱 String 您在驗證設定期間為驗證設定的 Google Cloud 用戶端金鑰。
    事件參數 1 String 指定您要使用的目標 Google Cloud 服務所需的任何其他屬性。
    事件參數 2 String 指定您要使用的目標 Google Cloud 服務所需的任何其他屬性。
    事件參數 3 String 指定您要使用的目標 Google Cloud 服務所需的任何其他屬性。
    雲端事件預設屬性鍵 String 如要將事件傳送為 CloudEvent,請提供您在「設定 CloudEvent 屬性」一節中設定的對應預設屬性鍵值。
    雲端事件:編碼 String

    選取適當的模式來編碼 CloudEvents:

    • 結構化:CloudEvent 屬性會在要求主體中傳遞。
    • 二進位檔:CloudEvent 屬性會傳遞至要求標頭。

    如果您需要略過 CloudEvents 規格,直接將原始事件資料傳送至 Google Cloud 服務,請將這個欄位留空。

  5. 儲存新項目。

擴充發布商模組

如要整合其他 Google Cloud 服務或自訂目標 (而非預先建構的目標),您可以建立自己的實作項目來擴充發布者模組。

如要建立自訂實作項目,請執行下列步驟:

  1. 在 SAP 交易 SE24 中,建立從 /GOOG/CL_PUBLISHER_BASE 繼承的新類別。
  2. 實作 PUBLISH_EVENTVALIDATE_PARAMS 方法。

    • PUBLISH_EVENT:包含用於將事件資料傳送至目標的自訂邏輯。對應輸入參數、傳輸資料,並使用目標的回應填入輸出結構。
    • VALIDATE_PARAMS:讓您驗證所有必要參數是否已在 /GOOG/CE_ROUTER 資料表中設定。如果缺少任何必要值,則會擲回 /GOOG/CX_SDK 類型的例外狀況。

當 ABAP 程式碼執行時,發布者類別會讀取這個表格的設定,以引導事件發布程序。

為商務事件設定監聽器

如要擷取因業務物件變更而觸發的事件,您必須為每個業務物件設定事件監聽器。

建立商家事件連結

您可以使用 SAP 的 Business Eventing Toolkit 建立商務事件連結,自動觸發並發布重要 SAP 商務物件變更,並將其做為事件發布至 Google Cloud 服務。

透過這項連結,您可以定義接收器,做為商務事件的監聽器。

如要建立商家事件連結,請按照下列步驟操作:

  1. 在 SAP GUI 中執行交易代碼 SWETYPV

  2. 按一下「新增項目」

  3. 指定適當的業務物件類別和業務物件類型。

  4. 使用 SAP 的 Business Eventing Toolkit,指定要監聽及轉送的事件。

  5. 在「Receiver Type」欄位中輸入 Google_CloudGoogle

  6. 在「Linkage Setting (Receiver)」部分中,提供下列資訊:

    • 接收端通話:從下拉式清單中選取「方法」
    • 類別名稱:輸入 /GOOG/CL_BO_EVENT_FORWARD
  7. 勾選「Linkage Activated」核取方塊。

  8. 儲存設定。

將事件監聽器對應至事件鍵

如要定義 SAP 專用 Business Eventing Toolkit 處理特定 SAP 業務事件以進行整合的方式,請將業務事件的事件監聽器對應至可維持事件發布設定的事件鍵。 Google Cloud

如要將事件監聽器對應至事件鍵,請按照下列步驟操作:

  1. 在 SAP GUI 中執行交易代碼 /GOOG/SDK_IMG

    或者,您也可以執行交易代碼 SPRO,然後按一下「SAP Reference IMG」

  2. 依序點選「ABAP SDK for Google Cloud」>「Business Eventing: Configure Event Listeners for Business Objects」

  3. 按一下「新增項目」

  4. 在下列欄位中輸入值:

    欄位 資料類型 說明
    物件類型 CHAR 您在交易 SWETYPV 中設定的商家物件名稱。
    事件 CHAR 連結至商家物件的事件名稱。
    收件者姓名 CHAR 在交易 SWETYPV 中,針對物件類型和事件組合所設定的接收器名稱。
    事件鍵 CHAR 在「設定目標服務」 Google Cloud 部分維護的發布商事件設定名稱。
    處理器類別 CHAR

    (非必要) 您已編寫任何額外邏輯來填入事件主體或擴充擴充屬性,處理器類別的名稱 此類別必須實作介面 /GOOG/IF_BOR_EVNT_DATA_HANDLER

    如要進一步瞭解如何建立處理器類別,請參閱「擴充處理器類別」。

  5. 儲存設定。

預設內容和雲端事件擴充功能屬性

根據預設,當您將事件發布至 Pub/Sub 時,事件事件會將下列屬性從業務事件容器轉送至目標Google Cloud 服務:

{
  "EVENT_OBJECT": "BUS2012",
  "EVENT_OBJECT_KEY": "450000011",
  "EVENT_NAME": "CHANGED",
  "EVENT_CREATOR": "USER-ID",
  "EVENT_CREATION_DATE": "20250321",
  "EVENT_CREATION_TIME": "135050",
  "EVENT_CREATION_TIMESTAMP": "20250321135050",
  "EVENT_CREATION_LANGUAGE": "EN"
}

如果已設定雲端事件屬性,則酬載結構如下:

{
  "eventObjectType": "BUS2012", - Picked from Event Container
  "eventObjectKey": "450000011", - Picked from Event Container
  "eventName": "RELEASED", - Picked from Event Container
  "eventCreator": "USER", - Picked from Event Container
  "eventCreationDate": "20250321", -Picked from Event Container
  "eventCreationTime": "135850", - Picked from Event Container
  "eventCreationTimestamp": "20250321135850", - Picked from Event Container
  "id": "D5D1CB352A321FD081FFF6EEA9566190", - Auto Populated
  "source": "sap-s4hana-doc",  - Picked from CE Defaults
  "type": "pochanged", - Picked from CE Defaults
  "specversion": "1.0", - Picked from CE Defaults
  "time": "2025-04-09T16:16:38Z", - Auto Populated
  "subject": "test-subject-A" - Picked from CE Defaults Table
}

如果您在事件監聽器中建立及設定處理器類別,則產生的酬載會反映自訂酬載結構。

擴充處理器類別

您可以使用 SAP 的 Business Eventing Toolkit 設定資料,並在雲端事件中加入其他擴充屬性。如要這麼做,請實作繼承介面 /GOOG/IF_BOR_EVNT_DATA_HANDLER 的類別,並實作介面方法 FILL_EVENT_DATA。此方法包含下列匯入和變更參數:

名稱 類型 關聯類型 說明
SENDER 匯入中 SIBFLPORB 本機持久物件參照:BOR 相容
EVENT 匯入中 SIBFEVENT 活動
EVENT_CONTAINER 匯入中 類型參照至 IF_SWF_IFS_PARAMETER_CONTAINER 用於傳輸參數的容器
RECTYPE 匯入中 SWFERECTYP 接收器類型名稱
HANDLER 匯入中 SIBFLPORB 本機持久物件參照:BOR 相容
CT_DATA 正在進行變更 /GOOG/CL_PUBLISHER_BASE=>TT_MESSAGES 訊息表格
CT_CE_EXTN_ATTRIBUTES 正在進行變更 /GOOG/T_CE_ATTR_VALUE Cloud 事件:屬性名稱、值組合表

商務物件 BUS2012 (訂購單) 的實作範例,可將 PO 標頭資訊納入雲端事件主體:

 TYPES: BEGIN OF ty_event_attributes,
             ekgrp TYPE ekgrp,
             werks TYPE werks_d,
             stlnr TYPE stnum,
             stlal TYPE mast-stlal,
             stlty TYPE stko-stlty,
           END OF ty_event_attributes.
    DATA: ls_po_header TYPE bapimepoheader.

    DATA: ls_event_attributes TYPE ty_event_attributes,
          lv_json             TYPE string.

    DATA ls_data TYPE /goog/cl_publisher_base=>ty_message.

    CALL FUNCTION 'BAPI_PO_GETDETAIL1'
      EXPORTING
        purchaseorder = '4500000007'
      IMPORTING
        poheader      = ls_po_header.

    /ui2/cl_json=>serialize(
      EXPORTING
        data   = ls_po_header
      RECEIVING
        r_json = lv_json
    ).

    ls_data-data = lv_json.
    APPEND ls_data TO ct_data.

設定 RAP 事件的監聽器

針對每個要傳送至 Google Cloud的 RAP 事件,您都需要建立事件處理常式類別。這個事件處理常式類別會充當 RAP 事件的事件監聽器。

如要以程式輔助方式建立事件處理常式類別,您可以使用 GitHub 上的社群資源。您需要提供 RAP 實體詳細資料,並產生事件處理常式類別。如要瞭解事件物件,請參閱 SAP 說明文件 SAP Business Accelerator Hub

如要手動建立事件處理常式類別,請執行下列操作:

  1. 為 RAP 事件建立 ABAP 類別:

    1. 在 ABAP 套件上按一下滑鼠右鍵,然後依序選取「New」>「ABAP Class」
    2. 請為 ABAP 類別輸入下列詳細資料:

      • Name:類別名稱,例如 ZCL_PRODUCT_EXT
      • 說明:類別的說明,例如 Event handler for RAP events
    3. 按一下「完成」

  2. 請依照下列方式更新類別定義:

      class CLASS_NAME definition
      public
      abstract
      final
      for events of RAP_ENTITY_NAME .
    
        public section.
        protected section.
        private section.
        ENDCLASS.
    
    CLASS CLASS_NAME IMPLEMENTATION.
    ENDCLASS.
    

    更改下列內容:

    • CLASS_NAME:類別名稱,例如 ZCL_PRODUCT_EXT
    • RAP_ENTITY_NAME:RAP 實體的名稱,例如 R_PRODUCT
  3. 開啟「Local Types」分頁,然後建立本機實作:

    CLASS lcl_event_extension DEFINITION INHERITING FROM cl_abap_behavior_event_handler.
    
    PRIVATE SECTION.
      METHODS on_EVENT_NAME FOR ENTITY EVENT
         created FOR RAP_ENTITY_NAME~EVENT_NAME.
    ENDCLASS.
    
    CLASS lcl_event_extension IMPLEMENTATION.
    
      METHOD on_EVENT_NAME.
        TRY.
            /goog/cl_event_publisher=>publish_event(
              EXPORTING
                iv_event_key = 'EVENT_KEY'
                it_data      = VALUE #( FOR <ls_created> IN created (
                                        data = /goog/cl_json=>serialize( data = <ls_created> ) ) )
              IMPORTING
                et_output    = DATA(lt_output)
            ).
          CATCH /goog/cx_sdk INTO DATA(lo_exp).
    "Error handling logic here
        ENDTRY.
      ENDMETHOD.
    ENDCLASS.
    

更改下列內容:

  • EVENT_NAME:事件名稱,例如 CREATED
  • RAP_ENTITY_NAME:RAP 實體的名稱,例如 ZCL_PRODUCT_EXT
  • EVENT_KEY:含有目標設定的事件索引鍵。

為 IDoc 事件設定監聽器

如要擷取因 IDoc 變更而觸發的事件,您必須為 IDoc 事件設定事件監聽器。

設定 IDoc 事件監聽器

如要定義 SAP 專用 Business Eventing Toolkit 處理 IDoc 事件以進行整合的方式,請為 IDoc 事件設定事件監聽器。 Google Cloud 您可以將 IDoc 事件監聽器對應至事件鍵,以便保留發布事件的設定

如要設定 IDoc 事件監聽器,請按照下列步驟操作:

  1. 在 SAP GUI 中執行交易代碼 /GOOG/SDK_IMG

    或者,您也可以執行交易代碼 SPRO,然後按一下「SAP Reference IMG」

  2. 依序點選「ABAP SDK for Google Cloud」>「Business Eventing: Configure Event Listeners for IDoc」

  3. 按一下「新增項目」

  4. 在下列欄位中輸入值:

    欄位 資料類型 說明
    基本類型 CHAR 要將事件傳送至 Google Cloud的 IDoc 基本類型名稱,例如 MATMAS05
    IDoc 方向 CHAR IDoc 的方向:InboundOutbound
    事件鍵 CHAR 在「設定目標服務」 Google Cloud 部分維護的發布商事件設定名稱。
    處理器類別 CHAR

    (非必要) 您已編寫任何額外邏輯來填入事件主體或擴充擴充屬性,處理器類別的名稱 此類別必須實作介面 /GOOG/IF_IDOC_EVT_DATA_HANDLER

    如要進一步瞭解如何建立處理器類別,請參閱「擴充處理器類別」。

  5. 儲存設定。

預設內容和雲端事件擴充功能屬性

根據預設,當您將事件發布至 Pub/Sub 時,事件事件會轉送下列屬性:

{
  "messages": [
    {
      "attributes": {
        "idocNumber": "0000000000000134",
        "direct": "1",
        "messageType": "MATMAS",
        "basicType": "MATMAS05",
        "createdOn": "20250515",
        "createdAt": "132254",
        "updatedOn": "20250410",
        "updatedAt": "144958"
      },
      "data": [
        {
          "mandt": "100",
          "docnum": "0000000000000132",
          "segnum": "000001",
          "segnam": "E1MARAM",
          "hlevel": "02",
          "dtint2": 1000,
          "sdata": "    TEST-MATNR-IDOC-0111032025KRITIS       11032025KRITIS     KL                  ROH C01                       EA"
        },
        {
          "mandt": "100",
          "docnum": "0000000000000132",
          "segnum": "000002",
          "segnam": "E1MARA1",
          "psgnum": "000001",
          "hlevel": "03",
          "dtint2": 1000
        }
        // ...additional IDOC segments
      ]
    }
  ]
}

如果已設定雲端事件屬性,則酬載結構如下:

{
  "id": "D5D1CB352A321FD081FFF6EEA9566190",   // Auto Populated
  "source": "sap-s4hana-doc",               // Picked from CE Defaults
  "type": "pochanged",                      // Picked from CE Defaults
  "specversion": "1.0",                     // Picked from CE Defaults
  "time": "2025-04-09T16:16:38Z",           // Auto Populated
  "subject": "test-subject-A",              // Picked from CE Defaults Table
  "messages": [
    {
      "attributes": {
        "idocNumber": "0000000000000134",
        "direct": "1",
        "messageType": "MATMAS",
        "basicType": "MATMAS05",
        "createdOn": "20250515",
        "createdAt": "132254",
        "updatedOn": "20250410",
        "updatedAt": "144958"
      },
      "data": [
        {
          "mandt": "100",
          "docnum": "0000000000000132",
          "segnum": "000001",
          "segnam": "E1MARAM",
          "hlevel": "02",
          "dtint2": 1000,
          "sdata": "    TEST-MATNR-IDOC-0111032025KRITIS       11032025KRITIS     KL                  ROH C01                       EA"
        },
        {
          "mandt": "100",
          "docnum": "0000000000000132",
          "segnum": "000002",
          "segnam": "E1MARA1",
          "psgnum": "000001",
          "hlevel": "03",
          "dtint2": 1000
        }
        // ...additional IDOC segments
      ]
    }
  ]
}

如果您在事件監聽器中建立及設定處理器類別,則產生的酬載會反映自訂酬載結構。

擴充處理器類別

您可以使用 SAP 的 Business Eventing Toolkit 自訂事件資料,並為雲端事件新增擴充屬性。如要這麼做,請實作繼承介面 /GOOG/IF_IDOC_EVT_DATA_HANDLER 的類別,並實作介面方法 FILL_EVENT_DATA

FILL_EVENT_DATA 方法的參數如下:

名稱 類型 關聯類型 說明
IS_IDOC_CONTRL 匯入中 EDIDC IDoc 的控制記錄。
IT_IDOC_DATA 匯入中 TAB_EDIDD IDoc 資料記錄表。
CT_DATA 正在進行變更 /GOOG/CL_PUBLISHER_BASE=>TT_MESSAGES 訊息表格
CT_CE_EXTN_ATTRIBUTES 正在進行變更 /GOOG/T_CE_ATTR_VALUE Cloud 事件:屬性名稱、值組合表

將 IDoc 事件發布功能與標準 SAP IDoc 程序整合

如要將 IDoc 事件發布至 Google Cloud 服務,您必須將 Business Eventing Toolkit for SAP 的 IDoc 事件轉送邏輯整合至現有的 SAP IDoc 處理程序。這樣一來,當 IDocs 建立、變更或達到特定狀態時,系統就會自動將相關資料發布為事件。

您可以使用下列任一方法整合 IDoc 事件發布功能:

使用 IDOC_DATA_MAPPER BAdI

IDOC_DATA_MAPPER Business Add-In (BAdI) 可讓您導入自訂邏輯,在處理傳入和傳出 IDoc 時觸發。您可以使用這個 BAdI 將 IDoc 事件發布至 Google Cloud。

如要實作 IDOC_DATA_MAPPER BAdI,請按照下列步驟操作:

  1. 開啟交易 SE18
  2. 在「BAdI Name」欄位中輸入 IDOC_DATA_MAPPER
  3. 前往「Implementation」選單,然後選取「Create」
  4. 在「Name of Enhancement Implementation」欄位中,輸入增強功能實作項目的名稱,例如 ZEI_IDOC_DATA_MAPPER
  5. 在實作內容中,將實作類別的名稱更新為 /GOOG/CL_IM_BADI_IDOC_MAPPER
  6. 啟用 BAdI 實作項目。

使用現有的強化功能退出

如果 IDoc 處理流程中已存在現有增強項目,您可以直接在這些項目中插入 IDoc 事件發布邏輯。

將下列 ABAP 程式碼片段插入強化退出:

DATA : lt_return TYPE bapiret2_t.

/goog/cl_idoc_event_forward=>publish_event(
      EXPORTING
        is_control = IDOC_CONTROL " Replace with your IDoc control record
        it_data    = IDOC_DATA " Replace with your IDoc data records
      IMPORTING
        et_return  = lt_return
).

" Handle errors if LT_RETURN contains erroneous records.

更改下列內容:

使用自訂函式模組 (根據 OWN_FUNCTION 範本)

如要發布傳出 IDoc 事件,您可以設定 SAP IDoc 處理作業,以便呼叫以標準 OWN_FUNCTION 範本為基礎的自訂函式模組。這個自訂函式模組可讓您在資料傳送至 Google Cloud 目標服務之前,處理 IDoc 資料並觸發事件發布。

如要進一步瞭解如何使用自訂函式模組發布傳出 IDoc 事件的詳細設定步驟,請參閱 SAP 公用程式 Business Eventing Toolkit。在實作自訂函式時,您可以使用 GitHub 上的 Z 實作範例。

取得支援

如需協助解決 ABAP SDK for Google Cloud 的問題,請按照下列步驟操作: