Technical Articles
SAP Event MeshとSAP S/4HANA Cloudを接続し、イベント駆動アーキテクチャを構築する
はじめに
イベント駆動アーキテクチャをもつ拡張機能を実装するにあたり、重要な役割を持つSAP Event Mesh。SAP Event Meshのテナントの作成が終了していることを前提条件として、SAP S/4HANA Cloudからのイベント受け取り、別のシステムへ連携していくところまでの手順をご紹介します。
SAP Event Meshの概念、およびインスタンスの立て方については本ブログにて紹介していません。そういった内容の詳細に関してはこちらのブログをご覧ください。また、本ブログはSAP S/4HANA Cloudとの連携についての内容です。オンプレミスのSAP S/4HANAとの連携につきましてはこちらをご覧ください。
前提条件
- SAP Event Mesh の管理UIのサブスクライブが完了している
- SAP Event Meshのインスタンス作成が完了している
BTP Cockpitでの設定
SAP Event Meshのインスタンスのサービスキーを作成する
SAP S/4HANA Cloudからイベントを受け取るにあたり、SAP S/4HANA CloudがどこのSAP Event Meshのインスタンスにイベントを発行するのかを設定する必要があります。該当のSAP Event Meshにアクセスするためのアドレスや認証に関する情報を含んだ、サービスキーを作成しましょう。
サービス -> インスタンスおよびサブスクリプション -> インスタンス から該当のSAP Event Meshインスタンスを選択し、サービスキーセクション配下の「作成」をクリックします。
サービスキーの作成
作成されたサービスキーをコピーします。
サービスキーのコピー
SAP S/4HANA Cloud側の設定
通信契約を作成する
SAP S/4HANA CloudからSAP Event Meshにイベントを発行するにあたり、SAP S/4HANA Cloud内で外部との通信を取り扱う窓口を作成する必要があります。これは「通信契約」と呼ばれています。詳細についてはこちらのブログをご覧ください。
今回のSAP Event Meshとの連携では、「SAP_COM_0092:エンタープライズイベンティング統合」という通信シナリオを利用します。作成時のウィザードに「サービスキー」という項目が登場しますが、ここに作成したSAP Event Meshインスタンスのサービスキーを入力し、作成を行います。
通信契約の作成
通信契約の全体像
これでSAP Event Meshのインスタンスとの接続が完了しました。
次にSAP S/4HANA Cloudから発行するイベントの有効化を行います。
イベント送信の有効化を行う
「エンタープライズイベントのイネーブルメント」アプリを起動します。
エンタープライズイベントのイネーブルメント
先ほど作成した通信契約を選択すると、下図の画面に遷移します。
送信トピックセクション内の「作成」から、送信したいイベントトピックを選択し追加します。今回は「sap/s4/beh/outbounddelivery/v1/OutboundDelivery/Created/v1」という、出荷伝票の登録トピックを指定しています。
送信トピックの指定
その他のイベントを指定したい場合には、下記SAP Business Accelerator Hubよりイベントの検索、およびペイロードの参照が可能です。
https://api.sap.com/products/SAPS4HANACloud/events/events
以下では出荷伝票の登録イベントの内容を紹介しています。
ce/sap/s4/beh/outbounddelivery/v1/OutboundDelivery/DelivBlockChanged/v1のヘッダおよびペイロード例
画像上部のSUB(Subscribe)という緑色の四角の横に記載されている文字列(今回はce/sap/s4/beh/outbounddelivery/v1/OutboundDelivery/DelivBlockChanged/v1)をSAP Event Mesh側でサブスクライブすると、このイベントを取得することができます。
次はSAP Event Mesh側の設定をご紹介します。
SAP Event Mesh側の設定
SAP Event Meshを構成する大きな要素として、外部システムからサブスクライブする「Topic」と、受信したイベントを一時的に貯めておく「Queue」、そして受信したイベントを消費システムに送信するための「Webhook」という仕組みが存在します。この章では、それぞれの作成手順をご紹介します。
Queueを作成する
サブスクライブしたSAP Event MeshのUIにアクセスすると、作成したSAP Event Meshインスタンスの一覧が表示されます。インスタンスは、SAP Event Mesh側ではMessage Clientと呼ばれます。
Message Client
「Create Queue」ボタンから任意の名前のQueueを作成すると、指定した名前の先頭にMessage ClientのNamespace(今回はjp10/frbtp/sci)が付いたものが正式なQueueの名前として利用可能になります。
Queueの作成
Topicをサブスクライブする
次にSAP S/4HANA Cloud側で送信トピックとして設定したトピックをサブスクライブします。作成したQueueの横の「Action」タブから「Queue Subscriptions」を選択し、Topicの欄に「<Message ClientのNamespace>/<SAP Business Accelerator Hub上でコピーしたトピック名>」を入力し、「Add」ボタンをクリックすることでサブスクライブを行うことができます。
Topicのサブスクライブ
これでSAP S/4HANA Cloudからイベントを受け取る設定は完了です。
動作確認
この状態でSAP S/4HANA Cloudから出荷伝票の登録を行うと、下図のようにQueueにメッセージが追加されたことが確認できます。
Queueに入ってきたメッセージ
TestタブからQueueに入ったメッセージを取り出してみると、以下のようにSAP Business Accelerator Hubで確認したヘッダおよびペイロードが入っていることが確認できます。
Queueからのメッセージの取り出し
最後に、このメッセージを消費システムに届けるためのWebhookを設定します。
Webhookを設定する
Message Clientの画面に戻り、Webhookタブ内の「Create Webhook」ボタンをクリックし、出現したウィザードに従ってWebhookの作成を行います。その後、Actions内の「Resume」ボタンをクリックすることでWebhookが有効化されます。
Webhookの作成
有効化に成功すると、下図のようなステータスになります。
有効なWebhook
これ以降、該当のイベントを発行すると動作確認の章で確認したペイロードが、Webhookで登録した宛先へと即時、送信されます。
おわりに
SAP Event Meshはイベント駆動アーキテクチャを構成するうえで非常に重要な構成要素です。ぜひ本記事を参考にしながら、Cloud Integration に接続してみたり、CAPアプリケーションに接続してみたりなど、いろいろなシナリオで手元で動かしていただければと思います。