跳到主要内容
← 返回博客

本文涉及的模块: Message Monitor

按 Message ID 或 Correlation ID 查找任意 SAP CPI 消息

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

按 Message ID 或 Correlation ID 查找任意 SAP CPI 消息

合作伙伴说一个订单失败了,并发给您一个 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 的监控中搜索

  1. 打开 Monitor Message Processing。
  2. 扩大时间范围,覆盖消息运行的时间:所选范围之外的消息不会显示。
  3. 在搜索字段中输入 ID,或者先选择 iFlow 和状态来缩小列表。
  4. 打开该消息,查看它的日志、错误,以及(如果它在过去一小时内被跟踪过)它的 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 的文章说明了每种链接能传递什么。

在设计器中打开任意消息

  1. 在设计器中,点击「Kitegra 工具」按钮并选择「消息日志」。日志查看器会在新标签页中打开;请保持设计器标签页打开,因为查看器通过它读取 SAP。
  2. 把 ID 粘贴到标有「Message ID 或 Correlation ID」的输入框中,然后选择「查找」。tenant 中任何 iFlow 的消息都可以在这里打开。
  3. 在各个选项卡中查看消息:「摘要」、「Body 和标头」、「适配器」、「已持久化」和「附件」。
  4. 打开「时间线」选项卡:它会列出共享同一 Correlation ID 的所有消息,包括所属 iFlow、状态、开始时间和耗时。它不需要 Trace。
  5. 如果想浏览,可以按 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。

无需离开设计器即可处理 iFlow

将 Kitegra 添加到 Chrome 或 Microsoft Edge。免费开始,无需账户。