按 Message ID 或 Correlation ID 查找任意 SAP CPI 消息
SAP CPI 的 Message ID、Correlation ID 和 Application ID 从何而来,如何在监控和 API 中搜索它们,以及如何打开一条消息及其相关消息。

合作伙伴说一个订单失败了,并发给您一个 ID。它是 Message ID、Correlation ID,还是他们自己的订单号?又是您的哪个 iFlow 处理了它?在 SAP Cloud Integration(SAP CPI)中,这几种 ID 的含义各不相同,查找方式也各不相同。
本文介绍这三种 ID、如何在 SAP 的监控及其 API 中搜索它们、如何让您自己的消息更容易被找到,以及如何一步打开任意消息及其相关消息。
Message ID、Correlation ID 和 Application ID
- Message ID:一份消息处理日志(MPL)的 ID。在 iFlow 内部,header
SAP_MessageProcessingLogID保存着它,HTTPS 发送方也会在同名的响应 header 中把它返回给调用方。 - Correlation ID:由相互关联的消息的日志共享,例如一条消息以及它通过 ProcessDirect 或 JMS 传递出去的消息。header
SAP_MplCorrelationId保存着它。 - Application ID:您自己的业务键,例如订单号,设置在 header
SAP_ApplicationID中。监控会显示它,并可以按它搜索。
当有人发给您一个 ID 时,Message ID 能找到一条消息,Correlation ID 能找到整条链,而 Application ID 能按对方自己的说法找到他们所说的那条消息。
在 SAP 的监控中搜索
- 打开 Monitor Message Processing。
- 扩大时间范围,覆盖消息运行的时间:所选范围之外的消息不会显示。
- 在搜索字段中输入 ID,或者先选择 iFlow 和状态来缩小列表。
- 打开该消息,查看它的日志、错误,以及(如果它在过去一小时内被跟踪过)它的 Trace。
使用 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。
- 把 ID 粘贴到标有「Message ID 或 Correlation ID」的输入框中,然后选择「查找」。tenant 中任何 iFlow 的消息都可以在这里打开。
- 在各个选项卡中查看消息:「摘要」、「Body 和标头」、「适配器」、「已持久化」和「附件」。
- 打开「时间线」选项卡:它会列出共享同一 Correlation ID 的所有消息,包括所属 iFlow、状态、开始时间和耗时。它不需要 Trace。
- 如果想浏览,可以按 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 标识一份消息处理日志。Correlation ID 由相互关联的消息的日志共享,例如跨 ProcessDirect 或 JMS 的消息。
在哪里可以找到 HTTPS 调用的 Message ID?
在响应 header 中:HTTPS 发送方会把 SAP_MessageProcessingLogID 返回给调用方。
为什么监控找不到我的 Message ID?
通常是时间范围太窄。请扩大范围以覆盖消息运行的时间,或者通过 API 读取日志。
可以按我自己的订单号搜索 SAP CPI 消息吗?
可以,前提是 iFlow 把它写入了日志,例如作为 SAP_ApplicationID 或自定义 header 属性。
日志查看器需要 Trace 吗?
不需要。查找消息、查看摘要和时间线都不需要 Trace。每个步骤之前的消息体和 header 则需要一条在过去一小时内以 TRACE 运行过的消息。
Kitegra 能看到我打开的消息吗?
不能。消息内容只在页面中显示,从不存储或发送给 Kitegra。