В SAP MII есть служба сообщений, которая позволяет легко обрабатывать входящие сообщения (например IDOC из SAP). Благодаря этому другая система может отправить сообщение по http на адрес http://<Адрес SAP MII>:<Порт SAP MII>/XMII/Illuminator?service=WSMessageListener&mode=WSMessageListenerServer&NAME=<Имя сообщения>
В новом интеграционном потоке сообщение содержит только часть данных. Дополнительную информацию надо было запрашивать у системы-источника отдельно. На первый взгляд ничего сложного, однако в продуктивной системе столкнулся с ситуацией, когда система-источник при большой нагрузке сама еще не знает о дополнительных данных. В результате этого сообщение не сохраняется и помечается как Failed.
В качестве решения можно в правилах обработки поставить Processing Type — Category и обрабатывать его из планировщика. Ранее я уже делал подобное, однако в этот раз решил попробовать более простое решение и, как оказалось, оно тоже работает.
Логика основной транзакции без изменений. Нужно только сделать новую транзакцию, которая будет запускаться из планировщика с нужным интервалом. В этой транзакции получаем список сообщений, которые имеют статус Failed и меняет им статус на Received. Далее Listener сам запускает их обработку. Конечно нужно ограничение на выборку сообщений, что бы совсем ошибочные сообщения не запускались вечно.
В результате транзакция имеет следующий вид:
