2015-10-05 85 views
11

我有一个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

然而 适配器,我无法找到这些工具,也没有相应地配置它们。

我希望对这两种方法或任何其他解决方案有所了解。

+1

修剪空间的效果是什么?什么不再工作? –

+1

IDoc数据应按原样转换为XML,以保留用于后续处理的空白区域。此外,要保持原始IDoc字段长度和实际XML字段长度之间的一致性。 – CountD

回答

0

您可以检查该字段的总长度等于该特定段长度的位置。 您可以使用RFC IDOCTYPE_READ_COMPLETE。在这个IDOC类型中,说MATMAs01。 在表格PT_SEGMENTS中,您可以获取片段长度。

您可以传递此段长度以获取完整的字段长度。

0

SAP Java IDoc类库不提供保留IDoc字段中尾随SPACES的选项。

只要IDoc将在最后发送到另一个SAP系统,则IDoc字段中的尾随SPACE字符不起任何作用。在这种情况下,他们确实只会放大XML消息大小而不添加任何值。

我目前无法想象为什么要保留那些尾随空间? SPACE字符是ABAP CHAR类型字段的默认初始值,因此您也无法知道这些字符中的某些字符是否已按意图设置。

0

在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().