rap-business-events について
rap-business-eventsは、ABAP CloudでRAPビジネスイベントとSAP Event Meshを使うイベント駆動型設計のガイドスキルです。ローカルおよびシステム間のイベント生成・消費を扱います。
主な機能
- 01RAPビジネスイベントとペイロードの定義
- 02ハンドラーやセーバーメソッドでのイベント発行
- 03イベントとエンタープライズトピックのバインド
- 04SAP Event Mesh配信の設定
- 05ローカルおよび外部イベント消費の案内
活用シーン
- 01RAPビジネスオブジェクトのイベント設計
- 02システム間イベントの公開
- 03ABAPシステム内でのイベント処理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ likweitan/ abap-skills --skill rap-business-eventsインストール後、Claude Code で/rap-business-eventsを入力して読み込まれたか確認します。
同梱ファイルreferences/event-patterns.md
詳細
RAP ビジネスイベントとエンタープライズイベント
ABAP Cloud で RAP ビジネスイベントと SAP Event Mesh を使用して、イベント駆動型パターンを実装するためのガイドです。
ワークフロー
-
ユーザーの目標を特定する:
- RAP BO でビジネスイベントを定義する
- RAP ハンドラーメソッドからイベントを発行する
- 消費用にイベントをバインドする
- 外部システムからイベントを消費する
- SAP Event Mesh と統合する
- ABAP におけるイベント駆動型アーキテクチャを理解する
-
シナリオを特定する:
- ローカルイベント(同一 ABAP システム内)
- エンタープライズイベント(Event Mesh 経由のシステム間イベント)
- イベントプロデューサーとイベントコンシューマーのどちらか
-
RAP のイベント処理パターンに従って、実装を案内する
ビジネスイベントの概要
| 概念 | 説明 |
|---|---|
| ビジネスイベント | BDEF で宣言し、重要な事象が発生したときに発行します |
| イベント定義 | 振る舞い定義でパラメーターとともに正式に宣言します |
| イベント発行 | ハンドラーメソッドまたはセーバーメソッドで RAISE ENTITY EVENT を使用してトリガーします |
| イベントバインディング | RAP イベントを外部配信用のエンタープライズイベントトピックにマッピングします |
| イベント消費 | 外部システムが公開されたイベントをサブスクライブし、応答します |
ビジネスイベントの定義
振る舞い定義(BDL)内
managed implementation in class zbp_r_travel unique;
strict ( 2 );
define behavior for ZR_Travel alias Travel
persistent table ztravel_tab
lock master
authorization master ( instance )
etag master LocalLastChangedAt
{
create;
update;
delete;
"Define business events
event travel_created parameter ZD_TravelCreatedEvt;
event travel_accepted;
event travel_rejected;
}
イベントパラメーター構造
イベントペイロード用の CDS 抽象エンティティを定義します。
@EndUserText.label: 'Travel Created Event'
define abstract entity ZD_TravelCreatedEvt
{
travel_id : /dmo/travel_id;
agency_id : /dmo/agency_id;
customer_id : /dmo/customer_id;
description : /dmo/description;
total_price : /dmo/total_price;
currency : /dmo/currency_code;
}
parameter の追加指定がないイベントには、ペイロードがありません。
ビジネスイベントの発行
ハンドラーメソッド内
METHOD on_travel_accept.
"Read travel data
READ ENTITIES OF zr_travel IN LOCAL MODE
ENTITY Travel
ALL FIELDS
WITH CORRESPONDING #( keys )
RESULT DATA(lt_travels).
"Update status
MODIFY ENTITIES OF zr_travel IN LOCAL MODE
ENTITY Travel
UPDATE FIELDS ( status )
WITH VALUE #( FOR travel IN lt_travels
( %tky = travel-%tky
status = 'A' ) )
REPORTED DATA(lt_reported).
"Raise event for each accepted travel
RAISE ENTITY EVENT zr_travel~travel_accepted
FROM VALUE #( FOR travel IN lt_travels
( %key = travel-%key ) ).
ENDMETHOD.
イベントパラメーターを使用する場合
METHOD on_travel_create.
"After successful creation
RAISE ENTITY EVENT zr_travel~travel_created
FROM VALUE #( FOR travel IN lt_created_travels
( %key = travel-%key
%param = VALUE #(
travel_id = travel-travel_id
agency_id = travel-agency_id
customer_id = travel-customer_id
description = travel-description
total_price = travel-total_price
currency = travel-currency_code ) ) ).
ENDMETHOD.
セーバーメソッド内(追加保存)
METHOD save_modified.
"Raise events in the save phase for committed data
IF create-travel IS NOT INITIAL.
RAISE ENTITY EVENT zr_travel~travel_created
FROM VALUE #( FOR travel IN create-travel
( %key = travel-%key
%param = VALUE #(
travel_id = travel-travel_id ) ) ).
ENDIF.
ENDMETHOD.
イベント処理フロー
1. User action triggers RAP operation
2. Handler method executes business logic
3. RAISE ENTITY EVENT queues the event
4. RAP framework commits the transaction
5. After successful COMMIT:
a. Local event handlers are called
b. Enterprise events are published to Event Mesh
エンタープライズイベントの有効化
イベントバインディング
RAP イベントを外部に公開するには、イベントバインディングを作成します。
ADT: New → Other → Event Binding
Name: Z_EVT_BIND_TRAVEL
イベントバインディングは、RAP イベントをエンタープライズイベントトピックにマッピングします。
| プロパティ | 値 |
|---|---|
| 名前空間 | sap.s4.beh またはカスタム名前空間 |
| ビジネスオブジェクト | ZR_Travel |
| イベント | travel_created |
| トピック | sap/s4/beh/travel/created/v1 |
イベントトピックの構造
<namespace>/<business-object>/<event-name>/<version>
Example: z.custom/travel/created/v1
SAP Event Mesh のチャネルバインディング
- シナリオ
SAP_COM_0092(エンタープライズイベントの有効化)用の通信アレンジメントを作成します - BTP で Event Mesh サービスインスタンスを設定します
- エンタープライズイベントの有効化 Fiori アプリでチャネルを管理します
- イベントトピックを有効化します
イベントの消費
ローカルイベントの消費(同一システム)
イベントハンドラークラスを登録します。
CLASS zcl_travel_event_handler DEFINITION
PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
"Event handler method
METHODS on_travel_created
FOR ENTITY EVENT
travel_created FOR Travel~travel_created.
ENDCLASS.
CLASS zcl_travel_event_handler IMPLEMENTATION.
METHOD on_travel_created.
"React to travel creation
LOOP AT travel_created INTO DATA(ls_event).
"Process event data
DATA(lv_travel_id) = ls_event-travel_id.
"e.g., send notification, update related records
ENDLOOP.
ENDMETHOD.
ENDCLASS.
外部イベントの消費(Event Mesh 経由)
外部システムは、次の方法でトピックをサブスクライブします。
- SAP Event Mesh の Webhook
- SAP Integration Suite
- AMQP または REST API を使用するカスタムアプリケーション
ABAP での外部システムからのイベント消費
"Using the event consumption model
"1. Create event consumption model in ADT
" (imports AsyncAPI spec or defines events manually)
"2. Implement the event handler
CLASS zcl_ext_event_handler DEFINITION
PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_event_handler.
ENDCLASS.
CLASS zcl_ext_event_handler IMPLEMENTATION.
METHOD if_event_handler~handle.
"Parse event payload
DATA(lv_payload) = io_event->get_text( ).
"Process the event
ENDMETHOD.
ENDCLASS.
イベントパターン
ファイア・アンド・フォーゲット
Producer raises event → Event Mesh delivers → Consumer processes independently
- 応答は想定されません
- システム間の疎結合を実現します
- 通知、監査ログ、データレプリケーションのトリガーに最適です
イベントキャリー状態転送
コンシューマーがコールバックする必要がないよう、イベントペイロードにエンティティの全データを含めます。
RAISE ENTITY EVENT zr_travel~travel_created
FROM VALUE #( ( %key = ls_travel-%key
%param = CORRESPONDING #( ls_travel ) ) ).
イベントソーシング
完全な監査証跡を残すため、すべての状態変更をイベントとして記録します。
ベストプラクティス
- 技術的な操作ではなく、ビジネス上意味のある状態変更に対してイベントを定義します
- コンシューマーからのコールバックを避けるため、イベントパラメーターに十分なデータを含めます
- イベントパラメーター型には CDS 抽象エンティティを使用します(明確な契約)
- 検証後にイベントを発行します — 操作が成功する場合にのみ発行します
- イベント処理の失敗に対処します — コンシューマーは冪等にします
- SAP の規則に従い、意味のあるトピック名を使用します
- 下位互換性を保つため、イベントトピックをバージョン管理します(
/v1、/v2)
出力形式
イベントに関するトピックを扱う場合は、次の形式で回答します。
## RAP Business Event Guidance
### Scenario
- Type: [Local event / Enterprise event]
- Role: [Producer / Consumer]
### Implementation
[Event definition, raising, and consumption code]
### Configuration
[Event binding and communication arrangement setup]
参考資料
- RAP ビジネスイベントのチートシート:https://github.com/SAP-samples/abap-cheat-sheets/blob/main/08_RAP_Business_Events.md
- エンタープライズイベントの有効化:https://help.sap.com/docs/abap-cloud/abap-rap/enterprise-event-enablement
- SAP Event Mesh:https://help.sap.com/docs/event-mesh
関連スキル
- rap:イベントを発生させる RAP ビジネスオブジェクトの構築に使用します
- btp-abap-environment:通信アレンジメントを介した Event Mesh 統合の設定に使用します
- authorization-iam:イベント処理とアクセス制御の保護に使用します
コメント
Markdown 対応