2015-10-05 86 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().