2015-10-05 7 views
11

Ho un'applicazione Java che utilizza le librerie SAP JCo 3. Uno dei casi d'uso consiste nel ricevere un file IDoc dall'istanza SAP (R/3, ERP 6.0 EhP 7) e convertirlo in XML. Il problema è che, durante la conversione (eseguita dalla libreria IDoc), gli spazi giusti alla fine dei campi vengono tagliati. Apparentemente, per ridurre la dimensione del messaggio. Finora, non ho trovato alcuna configurazione che possa essere eseguita dal lato Java.SAP R/3 rimuove gli spazi finali dai file XML IDoc

Cercando in rete, ho trovato i seguenti suggerimenti dal lato SAP:

  • impostazione whiteSpace=preserve dal XSD Editor
  • impostazione xml.fieldContentFormatting=nothing nel file mittente/FTP adattatore

Tuttavia , Non sono stato in grado di trovare questi strumenti né di configurarli di conseguenza.

Apprezzerei qualsiasi approfondimento su questi due approcci o qualsiasi altra soluzione.

+1

Qual è l'effetto degli spazi da ritagliare? Cosa non funziona più? –

+1

I dati IDoc devono essere convertiti in XML così com'è, conservando gli spazi bianchi per l'elaborazione successiva. Inoltre, per mantenere la coerenza tra la lunghezza del campo IDoc originale e la lunghezza effettiva del campo XML. – CountD

risposta

0

È possibile avere un controllo in cui la lunghezza totale del campo sarà uguale alla lunghezza di quel particolare segmento. È possibile utilizzare RFC IDOCTYPE_READ_COMPLETE. In questo tipo di IDOC di passaggio, ad esempio MATMAs01. Nella tabella PT_SEGMENTS è possibile ottenere la lunghezza del segmento.

È possibile superare questa lunghezza del segmento per ottenere l'intera lunghezza del campo.

0

La libreria di classi IDoc Java di SAP non offre un'opzione per preservare gli spazi finali nei campi IDoc.

I caratteri di SPACE in coda nei campi IDoc non hanno alcuno scopo se l'IDoc verrà inviato nuovamente a un altro sistema SAP alla fine. In questo caso, non farebbero altro che allargare la dimensione del messaggio XML senza aggiungere alcun valore.

Attualmente non riesco a immaginare per quale motivo si desidera mantenere quegli spazi finali? I caratteri SPACE sono il valore iniziale predefinito per i campi di tipo ABAP CHAR, quindi non puoi sapere se alcuni di questi caratteri sarebbero stati impostati intenzionalmente o meno.

0

Quando si utilizza XML in ABAP, è necessario chiamare if_ixml_renderer (o if_ixml_parser) set_normalizing. Questo è attivo per impostazione predefinita e devi disabilitarlo.

"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(). 
Problemi correlati