Situation Handling をSAP BTP上のIntelligent Situation Automationでカスタム拡張する
2023-11-17 16:46:11 Author: blogs.sap.com(查看原文) 阅读量:3 收藏

Intelligent Situation Automationは、SAP BTP上で提供されているサービスです。SAP S/4HANA Cloudの 「 Situation Handling (状況処理) 」 が業務上の状況を検知してユーザーに通知を行い、特定の作業を促すものであるのに対し、「 Intelligent Situation Automation 」 は、Situation Handlingから受け取った状況に関する情報に基づいて、特定のタスクを自動実行します。

今回のブログでは、「 入庫予定数量の不足検知と、代替サプライヤへの購買発注​ 」 という拡張シナリオにて、Intelligent Situation Automationの活用シナリオの例をご紹介します。また、この拡張を実装する上での注意点につきましてもまとめておりますので、ぜひ最後までご覧ください。

今回のシナリオは以下の図の通りとなります。

%u30B7%u30CA%u30EA%u30AA%u6982%u8981

シナリオ概要

従来の業務プロセスではマンパワーで発注の欠陥を発見して処理が必要であったところを、
SAP S/4HANA CloudのSituation HandlingとIntelligent Situation Automationの組み合わせを活用することにより、半自動的に欠陥をカバーするタスクを実行することが可能です。これにより、業務が抱える異常をいち早く検知し、リスク回避と業務効率化の両面から正常な業務の遂行をサポートします。

%u4ECA%u56DE%u306E%u5B9F%u88C5%u30B7%u30CA%u30EA%u30AA%u306E%u30A2%u30FC%u30AD%u30C6%u30AF%u30C1%u30E3

今回の実装シナリオのアーキテクチャ

先にアーキテクチャ図を用いて全体を俯瞰してみましょう。基本は図中に注釈のある通りとなりますので、ここでは技術的な補足点をいくつか述べていきます。

  1. Situation Handlingから渡ってくるコンテキスト
    Situation Handlingで作成されたSituationに関する情報がEvent Mesh、Intelligent Situation Automationへと渡ってきます。その内容は、Intelligent Situation Automationの「状況の分析」 アプリから 「状況インスタンス」の詳細を開くことで、「データコンテキスト」タブから確認できます。
    %u30C7%u30FC%u30BF%u30B3%u30F3%u30C6%u30AD%u30B9%u30C8%u306E%u78BA%u8A8D

データコンテキストの確認

  1. 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の「状況自動化の管理」アプリからご確認ください。

  1. カスタムCDSビューの活用
    今回のシナリオでは、「購買伝票の情報」 と 「サプライヤの詳細情報」 という2つのエンティティからデータを取得しています。しかしSAP Build Process Automation側から2回APIを呼び出すのは手間であるため、今回はカスタムCDSビューを利用しています。幸い、これらは互いに 「サプライヤID」 というキーによって結び付けられており、それを基準にしてそれぞれのエンティティに用意されたCDSビュー同士を結合することができます。この結果をODataとして公開することで、SAP Build Process Automation側から1回APIを呼び出すだけでデータを効率的に読み取ることが可能となりました。

今回のシナリオについて、デモ動画をご用意しました。ぜひご覧ください。

本デモシナリオの実装・検証を通して見えてきた、Intelligent Situation Automationの全体像について、自分なりに図式化して、動作機序を視覚的にまとめてみます。

Intelligent%20Situation%20Automation%u306E%u5168%u4F53%u50CF

Intelligent Situation Automationの全体像

Intelligent Situation Automationは大きく以下の2つのコンポーネントから成り立っているようです。

  • オートメーション
    Situation Handlingからコンテキストデータを受け付け、条件判定を行うコンポーネント。コンテキストの値に応じてアクションの呼び出し、または外部REST APIの呼び出しが可能。なおこの際には、出力するデータを変更することはできない。どういったデータを出力するのかに関しては 「状況自動化の管理」アプリから確認可能。
  • アクション
    外部のOData APIが受けられるプロパティをmetadataから取得しコンテキストのデータをマッピングした上でリクエストを送信する。

これを踏まえ、以下に動作機序をまとめます。

  1. Situation Handling からIntelligent Situation AutomationにXXXというコンテキストが渡される
  2. Intelligent Situation Automationはオートメーションでコンテキストを受け、規定の条件判定を行ってアクションを決定する
    • 判定結果に応じて「アクション」コンポーネントを呼び出すか、「CUSTOM_ACTION」を呼び出すかを選択できる
    • 「アクション」が選択された場合、アクションはODataのmetadataに対してコンテキストのパラメータをマッピングしてエンドポイントにデータを送信する
    • 「CUSTOM_ACTION」が選択された場合、外部のREST APIに規定のデータコンテキストを送信する(上記jsonをご参照ください)

ここに記載された内容は2023年11月時点での検証の結果明らかになったことであり、将来時点で状況が異なる可能性がある点には十分ご注意ください。

本記事では、SAP S/4HANA Cloud – Situation Handling / SAP Intelligent Situation Automation / SAP Build Process Automation の3つの製品とカスタムCAPアプリによる拡張シナリオをご紹介しました。


文章来源: https://blogs.sap.com/2023/11/17/situation-handling-%e3%82%92sap-btp%e4%b8%8a%e3%81%aeintelligent-situation-automation%e3%81%a7%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e6%8b%a1%e5%bc%b5%e3%81%99%e3%82%8b/
如有侵权请联系:admin#unsafe.sh