SAP CPI のメッセージを Message ID または Correlation ID で探す方法
SAP CPI の Message ID、Correlation ID、Application ID の出どころ、モニターと API での検索方法、そしてメッセージと関連メッセージを開く方法を解説します。

取引先から、注文が失敗したという連絡とともに ID が送られてきました。それは Message ID でしょうか、Correlation ID でしょうか、それとも先方の注文番号でしょうか。そして、どの iFlow がそれを処理したのでしょうか。SAP Cloud Integration(SAP CPI)では、これらの ID はそれぞれ意味が異なり、探し方も異なります。
この記事では、3 種類の ID、SAP のモニターと API での検索方法、自分のメッセージを見つけやすくする方法、そして任意のメッセージを関連メッセージとともに 1 ステップで開く方法を説明します。
Message ID、Correlation ID、Application ID
- Message ID:1 つのメッセージ処理ログ(MPL)の ID です。iFlow の中では header
SAP_MessageProcessingLogIDがこれを保持し、HTTPS センダーは同じ名前のレスポンス header で呼び出し元に返します。 - Correlation ID:互いに関連するメッセージのログが共有する ID です。たとえば、あるメッセージと、それが ProcessDirect や JMS で渡したメッセージです。header
SAP_MplCorrelationIdがこれを保持します。 - Application ID:注文番号などの独自のビジネスキーで、header
SAP_ApplicationIDに設定します。モニターに表示され、検索にも使えます。
ID を受け取ったとき、Message ID なら 1 件のメッセージが、Correlation ID なら一連のメッセージ全体が、Application ID なら相手の言葉で言うところのそのメッセージが見つかります。
SAP のモニターで検索する
- Monitor Message Processing を開きます。
- メッセージが実行された時刻を含むように期間を広げます。選んだ期間外のメッセージは表示されません。
- 検索欄に ID を入力するか、先に iFlow とステータスを選んで一覧を絞り込みます。
- メッセージを開き、ログ、エラー、そして過去 1 時間以内にトレースされていればそのトレースを確認します。
API で検索する
Cloud Integration の OData API は同じログを読み取ります。スクリプトやサポートツールで役に立ち、モニターの期間に左右されません。
GET https://<tenant>/api/v1/MessageProcessingLogs('<Message ID>')
GET https://<tenant>/api/v1/MessageProcessingLogs?$filter=CorrelationId eq '<Correlation ID>'&$orderby=LogStart
GET https://<tenant>/api/v1/MessageProcessingLogs?$filter=ApplicationMessageId eq '<your ID>'呼び出しには、その tenant でモニタリング権限を持つユーザーが必要です。
メッセージを見つけやすくする
Message ID も Correlation ID も、業務担当者にとっては意味がありません。ビジネスキーは自分でログに書き込みましょう。Application ID として、そしてモニターに表示され検索にも使えるカスタム header プロパティとして書き込みます。
import com.sap.gateway.ip.core.customdev.util.Message
def Message processData(Message message) {
def orderId = message.getProperty("orderId") as String
// Shown and searchable in the monitor as a custom header property.
messageLogFactory.getMessageLog(message)?.addCustomHeaderProperty("OrderId", orderId)
// Shown in the monitor as the message's Application ID.
message.setHeader("SAP_ApplicationID", orderId)
return message
}iFlow 間で受け渡すべき値については、ProcessDirect と JMS の header に関する記事で、それぞれのリンクで何が渡るのかを説明しています。
デザイナーから任意のメッセージを開く
- デザイナーで「Kitegra ツール」ボタンをクリックし、「メッセージログ」を選びます。ログビューアーが新しいタブで開きます。ビューアーはデザイナーのタブを通じて SAP を読み取るので、デザイナーのタブは開いたままにしてください。
- 「Message ID または Correlation ID」と書かれた欄に ID を貼り付け、「検索」を選びます。tenant のどの iFlow のメッセージでもここで開けます。
- タブでメッセージを確認します。「概要」、「Body とヘッダー」、「アダプター」、「永続化」、「添付ファイル」です。
- 「タイムライン」タブを開くと、同じ Correlation ID を持つすべてのメッセージが、iFlow、ステータス、開始時刻、所要時間とともに一覧表示されます。トレースは不要です。
- 一覧から探す場合は、iFlow(または「すべての iFlow」)、ステータス、「開始日」と「終了日」の時刻で絞り込みます。
開いている iFlow の「メッセージ」パネルでは、「ID をコピー」でメッセージの ID をコピーでき、「SAP のメッセージモニターで開く」で SAP 自身のページを開けます。見つけたメッセージをトレースするには メッセージをステップごとにトレースするを、意図的にメッセージを作るには サービスキーで HTTPS iFlow をテストするを参照してください。
Kitegra でできること
ログビューアーは、Kitegra の Message Monitor の一部です。メッセージの内容はページ内に表示されるだけで、保存も Kitegra への送信もされません。
Helper、Message Monitor、iFlow Inspector、iFlow Docs は、それぞれ使用した iFlow の数をカウントします。Kitegra アカウントなしではモジュールごとに 5 つ、Free プランでは 50、Starter では 100、Pro では 300 です。Startup Team はメンバーごとに 300、Growth Team と Scale Team は上限なしです。Toolbox とワークスペースの追加機能は iFlow をカウントしません。Kitegra のローンチ期間中は、Free プランを含め、サインインしているすべての人がすべてのツールを使えます。プランを比較する。
次の iFlow で試してみましょう
Kitegra が SAP Integration Suite のデザイナーに何を加えるのかを読むか、Kitegra のほかの Chrome 拡張機能と並べて確認できます。
よくある質問
SAP CPI の Message ID と Correlation ID の違いは何ですか?
Message ID は 1 つのメッセージ処理ログを識別します。Correlation ID は、ProcessDirect や JMS をまたぐものなど、互いに関連するメッセージのログが共有します。
HTTPS 呼び出しの Message ID はどこで見つかりますか?
レスポンス header です。HTTPS センダーは SAP_MessageProcessingLogID を呼び出し元に返します。
モニターで Message ID が見つからないのはなぜですか?
たいていは期間が狭すぎます。メッセージが実行された時刻を含むように期間を広げるか、API でログを読み取ってください。
自社の注文番号で SAP CPI のメッセージを検索できますか?
できます。ただし、iFlow がそれを SAP_ApplicationID やカスタム header プロパティとしてログに書き込んでいる場合に限ります。
ログビューアーにはトレースが必要ですか?
いいえ。メッセージの検索、概要、タイムラインはトレースなしで使えます。各ステップの前のボディと header を見るには、過去 1 時間以内に TRACE で実行されたメッセージが必要です。
開いたメッセージは Kitegra に見えますか?
いいえ。メッセージの内容はページ内に表示されるだけで、保存も Kitegra への送信もされません。