:::: МЕНЮ ::::

Передача INITIAL значений в ABAP Proxy

Недавно я настраивал интеграцию одного сервиса, где из SAP необходимо было передать набор полей, часть из которых были необязательны к заполнению. На стороне ABAP использовался класс, сгенерированный на основе WSDL поставщика. До определенного момента все работало хорошо. Проблемы начались, когда потребовалось передать в опциональном параметре значение по умолчанию (INITIAL). В этом случае сгенерированная полезная нагрузка не содержала нужных тегов в окончательном XML-документе. Из-за отсутствия тэгов, сервер возвращал ошибку передачи данных.

Если вы использовали PROXY сервисы, то вероятно замечали, каждая сгенерированная структура содержит поле CONTROLLER типа PRXCTRLTAB. Поле CONTROLLER в большинстве случаев не используется, за исключением когда необходима явная настройка обработки значений по умолчанию.
Структура таблицы CONTROLLER заполняется следующим образом:

  • В поле FIELD указывается имя поля для обработки
  • В поле VALUE указывается режим обработки

Значения для VALUE определены в группе типов SAI

  • SAI_CTRL_INITIAL — отправляет значение по умолчанию
  • SAI_CTRL_NIL — передает тэг с атрибутом xsi:nil=’true’
  • SAI_CTRL_NONE — не передает тэг

Перед отправкой данных, в сервисе необходимо активировать расширенную обработку XML. Для этого, в протоколе полезной нагрузки IF_WSPROTOCOL_PAYLOAD необходимо передать ABAP_TRUE в метод GET_EXTENDED_XML_HANDLING.

Справка от SAP: Activating Extended XML Handling


Присоединиться к обсуждению...