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-адаптер
Однако я не смог ни найти эти инструменты, ни настроить их соответствующим образом.
Буду признателен за понимание этих двух подходов или любого другого решения.
3 ответа
В библиотеке классов SAP Java IDoc отсутствует возможность сохранения конечных пробелов в полях IDoc.
Конечные символы пробела в полях IDoc не служат какой-либо цели до тех пор, пока IDoc не будет снова отправлен в другую систему SAP. В этом случае они действительно только увеличат размер сообщения XML без добавления какого-либо значения.
В настоящее время я не могу себе представить, по какой причине вы хотели бы сохранить эти замыкающие ПРОСТРАНСТВА? Символы пробела являются начальным значением по умолчанию для полей типа ABAP CHAR, поэтому вы также не можете знать, были ли некоторые из этих символов установлены намеренно или нет.
Вы можете проверить, где общая длина поля будет равна длине конкретного сегмента. Вы можете использовать RFC IDOCTYPE_READ_COMPLETE. В этом проходе типа IDOC, скажем, MATMAs01. В таблице PT_SEGMENTS вы можете получить длину сегмента.
Вы можете передать эту длину сегмента, чтобы получить полную длину поля.
При работе с 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( ).