mcpField
R
rap-business-events

rap-business-events

github.com/likweitan開発7285 回インストール2 週間前に更新
リポジトリ

rap-business-events について

rap-business-eventsは、ABAP CloudでRAPビジネスイベントとSAP Event Meshを使うイベント駆動型設計のガイドスキルです。ローカルおよびシステム間のイベント生成・消費を扱います。

主な機能

  1. 01RAPビジネスイベントとペイロードの定義
  2. 02ハンドラーやセーバーメソッドでのイベント発行
  3. 03イベントとエンタープライズトピックのバインド
  4. 04SAP Event Mesh配信の設定
  5. 05ローカルおよび外部イベント消費の案内

活用シーン

  1. 01RAPビジネスオブジェクトのイベント設計
  2. 02システム間イベントの公開
  3. 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 を使用して、イベント駆動型パターンを実装するためのガイドです。

ワークフロー

  1. ユーザーの目標を特定する:

    • RAP BO でビジネスイベントを定義する
    • RAP ハンドラーメソッドからイベントを発行する
    • 消費用にイベントをバインドする
    • 外部システムからイベントを消費する
    • SAP Event Mesh と統合する
    • ABAP におけるイベント駆動型アーキテクチャを理解する
  2. シナリオを特定する:

    • ローカルイベント(同一 ABAP システム内)
    • エンタープライズイベント(Event Mesh 経由のシステム間イベント)
    • イベントプロデューサーとイベントコンシューマーのどちらか
  3. 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 のチャネルバインディング
  1. シナリオ SAP_COM_0092(エンタープライズイベントの有効化)用の通信アレンジメントを作成します
  2. BTP で Event Mesh サービスインスタンスを設定します
  3. エンタープライズイベントの有効化 Fiori アプリでチャネルを管理します
  4. イベントトピックを有効化します

イベントの消費

ローカルイベントの消費(同一システム)

イベントハンドラークラスを登録します。

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 ) ) ).
イベントソーシング

完全な監査証跡を残すため、すべての状態変更をイベントとして記録します。

ベストプラクティス

  1. 技術的な操作ではなく、ビジネス上意味のある状態変更に対してイベントを定義します
  2. コンシューマーからのコールバックを避けるため、イベントパラメーターに十分なデータを含めます
  3. イベントパラメーター型には CDS 抽象エンティティを使用します(明確な契約)
  4. 検証後にイベントを発行します — 操作が成功する場合にのみ発行します
  5. イベント処理の失敗に対処します — コンシューマーは冪等にします
  6. SAP の規則に従い、意味のあるトピック名を使用します
  7. 下位互換性を保つため、イベントトピックをバージョン管理します(/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:イベントを発生させる RAP ビジネスオブジェクトの構築に使用します
  • btp-abap-environment:通信アレンジメントを介した Event Mesh 統合の設定に使用します
  • authorization-iam:イベント処理とアクセス制御の保護に使用します

コメント