Модуль в этой статье: Message Monitor
Как найти любое сообщение SAP CPI по Message ID или Correlation ID
Откуда берутся Message ID, Correlation ID и Application ID в SAP CPI, как искать их в мониторе и через API и как открыть сообщение вместе со связанными.

Партнёр сообщает, что заказ не прошёл, и присылает ID. Это Message ID, Correlation ID или номер их собственного заказа? И какой из ваших iFlow его обработал? В SAP Cloud Integration (SAP CPI) каждый из этих ID означает своё, и ищется каждый по-своему.
В этой статье — три вида ID, как искать их в мониторе SAP и через его API, как сделать ваши сообщения проще для поиска и как одним действием открыть любое сообщение вместе со связанными.
Message ID, Correlation ID и Application ID
- Message ID: ID одного журнала обработки сообщения (MPL). Внутри iFlow он хранится в header
SAP_MessageProcessingLogID, а отправитель HTTPS возвращает его вызывающей стороне в заголовке ответа с тем же именем. - 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 и статус, чтобы сузить список.
- Откройте сообщение, чтобы увидеть его журнал, ошибку и, если оно трассировалось в последний час, трассировку.
Поиск через API
OData API Cloud Integration читает те же журналы. Он полезен в скриптах и инструментах поддержки и не зависит от временного диапазона монитора:
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 и как пользовательское свойство заголовка (custom header property), которое монитор показывает и по которому умеет искать:
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, объясняет статья о headers в ProcessDirect и JMS — она пригодится для значений, которые должны переходить из одного iFlow в другой.
Откройте любое сообщение из дизайнера
- В дизайнере нажмите кнопку «Инструменты Kitegra» и выберите «Журналы сообщений». Просмотр журналов откроется в новой вкладке; не закрывайте вкладку дизайнера, потому что просмотрщик читает SAP через неё.
- Вставьте ID в поле «Message ID или Correlation ID» и выберите «Найти». Там открываются сообщения любого iFlow tenant.
- Читайте сообщение на вкладках «Сводка», «Body и заголовки», «Адаптер», «Сохраненные» и «Вложения».
- Откройте вкладку «Хронология»: она перечисляет все сообщения с тем же Correlation ID, с их iFlow, статусом, началом и длительностью. Трассировка для этого не нужна.
- Чтобы просматривать список, фильтруйте по iFlow (или «Все iFlow»), по статусу и по времени «С» и «По».
На панели «Сообщения» открытого iFlow кнопка «Копировать ID» копирует ID сообщения, а «Открыть в мониторе сообщений SAP» открывает для него собственную страницу SAP. Чтобы трассировать найденное сообщение, см. пошаговую трассировку сообщения; чтобы создать сообщение намеренно, протестируйте HTTPS iFlow с сервисным ключом.
Чем помогает Kitegra
Просмотр журналов — часть Message Monitor в Kitegra. Содержимое сообщений показывается на странице и никогда не сохраняется и не отправляется в Kitegra.
Helper, Message Monitor, iFlow Inspector и iFlow Docs по отдельности считают iFlow, на которых вы их используете: 5 на модуль без аккаунта Kitegra, 50 на тарифе Free, 100 на Starter и 300 на Pro; Startup Team даёт каждому участнику 300, у Growth Team и Scale Team ограничений нет. Toolbox и дополнения для рабочего пространства iFlow не учитывают. Пока Kitegra запускается, все инструменты открыты для всех, кто вошёл в аккаунт, в том числе на тарифе Free. Сравните тарифы.
Попробуйте в следующем iFlow
Узнайте, что Kitegra добавляет к дизайнеру SAP Integration Suite, или посмотрите его рядом с другими расширениями Kitegra для Chrome.
Частые вопросы
Чем Message ID отличается от Correlation ID в SAP CPI?
Message ID идентифицирует один журнал обработки сообщения. Correlation ID общий для журналов связанных между собой сообщений, например через ProcessDirect или JMS.
Где найти Message ID HTTPS-вызова?
В заголовках ответа: отправитель HTTPS возвращает вызывающей стороне SAP_MessageProcessingLogID.
Почему монитор не находит мой Message ID?
Обычно слишком узок временной диапазон. Расширьте его, чтобы он охватывал время выполнения сообщения, или прочитайте журнал через API.
Можно ли искать сообщения SAP CPI по номеру моего заказа?
Да, если iFlow записывает его в журнал, например как SAP_ApplicationID или как пользовательское свойство заголовка.
Нужна ли просмотру журналов трассировка?
Нет. Поиск сообщения, его сводка и хронология работают без неё. Для тел и headers перед каждым шагом нужно сообщение, выполненное с TRACE в последний час.
Видит ли Kitegra сообщения, которые я открываю?
Нет. Содержимое сообщений показывается на странице и никогда не сохраняется и не отправляется в Kitegra.