Как подружить SAP MII с REST API и принимать JSON через POST-запросы

Когда нужно забрать данные из внешней системы в SAP MII, разработчики обычно идут по одному из трех путей:

  • Message Listener. Надежный, проверенный стандарт, но строго асинхронный — если внешней системе нужен мгновенный синхронный ответ, этот вариант не подойдет.
  • SOAP. Классический XML-подход. Работает стабильно, но тянет за собой лишний оверхед по объему передаваемых сообщений и парсингу.
  • REST API. Отдавать данные наружу через SAP MII просто. А вот когда нужно принять входящий POST-запрос с JSON в теле, стандартная документация оставляет больше вопросов, чем ответов.

Разберем простой и рабочий способ принять JSON через HTTP POST, обработать его внутри транзакции MII и сразу вернуть синхронный ответ.

Задача

Принять от внешней системы полезную нагрузку:

Наша транзакция будет рассчитывать сумму произведением цены и количества и возвращать в виде JSON.

Транзакция должна перемножить price на quantity и вернуть рассчитанную сумму обратно в формате JSON.

Шаг 1. Настройка Transaction Properties

Создаем транзакцию (например, test1). В ее свойствах (Transaction Properties) объявляем два строковых параметра:

  • input — сюда прилетит сырой JSON из тела входящего запроса.
  • output — сюда запишем готовый ответ.
Transaction Properties

Шаг 2. Логика обработки внутри транзакции

  1. Конвертируем входящую строку input из JSON в XML с помощью стандартного экшена.
  2. Считываем поля price и quantity, выполняем расчет суммы.
  3. Формируем результирующий 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: создавать заказы, выполнять валидацию и возвращать клиенту статус с номером созданного документа.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *