安装和配置 Business Eventing Toolkit for SAP

本文档介绍了如何安装和配置 Business Eventing Toolkit for SAP。

安装 Business Eventing Toolkit for SAP

当您安装本地版本或任何云版本的 ABAP SDK for Google Cloud 的最新版本时,系统会为您安装 Business Eventing Toolkit for SAP。如需了解安装步骤,请参阅安装和配置本地版本或任何云版本的 ABAP SDK for Google Cloud

如果您使用的是本地版本或任何云版本的 ABAP SDK for Google Cloud 1.9 版或更低版本,请将您的 SDK 更新到最新版本,以获取 Business Eventing Toolkit for SAP。如需了解详情,请参阅更新 ABAP SDK for Google Cloud

启用目标 Google Cloud API

在使用目标 Google Cloud 服务之前,请确保您的项目中已启用相应的Google Cloud API。例如,如果您计划将事件发布到 Pub/Sub,请启用 Pub/Sub API。

如需了解如何启用 Google Cloud API,请参阅启用 API

设置身份验证

在本地版本或任何云版本的 ABAP SDK for Google Cloud 中设置身份验证以访问 Google Cloud API 后,Business Eventing Toolkit for SAP 会使用相同的身份验证方法向 Google Cloud API 发布 SAP 事件。如需了解如何在本地版本或任何云版本的 ABAP SDK for Google Cloud 中设置身份验证,请参阅身份验证概览

确保在 ABAP SDK for 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 > 基本设置 > Business Eventing:为云事件配置上下文属性

  3. 点击新建条目

  4. 输入以下字段的值:

    字段 数据类型 说明
    云事件默认属性键 String 为默认 CloudEvent 属性配置指定名称。例如:CLOUD_EVENT_ATTRIBUTE_KEY。
    来源 String 提供用于标识事件发生的上下文的 URI 引用。
    ID String 事件的唯一标识符。 提供方必须确保来源 + ID 对于每个不同事件都是唯一的。
    规范版本 String 事件使用的 CloudEvents 规范版本。如果您将此字段留空,系统会使用 1.0。
    类型 String 描述发生的事件的类型。通常用于路由、可观测性和政策强制执行。
    数据内容类型 String 数据值的内容类型。使数据能够传输任何类型的内容。
    数据架构 String 用于标识数据所遵循的架构的 URI。
    Subject String 描述事件在事件提供方上下文中的主题。

    如需了解这些字段,请参阅 CloudEvents 上下文属性

  5. 保存新条目。

配置目标 Google Cloud 服务

您可以使用此设置来维护事件的目标 Google Cloud 服务。

使用 Business Eventing Toolkit for SAP 将事件从 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 functions。
    • /GOOG/CL_PUBLISHER_FCM:用于将事件发布到 Firebase Cloud Messaging (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 代码运行时,发布方类会从此表中读取配置,以引导事件发布流程。

为业务事件配置监听器

如需捕获因业务对象更改而触发的事件,您需要为每个业务对象配置事件监听器。

创建业务事件关联

您可以使用 Business Eventing Toolkit for SAP 创建业务事件关联,以自动触发关键 SAP 业务对象更改并将这类更改作为事件发布到 Google Cloud 服务。

通过这种关联,您可以定义一个接收器,用作业务事件的监听器。

如需创建业务事件关联,请执行以下操作:

  1. 在 SAP GUI 中,执行事务代码 SWETYPV

  2. 点击新建条目

  3. 指定适当的业务对象类别和业务对象类型。

  4. 指定您希望使用 Business Eventing Toolkit for SAP 监听并转发的事件。

  5. 接收器类型字段中,输入 Google_CloudGoogle

  6. 关联设置(接收器)部分中,提供以下信息:

    • 接收器调用:从下拉列表中选择方法
    • 类名称:输入 /GOOG/CL_BO_EVENT_FORWARD
  7. 选中已激活关联复选框。

  8. 保存配置。

将事件监听器映射到事件键

如需定义 Business Eventing Toolkit for SAP 针对 Google Cloud 集成处理特定 SAP 业务事件的方式,请将业务事件的监听器映射到为发布事件维护设置的事件键。

如需将事件监听器映射到事件键,请执行以下操作:

  1. 在 SAP GUI 中,执行事务代码 /GOOG/SDK_IMG

    或者,执行事务代码 SPRO,然后点击 SAP Reference IMG

  2. 依次点击 ABAP SDK for Google Cloud > 基本设置 > Business Eventing:为业务对象配置事件监听器

  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
}

如果您在事件监听器中创建和配置处理器类,则生成的载荷会反映您的自定义载荷结构。

扩展处理器类

借助 Business Eventing Toolkit for SAP,您可以设置数据并向云事件添加其他扩展属性。为此,请实现一个继承接口 /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 云事件:属性名称、值对表

将采购订单标头信息作为云事件正文添加的业务对象 BUS2012(采购订单)实现示例:

 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 软件包,然后选择新建 > ABAP 类
    2. 为 ABAP 类输入以下详细信息:

      • 名称:类的名称,例如 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. 打开本地类型标签页,然后创建本地实现:

    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 事件监听器

如需定义 Business Eventing Toolkit for SAP 针对 Google Cloud 集成处理 IDoc 事件的方式,请为 IDoc 事件配置事件监听器。您可以将 IDoc 事件监听器映射到为发布事件而维护设置的事件键。

如需配置 IDoc 事件监听器,请执行以下操作:

  1. 在 SAP GUI 中,执行事务代码 /GOOG/SDK_IMG

    或者,执行事务代码 SPRO,然后点击 SAP Reference IMG

  2. 依次点击 ABAP SDK for Google Cloud > 基本设置 > Business Eventing:为 IDoc 配置事件监听器

  3. 点击新建条目

  4. 输入以下字段的值:

    字段 数据类型 说明
    基本类型 CHAR IDoc 基本类型的名称,您希望针对该类型向 Google Cloud发送事件,例如 MATMAS05
    IDoc 方向 CHAR IDoc 的方向:Inbound(入站)或 Outbound(出站)。
    事件键 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
      ]
    }
  ]
}

如果您在事件监听器中创建和配置处理器类,则生成的载荷会反映您的自定义载荷结构。

扩展处理器类

借助 Business Eventing Toolkit for SAP,您可以自定义事件数据并向云事件添加扩展属性。为此,请实现一个继承接口 /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 云事件:属性名称、值对表

将 IDoc 事件发布与标准 SAP IDoc 流程集成

如需将 IDoc 事件发布到 Google Cloud 服务,您需要将 Business Eventing Toolkit for SAP 的 IDoc 事件转发逻辑集成到现有的 SAP IDoc 处理中。这样可确保在 IDoc 进行创建、更改或达到特定状态时,其数据会自动作为事件进行发布。

您可以使用以下方法之一集成 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 名称字段中,输入 IDOC_DATA_MAPPER
  3. 前往实现菜单,然后选择创建
  4. 增强实现名称字段中,输入增强实现的名称,例如 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 事件的详细配置步骤,请参阅 Business Eventing Toolkit for SAP 实用程序。在实现自定义函数时,您可以使用 GitHub 上提供的示例 Z 实现。

获取支持

如果您在解决 ABAP SDK for Google Cloud 问题时需要帮助,请执行以下操作: