2015-10-05 8 views
11

SAP JCo 3ライブラリを使用するJavaアプリケーションがあります。ユースケースの1つは、SAPインスタンス(R/3、ERP 6.0 EhP 7)からIDocファイルを受信し、それをXMLに変換することです。問題は、変換中(IDocライブラリーによって実行される)に、フィールドの最後にある正しいスペースがトリミングされることです。どうやら、メッセージのサイズを減らすためです。これまでのところ、私はJava側から行うことができる設定は見つかりませんでした。しかしSAP R/3はIDoc XMLファイルから末尾のスペースを削除します。

  • 送信側ファイル/ FTPでxml.fieldContentFormatting=nothing アダプタ

を設定XSDエディタ

  • からwhiteSpace=preserve設定:ネットの検索

    は、私は、SAP側からの次の提案が発見しました私はこれらのツールを見つけることも、それに応じて設定することもできませんでした。

    これらの2つのアプローチまたは他の解決策についての洞察を私は感謝します。

  • +1

    トリミングされるスペースの効果は何ですか?もう何ができませんか? –

    +1

    IDocデータは、後で処理するために空白を維持したまま、そのままXMLに変換する必要があります。また、元のIDocフィールド長と実際のXMLフィールド長の間の整合性を保つため。 – CountD

    答えて

    0

    フィールドの合計の長さが特定のセグメントの長さに等しくなるようにチェックすることができます。 RFC IDOCTYPE_READ_COMPLETEを使用することができます。このパスIDOCタイプでは、MATMAs01と言う。 テーブルPT_SEGMENTSでは、セグメントの長さを取得できます。

    このセグメント長を渡すと、完全なフィールド長を取得できます。

    0

    SAP Java IDocクラスライブラリには、IDoc項目に後続のSPACESを保存するオプションはありません。

    IDocフィールドの末尾のスペース文字は、IDocが最後に別のSAPシステムに再度送信される限り、目的を果たせません。この場合、実際には値を追加せずに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(). 
    
    関連する問題