Подтвердить что ты не робот

SAP R/3 удаляет конечные пробелы из файлов IDoc XML

У меня есть приложение Java, которое использует библиотеки SAP JCo 3. Один из вариантов использования заключается в получении IDoc файла из экземпляра SAP (R/3, ERP 6.0 EhP 7) и преобразовании его в XML. Проблема в том, что во время преобразования (выполняется библиотекой IDoc) правые пробелы в конце полей обрезаются. По-видимому, уменьшить размер сообщения. До сих пор я не нашел никакой конфигурации, которая может быть выполнена со стороны Java.

Поиск в сети, я нашел следующие предложения со стороны SAP:

  • whiteSpace=preserve из редактора XSD
  • xml.fieldContentFormatting=nothing в файле отправителя /FTP Адаптер

Однако я не смог найти эти инструменты и не настроить их соответственно.

Я хотел бы получить любую информацию об этих двух подходах или любом другом решении.

4b9b3361

Ответ 1

Вы можете проверить, где общая длина поля будет равна этой конкретной длине сегмента. Вы можете использовать RFC IDOCTYPE_READ_COMPLETE. В этом проходе тип IDOC, скажем, MATMAs01. В таблице PT_SEGMENTS вы можете получить длину сегмента.

Вы можете передать эту длину сегмента, чтобы получить полную длину поля.

Ответ 2

Библиотека классов Java Java IDoc не предлагает возможность сохранять конечные SPACES в полях IDoc.

Принудительные символы SPACE в IDoc-полях не предназначены для целей, пока IDoc будет снова отправлен в другую систему SAP. В этом случае они действительно увеличивали бы размер XML-сообщения без добавления значения.

В настоящее время я не могу представить, по какой причине вы хотели бы сохранить эти отстающие пространственные объекты? Символы SPACE являются начальным значением по умолчанию для полей типа ABAP CHAR, поэтому вы также не можете знать, были ли некоторые из этих символов заданы намерениями или нет.

Ответ 3

При работе с XML в ABAP вам нужно искать вызов if_ixml_renderer (или if_ixml_parser) set_normalizing. По умолчанию это включено, и вам нужно отключить это.

"Convert XML to string: l_string
lif_ostream = sif_streamfactory->create_ostream_cstring( l_string ).
lif_renderer = sif_xml->create_renderer( ostream  = lif_ostream
                                         document = mif_xml_document ).
" this stops SAP from removing whitespace and doing spurious edits:
lif_renderer->set_normalizing( false ).

lif_renderer->render( ).