Technical Articles
Situation Handling をSAP BTP上のIntelligent Situation Automationでカスタム拡張する
はじめに
Intelligent Situation Automationは、SAP BTP上で提供されているサービスです。SAP S/4HANA Cloudの 「 Situation Handling (状況処理) 」 が業務上の状況を検知してユーザーに通知を行い、特定の作業を促すものであるのに対し、「 Intelligent Situation Automation 」 は、Situation Handlingから受け取った状況に関する情報に基づいて、特定のタスクを自動実行します。
今回のブログでは、「 入庫予定数量の不足検知と、代替サプライヤへの購買発注 」 という拡張シナリオにて、Intelligent Situation Automationの活用シナリオの例をご紹介します。また、この拡張を実装する上での注意点につきましてもまとめておりますので、ぜひ最後までご覧ください。
本活用シナリオの概要
今回のシナリオは以下の図の通りとなります。
シナリオ概要
従来の業務プロセスではマンパワーで発注の欠陥を発見して処理が必要であったところを、
SAP S/4HANA CloudのSituation HandlingとIntelligent Situation Automationの組み合わせを活用することにより、半自動的に欠陥をカバーするタスクを実行することが可能です。これにより、業務が抱える異常をいち早く検知し、リスク回避と業務効率化の両面から正常な業務の遂行をサポートします。
実装アーキテクチャ
今回の実装シナリオのアーキテクチャ
先にアーキテクチャ図を用いて全体を俯瞰してみましょう。基本は図中に注釈のある通りとなりますので、ここでは技術的な補足点をいくつか述べていきます。
- Situation Handlingから渡ってくるコンテキスト
Situation Handlingで作成されたSituationに関する情報がEvent Mesh、Intelligent Situation Automationへと渡ってきます。その内容は、Intelligent Situation Automationの「状況の分析」 アプリから 「状況インスタンス」の詳細を開くことで、「データコンテキスト」タブから確認できます。
データコンテキストの確認
- SAP Build Process AutomationのAPIに関する制約とCAPアプリによるデータ調整
SAP Build Process Automationに用意されているREST APIは、以下のような形での入力をサポートしています。{ "definitionId": "<ワークフローのID>", "context": { "<ワークフロー内で定義された入力パラメータ>" } }
https://api.sap.com/api/SPA_Workflow_Runtime/path/post_v1_workflow_instances
一方、Intelligent Situation Automationから送信されるデータコンテキストは次のように一定です。
{ "input": { "dataContext": "<Situationタイプごとに定義されている出力パラメータ>" } }
従って、CAPアプリやSAP Integration Suite – Cloud Integration等のミドルウェアを挟んで、パラメータを整形・マッピングする必要があります。今回のCAPアプリケーションでは、内部で次のようにデータ整形を行なっています。
try { const payload = JSON.parse(req.body.input.dataContext); console.log("[INFO] Payload successfully parsed as follows: ", payload); const data = { definitionId: "<SAP Build Process AutomationでデプロイしたワークフローのID>", context: { "companycode": payload.I_PURCHASEORDERITEMAPI01.I_PURCHASEORDERAPI01.COMPANYCODE, "purchaseorder": payload.I_PURCHASEORDERITEMAPI01.PURCHASEORDER, "quantity": String(Number(payload.I_POSITNCONFQTYDEFICIT.ORDEREDQUANTITY) - Number(payload.I_POSITNCONFQTYDEFICIT.CONFIRMEDQUANTITY)), "material": payload.I_POSITNCONFQTYDEFICIT.MATERIAL, "purchasinggroup": payload.I_POSITNCONFQTYDEFICIT.PURCHASINGGROUP, "purchasingorganization": payload.I_POSITNCONFQTYDEFICIT.PURCHASINGORGANIZATION, "plant": payload.I_POSITNCONFQTYDEFICIT.PLANT, "supplier": payload.I_POSITNCONFQTYDEFICIT.SUPPLIER } } const SBPA = await cds.connect.to("SBPA"); const response = await SBPA.send({ method: 'POST', path: '/workflow/rest/v1/workflow-instances', data: data }) res.send(`SBPA instance has been started: ${response.id}`); } catch (err) { console.log(`[Error] error has been caught while starting SBPA instance: ${err}`); res.status(500); res.send(`[Error] error has been caught while starting SBPA instance: ${err}`); }
個別のSituationの種類ごとの具体的なdataContextの内容についてはIntelligent Situation Automationの「状況自動化の管理」アプリからご確認ください。
- カスタムCDSビューの活用
今回のシナリオでは、「購買伝票の情報」 と 「サプライヤの詳細情報」 という2つのエンティティからデータを取得しています。しかしSAP Build Process Automation側から2回APIを呼び出すのは手間であるため、今回はカスタムCDSビューを利用しています。幸い、これらは互いに 「サプライヤID」 というキーによって結び付けられており、それを基準にしてそれぞれのエンティティに用意されたCDSビュー同士を結合することができます。この結果をODataとして公開することで、SAP Build Process Automation側から1回APIを呼び出すだけでデータを効率的に読み取ることが可能となりました。
実機デモ
今回のシナリオについて、デモ動画をご用意しました。ぜひご覧ください。
検証を通して見えてきたIntelligent Situation Automationの全体像
本デモシナリオの実装・検証を通して見えてきた、Intelligent Situation Automationの全体像について、自分なりに図式化して、動作機序を視覚的にまとめてみます。
Intelligent Situation Automationの全体像
Intelligent Situation Automationは大きく以下の2つのコンポーネントから成り立っているようです。
- オートメーション
Situation Handlingからコンテキストデータを受け付け、条件判定を行うコンポーネント。コンテキストの値に応じてアクションの呼び出し、または外部REST APIの呼び出しが可能。なおこの際には、出力するデータを変更することはできない。どういったデータを出力するのかに関しては 「状況自動化の管理」アプリから確認可能。
- アクション
外部のOData APIが受けられるプロパティをmetadataから取得しコンテキストのデータをマッピングした上でリクエストを送信する。
これを踏まえ、以下に動作機序をまとめます。
- Situation Handling からIntelligent Situation AutomationにXXXというコンテキストが渡される
- Intelligent Situation Automationはオートメーションでコンテキストを受け、規定の条件判定を行ってアクションを決定する
- 判定結果に応じて「アクション」コンポーネントを呼び出すか、「CUSTOM_ACTION」を呼び出すかを選択できる
- 「アクション」が選択された場合、アクションはODataのmetadataに対してコンテキストのパラメータをマッピングしてエンドポイントにデータを送信する
- 「CUSTOM_ACTION」が選択された場合、外部のREST APIに規定のデータコンテキストを送信する(上記jsonをご参照ください)
【2023/11現在】 Intelligent Situation Automationによる拡張を実装する上での留意事項
ここに記載された内容は2023年11月時点での検証の結果明らかになったことであり、将来時点で状況が異なる可能性がある点には十分ご注意ください。
- SAP S/4HANA Cloud の中に定義された 「状況タイプ」 のうち、現在 Intelligent Situation Automation で拡張できるのは以下SAP Helpに記載のある一部のシナリオのみ。
https://help.sap.com/docs/intelligent-situation-automation/using-intelligent-situation-automation/use-cases-for-intelligent-situation-automation?locale=en-US&version=1.0 - Situation Handling内では、S/4HANA Cloudにおけるユーザーへの通知、もしくはIntelligent Situation AutomationへのSituationデータの送信のどちらかのみを設定できる。双方の同時有効化はできない。
https://help.sap.com/docs/SAP_S4HANA_CLOUD/0e602d466b99490187fcbb30d1dc897c/f1a8c585e3ca4132b3ae595fde3ee58b.html?locale=ja-JP - Intelligent Situation Automation と同じリージョンにて、SAP Event Mesh
(2023/11時点ではAWS – EUのみ) のサブスクライブが完了している必要がある - 「オートメーション」 のみの実装では、REST APIに対して規定のパラメータを送ることのみ可能。従って、SAP Integration Suite等の外部ミドルウェアでパラメータの整形が必要。
- 「アクション」 では OData API の呼び出しが可能であり、$metadata を活用してパラメータのマッピングが可能。ただし、呼び出し先のAPIは、OData V2にのみ対応している。
参考文献
- SAP Help Portal(Intelligent Situation Automation)
https://help.sap.com/docs/intelligent-situation-automation?locale=en-US - Intelligent Situation Automationとは何か?
https://blogs.sap.com/2021/08/06/intelligent-situation-automation-the-next-big-step-in-digital-transformation/ - Intelligent Situation Automationからコンテキストを受け取るカスタムCAPアプリケーションの作成
https://blogs.sap.com/2023/06/27/use-custom-action-in-intelligent-situation-automation-to-resolve-situation-type-quantity-deficit-in-supplier-delivery/
おわりに
本記事では、SAP S/4HANA Cloud – Situation Handling / SAP Intelligent Situation Automation / SAP Build Process Automation の3つの製品とカスタムCAPアプリによる拡張シナリオをご紹介しました。