本文档介绍了如何安装和配置适用于 SAP 的 Business Eventing Toolkit。
安装适用于 SAP 的 Business Eventing Toolkit
当您安装最新版本的本地版本或任何云版本的 ABAP SDK for Google Cloud 时,系统会为您安装适用于 SAP 的企业事件处理工具包。如需了解安装步骤,请参阅安装和配置本地版本或任何云版本的 ABAP SDK for Google Cloud。
如果您使用的是本地版本或任何云版本的 ABAP SDK for Google Cloud 1.9 版或更低版本,请将您的 SDK 更新到最新版本,以获取适用于 SAP 的 Business Eventing Toolkit。如需了解详情,请参阅更新 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 中设置身份验证以访问 API 后,适用于 SAP 的企业事件处理工具包会使用相同的身份验证方法将 SAP 事件发布到 API。 Google Cloud Google Cloud 如需了解如何在本地版本或任何云版本的 ABAP SDK for Google Cloud 中设置身份验证,请参阅身份验证概览。
确保在 ABAP SDK for Google Cloud 客户端密钥配置中配置的服务账号具有特定于目标Google Cloud 服务的所需 IAM 角色。
请记下您在身份验证设置过程中创建的客户端密钥。在 SAP 系统中配置适用于 SAP 的业务事件处理工具包时,您可以使用此客户端密钥。
配置 CloudEvent 属性
您可以为 CloudEvent 属性保留默认值。这些值存储在表 /GOOG/CE_DEFAULT
中。
这是可选配置。您可以在代码中直接传递 CloudEvent 属性或替换默认属性。
如需配置 CloudEvent 属性,请执行以下操作:
在 SAP GUI 中,执行事务代码
/GOOG/SDK_IMG
。或者,执行事务代码
SPRO
,然后点击 SAP Reference IMG。依次点击 ABAP SDK for Google Cloud > 基本设置 > 企业事件:为云事件配置上下文属性。
点击新建条目。
输入以下字段的值:
字段 数据类型 说明 Cloud 事件默认属性键 字符串 为默认的 CloudEvent 属性配置指定名称。例如:CLOUD_EVENT_ATTRIBUTE_KEY。 来源 字符串 提供用于标识事件发生情境的 URI 引用。 ID 字符串 事件的唯一标识符。生产者必须确保每个不同的事件的来源 + ID 都是唯一的。 规范版本 字符串 事件使用的 CloudEvents 规范版本。如果您将此字段留空,系统会使用 1.0。 类型 字符串 描述发生的事件的类型。通常用于路由、可观测性和政策强制执行。 数据内容类型 字符串 数据值的内容类型。支持数据携带任何类型的内容。 数据架构 字符串 用于标识数据遵循的架构的 URI。 Subject 字符串 描述事件生产者上下文中的事件主题。 如需了解这些字段,请参阅 CloudEvents 上下文属性。
保存新条目。
配置目标 Google Cloud 服务
您可以使用此设置来维护事件的目标 Google Cloud 服务。
使用适用于 SAP 的业务事件处理工具包将事件从 SAP 发布到服务时,需要使用此设置。 Google Cloud
如需配置目标 Google Cloud 服务,请执行以下操作:
在 SAP GUI 中,执行事务代码
/GOOG/SDK_IMG
。或者,执行事务代码
SPRO
,然后点击 SAP Reference IMG。依次点击 ABAP SDK for Google Cloud > 基本设置 > 企业事件:为事件配置 Google Cloud 目标。
点击新建条目。
输入以下字段的值:
字段 数据类型 说明 事件键 字符串 指定发布商事件配置的名称。例如,EVENT_KEY。 事件处理器类 字符串 指定事件的处理器类。根据您的目标 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
:用于将事件发布到集成连接器 API。
Google Cloud 密钥名称 字符串 您在身份验证设置期间为了向 Google Cloud 进行身份验证而配置的客户端密钥。 事件参数 1 字符串 指定您要使用的目标服务所需的任何其他属性。 Google Cloud 事件参数 2 字符串 指定您要使用的目标服务所需的任何其他属性。 Google Cloud 事件参数 3 字符串 指定您要使用的目标服务所需的任何其他属性。 Google Cloud Cloud 事件默认属性键 字符串 如需将事件作为 CloudEvent 发送,请提供您在配置 CloudEvent 属性部分中配置的相应默认属性键的值。 Cloud 事件:编码 字符串 选择适合编码 CloudEvent 的模式:
- 结构化:CloudEvent 属性在请求正文中传递。
- 二进制:CloudEvent 属性会传递到请求标头中。
如果您需要绕过 CloudEvents 规范,直接将原始事件数据发送到服务,请将此字段留空。 Google Cloud
-
保存新条目。
扩展发布商模块
如需与预构建目标之外的其他服务或自定义目标集成,您可以通过创建自己的实现来扩展发布商模块。 Google Cloud
如需创建自定义实现,请执行以下操作:
- 在 SAP 事务
SE24
中,创建一个继承自/GOOG/CL_PUBLISHER_BASE
的新类。 实现
PUBLISH_EVENT
和VALIDATE_PARAMS
方法。PUBLISH_EVENT
:包含用于将事件数据发送到目标的自定义逻辑。映射输入参数、传输数据,并使用目标的响应填充输出结构。VALIDATE_PARAMS
:可让您验证表/GOOG/CE_ROUTER
中是否已配置所有必要的参数。如果缺少任何必需值,则引发类型为/GOOG/CX_SDK
的异常。
运行 ABAP 代码时,Publisher 类会从此表中读取配置,以指导事件发布流程。
为商家事件配置监听器
如需捕获因业务对象更改而触发的事件,您需要为每个业务对象配置业务事件监听器。
如需配置商家事件监听器,请执行以下操作:
在 SAP GUI 中,执行事务代码
SWETYPV
。点击新建条目。
指定适当的业务对象类别和业务对象类型。
使用适用于 SAP 的 Business Eventing Toolkit 指定要监听的事件并转发该事件。
在接收器类型字段中,输入
Google_Cloud
或Google
。在关联设置(接收器)部分,提供以下信息:
- 接收器调用:从下拉列表中选择方法。
- 类名称:输入
/GOOG/CL_BO_EVENT_FORWARD
。
选中关联已启用复选框。
保存配置。
将事件监听器映射到事件键
如需将事件监听器映射到事件键,请执行以下操作:
在 SAP GUI 中,执行事务代码
/GOOG/SDK_IMG
。或者,执行事务代码
SPRO
,然后点击 SAP Reference IMG。依次点击 ABAP SDK for Google Cloud > 基本设置 > 企业事件:为企业对象配置事件监听器。
点击新建条目。
输入以下字段的值:
字段 数据类型 说明 对象类型 CHAR 您在事务 SWETYPV
中配置的商家对象的名称。事件 CHAR 与商家对象关联的事件的名称。 收货人姓名 CHAR 针对对象类型和事件组合在事务 SWETYPV
中配置的接收器的名称。事件键 CHAR 配置目标服务 Google Cloud 部分中维护的发布商事件配置的名称。 处理器类 CHAR 可选。您编写了用于填充事件正文或扩展扩展属性的任何其他逻辑的处理器类的名称。此类必须实现接口
/GOOG/IF_BOR_EVNT_DATA_HANDLER
。如需了解如何创建处理器类,请参阅扩展处理器类。
保存配置。
默认正文和 Cloud Event Extension 属性
默认情况下,事件监听器会将以下属性(属于事件容器的一部分)转发到目标,具体取决于事件键:
{
"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
}
如果您在事件监听器中创建并配置了处理器类,则生成的载荷会反映您的自定义载荷结构。
扩展 Processor 类
借助商家事件套件,您可以设置数据并向云事件添加其他扩展属性。
为此,请实现一个继承接口 /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 Event:属性名称、值对表 |
以下是业务对象 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。
如需手动创建事件处理脚本类,请执行以下操作:
为 RAP 事件创建 ABAP 类:
- 右键点击 ABAP 软件包,然后依次选择 New > ABAP Class。
为 ABAP 类输入以下详细信息:
- 名称:类的名称,例如
ZCL_PRODUCT_EXT
。 - 说明:类的说明,例如
Event handler for RAP events
。
- 名称:类的名称,例如
点击完成。
按如下所示更新类定义:
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。
打开 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
:具有目标配置的事件键。
获取支持
如果您在解决 ABAP SDK for Google Cloud 问题时需要帮助,请执行以下操作:
在 Cloud 论坛上提出问题并与社区讨论 ABAP SDK for Google Cloud。
收集所有可用的诊断信息,并与 Cloud Customer Care 联系。如需了解如何与 Customer Care 联系,请参阅获取 SAP on Google Cloud支持。