SAP R/3从IDoc XML文件中删除尾随空格
问题描述:
我有一个Java应用程序使用SAP JCo 3库。其中一个用例包括从SAP实例(R/3,ERP 6.0 EhP 7)接收IDoc文件并将其转换为XML。问题是,在转换期间(由IDoc库执行),字段末尾的右侧空格会被修剪。显然,为了减少消息的大小。到目前为止,我还没有发现可以从Java端完成的任何配置。SAP R/3从IDoc XML文件中删除尾随空格
搜索网,我发现从SAP方面提出以下建议:
- 从XSD编辑
- 在发件人文件设置
xml.fieldContentFormatting=nothing
设置whiteSpace=preserve
/FTP
然而 适配器,我无法找到这些工具,也没有相应地配置它们。
我希望对这两种方法或任何其他解决方案有所了解。
答
您可以检查该字段的总长度等于该特定段长度的位置。 您可以使用RFC IDOCTYPE_READ_COMPLETE。在这个IDOC类型中,说MATMAs01。 在表格PT_SEGMENTS中,您可以获取片段长度。
您可以传递此段长度以获取完整的字段长度。
答
SAP Java IDoc类库不提供保留IDoc字段中尾随SPACES的选项。
只要IDoc将在最后发送到另一个SAP系统,则IDoc字段中的尾随SPACE字符不起任何作用。在这种情况下,他们确实只会放大XML消息大小而不添加任何值。
我目前无法想象为什么要保留那些尾随空间? SPACE字符是ABAP CHAR类型字段的默认初始值,因此您也无法知道这些字符中的某些字符是否已按意图设置。
答
在ABAP中使用XML时,您需要看的是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().
修剪空间的效果是什么?什么不再工作? –
IDoc数据应按原样转换为XML,以保留用于后续处理的空白区域。此外,要保持原始IDoc字段长度和实际XML字段长度之间的一致性。 – CountD