サービスキーで SAP CPI の HTTPS iFlow をテストし、その呼び出しをトレースする
Process Integration Runtime のサービスキーの OAuth クライアント資格情報で SAP CPI の HTTPS エンドポイントを呼び出し、作成されたメッセージを見つけて、ステップごとにトレースします。

HTTPS センダーを持つ iFlow は、デプロイは簡単なのに、呼び出すのは意外と面倒です。正しいエンドポイント、正しいサービスキーから取得したトークン、ときには CSRF トークンが必要で、そのうえ呼び出しで作られたメッセージをモニターで探さなければなりません。
この記事では、SAP Cloud Integration(SAP CPI)でのこの一連の流れをすべてたどります。必要なもの、トークンの取得とエンドポイントの呼び出し方、作成されたメッセージの見つけ方、そしてそのトレースの仕方です。
必要なもの
- HTTPS センダーチャネルを持つデプロイ済みの iFlow。その Address(たとえば
/orders/create)がエンドポイントの一部になります。 - エンドポイントの URL:ランタイムのホストの後に
/httpとアドレスを続けたものです。モニターの Manage Integration Content で、デプロイ済みの iFlow について確認できます。 - サービスプラン
integration-flowで、メッセージの送信を許可するロールを持つ Process Integration Runtime のサービスインスタンスと、クライアント ID とクライアントシークレットを含むそのインスタンスのサービスキー。 - iFlow が受け付けるテストペイロード。
トークンを取得してエンドポイントを呼び出す
サービスキーには、呼び出しに必要なものがそろっています。クライアント ID とシークレット、トークンサービスの URL、ランタイムのホストです。
{
"oauth": {
"clientid": "<client id>",
"clientsecret": "<secret>",
"url": "https://<subaccount>.it-cpi<nn>-rt.cfapps.<region>.hana.ondemand.com",
"tokenurl": "https://<subaccount>.authentication.<region>.hana.ondemand.com/oauth/token"
}
}クライアントシークレットはパスワードと同じように扱ってください。キーを共有ファイル、チケット、チャットに載せないようにします。
エンドポイントを呼び出して応答を読む
呼び出しには 2 つのリクエストが必要です。まず client credentials グラントでトークンを取得し、次にそのトークンで実際の呼び出しを行います。
# 1. Get an access token with the client credentials of the service key
curl -X POST "<tokenurl>" \
-u "<clientid>:<clientsecret>" \
-d "grant_type=client_credentials"
# 2. Call the iFlow's HTTPS endpoint with the token
curl -i -X POST "<url>/http/orders/create" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d @order.json
# The response headers include SAP_MessageProcessingLogID: the Message ID of this call.- 401:トークンがない、期限切れ、または別のサブアカウントのものです。
- 403:サービスキーのロールでメッセージを送信できないか、HTTPS センダーが CSRF トークンを要求しています。テスト用のエンドポイントなら、チャネルで CSRF 保護をオフにするか、先にトークンを取得します。
- 404:アドレスが間違っているか、iFlow がデプロイされていません。
- 500:iFlow が失敗しました。どこで失敗したかはメッセージ処理ログでわかります。
ステータスが何であれ、レスポンス header SAP_MessageProcessingLogID がその呼び出しの Message ID を示すので、それを使ってメッセージを開けます。Message ID でメッセージを探すを参照してください。
HTTP Runner でブラウザーから実行する
Kitegra の Toolbox には、iFlow のエンドポイント用の HTTP Runner があります。拡張機能のポップアップの「ツール」ビューから開きます。
- 「新しいコレクション」と「新しいリクエスト」で、GET、POST、PUT、PATCH、DELETE、HEAD のリクエストをまとめたコレクションを作れます。クエリパラメーター、ヘッダー、JSON・XML・テキストの本文やファイルも使えます。
{{variables}}と環境(dev、test、prod):「新しい環境」で追加するか、「環境なし」で送信します。「シークレット」にした変数の値はこのブラウザーに残ります。- 認証:「コレクションから」「なし」「Basic」「Bearer トークン」「OAuth2 クライアント資格情報(サービスキー)」。最後のものでは「サービスキー(Process Integration Runtime)」の JSON を貼り付けると、トークンが自動で取得されます。client secret を含むキーが必要で、証明書ベースのキーには対応していません。
- 「テスト」で応答を確認し(「ステータスが一致」「本文に含む」「JSONPath が一致」「XPath が一致」)、「抽出」で応答の値を変数に保存し、「コレクションを実行」でコレクション全体を順に送信します。
- 「インポート」→「Postman コレクション」で、Postman や OpenAPI から HTTP レシーバーへで紹介しているように Postman のコレクションを取り込めます。「データセット」タブの「各ペイロードを送信」は、テストペイロード生成のデータセットのペイロードを1件ずつ送ります。
「送信」をクリックするまで何も送られず、SAP の Cookie が送られることもありません。Runner が呼び出すのは *.hana.ondemand.com 配下のホストだけです。呼び出し後、「モニターで開く」で SAP_MessageProcessingLogID からメッセージをログビューアーで開けます。エンドポイントからデザイナーのホストを推測できない場合は、環境で「モニターで開く」用のテナント(デザイナーのホスト)を設定します。
呼び出しをトレースする
- デザイナーで iFlow を開き、「Kitegra ツール」ボタンから「メッセージ」を開いて、「Trace: オフ」をオンに切り替えます。
- Runner で「送信」をクリックするか、curl でエンドポイントを呼び出します。
- メッセージが TRACE マーク付きで「メッセージ」パネルに表示されます。「図に表示」を選びます。
- 色の付いたステップをクリックすると、その前のボディ、header、exchange property が表示されます。
トレースのパネルについては、メッセージをステップごとにトレースするで詳しく説明しています。
Kitegra でできること
Kitegra では、サービスキー、認証値、シークレット変数はブラウザーの中にとどまります。サインインすると、Runner のコレクションと環境は、認証値とシークレット変数をすべて取り除いたうえで Kitegra アカウントと同期されます。Runner は無料の Toolbox の一部で、トレースとログビューアーは Message Monitor に属します。
Helper、Message Monitor、iFlow Inspector、iFlow Docs は、それぞれ使用した iFlow の数をカウントします。Kitegra アカウントなしではモジュールごとに 5 つ、Free プランでは 50、Starter では 100、Pro では 300 で、Business は上限なしです。Toolbox とワークスペースの追加機能は無料です。プランを比較する。
次の iFlow で試してみましょう
Kitegra が SAP Integration Suite のデザイナーに何を加えるのかを読むか、Kitegra のほかの Chrome 拡張機能と並べて確認できます。
よくある質問
SAP CPI の HTTPS エンドポイントを OAuth で呼び出すにはどうすればよいですか?
サービスキーのトークン URL から client credentials グラントでトークンを取得し、Authorization: Bearer の header とそのトークンを付けてエンドポイントを呼び出します。
どのサービスキーが必要ですか?
サービスプラン integration-flow で、メッセージの送信を許可するロールを持つ Process Integration Runtime インスタンスのサービスキーです。
HTTPS iFlow から 403 が返るのはなぜですか?
たいていは、キーのロールでメッセージを送信できないか、HTTPS センダーが CSRF トークンを要求しているためです。
呼び出しで作られたメッセージはどうやって見つけますか?
レスポンス header の SAP_MessageProcessingLogID を読みます。それがその呼び出しの Message ID です。
HTTP Runner はサービスキーをどこに保存しますか?
ブラウザーの中です。同期されるコレクションに、認証値やシークレット変数が含まれることはありません。
HTTP Runner は無料ですか?
はい。Toolbox の一部なので、プランの iFlow 数にはカウントされません。