Когда нужно забрать данные из внешней системы в SAP MII, разработчики обычно идут по одному из трех путей:
- Message Listener. Надежный, проверенный стандарт, но строго асинхронный — если внешней системе нужен мгновенный синхронный ответ, этот вариант не подойдет.
- SOAP. Классический XML-подход. Работает стабильно, но тянет за собой лишний оверхед по объему передаваемых сообщений и парсингу.
- REST API. Отдавать данные наружу через SAP MII просто. А вот когда нужно принять входящий POST-запрос с JSON в теле, стандартная документация оставляет больше вопросов, чем ответов.
Разберем простой и рабочий способ принять JSON через HTTP POST, обработать его внутри транзакции MII и сразу вернуть синхронный ответ.
Задача
Принять от внешней системы полезную нагрузку:
|
1 2 3 4 5 6 |
{ "material": 450001, "plant": "1000", "quantity": 125.5, "price": 22 } |
Наша транзакция будет рассчитывать сумму произведением цены и количества и возвращать в виде JSON.
Транзакция должна перемножить price на quantity и вернуть рассчитанную сумму обратно в формате JSON.
Шаг 1. Настройка Transaction Properties
Создаем транзакцию (например, test1). В ее свойствах (Transaction Properties) объявляем два строковых параметра:
input— сюда прилетит сырой JSON из тела входящего запроса.output— сюда запишем готовый ответ.

Шаг 2. Логика обработки внутри транзакции
- Конвертируем входящую строку
inputиз JSON в XML с помощью стандартного экшена. - Считываем поля
priceиquantity, выполняем расчет суммы. - Формируем результирующий JSON и сохраняем его в переменную
output.

Шаг 3. Вызов транзакции через Runner
Чтобы передать тело POST-запроса напрямую в переменную input, отправляем HTTP POST по следующему URL:
{{Base_URL}}/XMII/Runner?Transaction=test/POST/test1&InputParameter=input&Content-Type=text/json&OutputParameter=output
Ключевые параметры строки запроса:
Transaction— полный путь к вашей транзакции в репозитории.InputParameter=input— указывает MII положить всё тело HTTP POST запроса именно в переменнуюinput.OutputParameter=output— указывает, значение какой переменной вернуть клиенту в теле HTTP-ответа.Content-Type=text/json— задает корректный заголовок возвращаемого ответа.

Входные данные отправляются напрямую в Body запроса (raw JSON). Транзакция MII бесшовно подхватывает полезную нагрузку, рассчитывает результат и возвращает ответ вызывающей системе.
По этой же схеме можно не просто считать формулы, а вызывать стандартные BAPI/RFC в ERP: создавать заказы, выполнять валидацию и возвращать клиенту статус с номером созданного документа.
