Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

xml and abap data structures

Former Member
0 Likes
561

Hi guys,

I'm new to ABAP only a few months experience ,

I have a question ,

What does the transformation between XML and ABAP data structures

involve?

please help ; )

Arturo

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
517

look through these ,maybe this can help you

REPORT zvin01newbat NO STANDARD PAGE HEADING

MESSAGE-ID 00

LINE-COUNT 65

LINE-SIZE 160.

&----


*& TABLES:

&----


TABLES: objk, mara, makt, ytvin , ytdpvin ,

afpo, vbap , ser05 , t001w .

RANGES: r_werks FOR t001w-werks .

&----


*& CONSTANTS:

&----


*CONSTANTS

&----


*& PROGRAM VARIABLES

&----


&----


*& INTERNAL TABLES

&----


DATA: BEGIN OF itab OCCURS 0.

INCLUDE STRUCTURE ytvin.

DATA: veh_czrq(20) TYPE c,

veh_fzrq1(20) TYPE c,

veh_clzzrq1(20) TYPE c,

END OF itab.

&----


*& SELECT-OPTIONS

&----


&----


*& PAPAMETERS

&----


SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS: p_radioa RADIOBUTTON GROUP rad0,

p_radiob RADIOBUTTON GROUP rad0.

SELECT-OPTIONS: s_ytsn FOR ytvin-ytsn OBLIGATORY .

SELECTION-SCREEN SKIP 1.

PARAMETERS: p_radio1 RADIOBUTTON GROUP rad1,

p_radio2 RADIOBUTTON GROUP rad1.

SELECTION-SCREEN: END OF BLOCK b1.

&----


  • INITIALIZATION

&----


INITIALIZATION.

&----


  • AT SELECTION-SCREEN

&----


AT SELECTION-SCREEN.

&----


  • START-OF-SELECTION

&----


START-OF-SELECTION.

IF p_radioa = 'X' .

SELECT *

INTO TABLE itab

FROM ytvin

WHERE ytsn IN s_ytsn .

ELSE .

SELECT *

INTO CORRESPONDING FIELDS OF TABLE itab

FROM ytdpvin

WHERE ytsn IN s_ytsn .

LOOP AT itab .

CONCATENATE itab-veh_fdjxh

itab-veh_fdjh

INTO itab-veh_fdjh

SEPARATED BY space .

itab-veh_zchgzbh = itab-veh_dphgzbh .

CLEAR itab-veh_dphgzbh .

MODIFY itab TRANSPORTING veh_fdjh veh_zchgzbh veh_dphgzbh .

ENDLOOP .

ENDIF .

LOOP AT itab.

CONCATENATE sy-datum+0(4) '-'

sy-datum+4(2) '-'

sy-datum+6(2) '#'

sy-uzeit+0(2) ':'

sy-uzeit+2(2) ':'

sy-uzeit+4(2)

INTO itab-veh_czrq.

TRANSLATE itab-veh_czrq USING '# '.

CONCATENATE itab-veh_fzrq+0(4) '-'

itab-veh_fzrq+6(2) '-'

itab-veh_fzrq+10(2) '#'

'00:00:00'

INTO itab-veh_fzrq1.

TRANSLATE itab-veh_fzrq1 USING '# '.

CONCATENATE itab-veh_clzzrq+0(4) '-'

itab-veh_clzzrq+6(2) '-'

itab-veh_clzzrq+10(2) '#'

'00:00:00'

INTO itab-veh_clzzrq1.

TRANSLATE itab-veh_clzzrq1 USING '# '.

MODIFY itab TRANSPORTING veh_czrq veh_fzrq1 veh_clzzrq1.

IF itab-veh_clztxx = 'QX' .

CONCATENATE itab-veh_fdjxh

itab-veh_fdjh

INTO itab-veh_fdjh

SEPARATED BY space .

MODIFY itab TRANSPORTING veh_fdjh .

ENDIF .

IF itab-veh_clztxx = 'JH' .

CLEAR: itab-veh_fdjxh , itab-veh_fdjh .

MODIFY itab TRANSPORTING veh_fdjxh veh_fdjh .

ENDIF .

ENDLOOP.

IF p_radio1 = 'X'.

PERFORM render_xml_file TABLES itab USING 'd:\upload.vm'

'C:\upload.xml'.

ELSEIF p_radio2 = 'X'.

PERFORM render_xml_file TABLES itab USING 'd:\DELERQ.vm'

'C:\DELERQ.xml'.

ENDIF .

************************************************************************

  • END-OF-SELECTION

************************************************************************

END-OF-SELECTION .

----


  • FORM render_xml_file *

----


  • ........ *

----


  • --> P_OUTPUT *

----


FORM render_xml_file TABLES itab USING p_input p_output.

DATA: BEGIN OF it_data OCCURS 0,

line(255) TYPE c,

END OF it_data.

DATA: it_xml LIKE TABLE OF it_data WITH HEADER LINE,

it_header LIKE TABLE OF it_data WITH HEADER LINE,

it_foot LIKE TABLE OF it_data WITH HEADER LINE,

it_repeat LIKE TABLE OF it_data WITH HEADER LINE,

it_cont LIKE TABLE OF it_data WITH HEADER LINE.

DATA: line(255) TYPE c.

*0:header 1:content 2:foot

DATA: sign(1) TYPE c.

DATA: it_name(20) TYPE c.

FIELD-SYMBOLS: <fs> TYPE ANY.

DATA: fld_name(30) TYPE c.

DATA: prefix(30) TYPE c,

surfix(30) TYPE c.

DATA: dsn(20) VALUE 'Upload.vm'.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

filename = p_input

filetype = 'DAT'

TABLES

data_tab = it_data

EXCEPTIONS

conversion_error = 1

file_open_error = 2

file_read_error = 3

invalid_type = 4

no_batch = 5

unknown_error = 6

invalid_table_width = 7

gui_refuse_filetransfer = 8

customer_error = 9

OTHERS = 10.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

sign = 0.

LOOP AT it_data.

line = it_data-line.

CONDENSE line.

IF line+0(8) = '#foreach'.

sign = 1.

PERFORM get_enclose_text

USING line '(' ')'

CHANGING it_name.

CONTINUE.

ELSEIF line+0(4) = '#end'.

sign = 2.

CONTINUE.

ENDIF.

CONDENSE it_data.

IF sign = 0.

APPEND it_data TO it_header.

ELSEIF sign = 2.

APPEND it_data TO it_foot.

ELSE.

APPEND it_data TO it_repeat.

ENDIF.

ENDLOOP.

LOOP AT itab.

LOOP AT it_repeat.

IF NOT it_repeat-line CS '$'.

it_cont-line = it_repeat-line.

ELSE.

PERFORM get_enclose_text

USING it_repeat-line '<' '>'

CHANGING prefix.

PERFORM get_enclose_text

USING it_repeat-line '/' '>'

CHANGING surfix.

PERFORM get_enclose_text

USING it_repeat-line '$' '<'

CHANGING fld_name.

ASSIGN COMPONENT fld_name OF STRUCTURE itab TO <fs>.

CONCATENATE '<' prefix '>'

<fs>

'</' surfix '>'

INTO it_cont-line.

ENDIF.

APPEND it_cont.

ENDLOOP.

ENDLOOP.

LOOP AT it_header.

APPEND it_header TO it_xml.

ENDLOOP.

LOOP AT it_cont.

APPEND it_cont TO it_xml.

ENDLOOP.

LOOP AT it_foot.

APPEND it_foot TO it_xml.

ENDLOOP.

CALL FUNCTION 'WS_DOWNLOAD'

EXPORTING

filename = p_output

filetype = 'DAT'

TABLES

data_tab = it_xml

EXCEPTIONS

file_open_error = 1

file_write_error = 2

invalid_filesize = 3

invalid_type = 4

no_batch = 5

unknown_error = 6

invalid_table_width = 7

gui_refuse_filetransfer = 8

customer_error = 9

OTHERS = 10.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDFORM.

----


  • FORM get_enclose_text *

----


  • ........ *

----


  • --> P1 *

  • --> P2 *

  • --> P_TEXT *

----


FORM get_enclose_text USING p_orgin p1 p2 CHANGING p_text.

DATA: start TYPE i,

end TYPE i,

len TYPE i.

SEARCH p_orgin FOR p1.

IF sy-subrc = 0.

start = sy-fdpos.

ENDIF.

start = start + 1.

SEARCH p_orgin FOR p2 STARTING AT start.

IF sy-subrc = 0.

end = sy-fdpos.

ENDIF.

len = end - 1.

p_text = p_orgin+start(len).

CONDENSE p_text.

ENDFORM.

3 REPLIES 3
Read only

Former Member
0 Likes
518

look through these ,maybe this can help you

REPORT zvin01newbat NO STANDARD PAGE HEADING

MESSAGE-ID 00

LINE-COUNT 65

LINE-SIZE 160.

&----


*& TABLES:

&----


TABLES: objk, mara, makt, ytvin , ytdpvin ,

afpo, vbap , ser05 , t001w .

RANGES: r_werks FOR t001w-werks .

&----


*& CONSTANTS:

&----


*CONSTANTS

&----


*& PROGRAM VARIABLES

&----


&----


*& INTERNAL TABLES

&----


DATA: BEGIN OF itab OCCURS 0.

INCLUDE STRUCTURE ytvin.

DATA: veh_czrq(20) TYPE c,

veh_fzrq1(20) TYPE c,

veh_clzzrq1(20) TYPE c,

END OF itab.

&----


*& SELECT-OPTIONS

&----


&----


*& PAPAMETERS

&----


SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS: p_radioa RADIOBUTTON GROUP rad0,

p_radiob RADIOBUTTON GROUP rad0.

SELECT-OPTIONS: s_ytsn FOR ytvin-ytsn OBLIGATORY .

SELECTION-SCREEN SKIP 1.

PARAMETERS: p_radio1 RADIOBUTTON GROUP rad1,

p_radio2 RADIOBUTTON GROUP rad1.

SELECTION-SCREEN: END OF BLOCK b1.

&----


  • INITIALIZATION

&----


INITIALIZATION.

&----


  • AT SELECTION-SCREEN

&----


AT SELECTION-SCREEN.

&----


  • START-OF-SELECTION

&----


START-OF-SELECTION.

IF p_radioa = 'X' .

SELECT *

INTO TABLE itab

FROM ytvin

WHERE ytsn IN s_ytsn .

ELSE .

SELECT *

INTO CORRESPONDING FIELDS OF TABLE itab

FROM ytdpvin

WHERE ytsn IN s_ytsn .

LOOP AT itab .

CONCATENATE itab-veh_fdjxh

itab-veh_fdjh

INTO itab-veh_fdjh

SEPARATED BY space .

itab-veh_zchgzbh = itab-veh_dphgzbh .

CLEAR itab-veh_dphgzbh .

MODIFY itab TRANSPORTING veh_fdjh veh_zchgzbh veh_dphgzbh .

ENDLOOP .

ENDIF .

LOOP AT itab.

CONCATENATE sy-datum+0(4) '-'

sy-datum+4(2) '-'

sy-datum+6(2) '#'

sy-uzeit+0(2) ':'

sy-uzeit+2(2) ':'

sy-uzeit+4(2)

INTO itab-veh_czrq.

TRANSLATE itab-veh_czrq USING '# '.

CONCATENATE itab-veh_fzrq+0(4) '-'

itab-veh_fzrq+6(2) '-'

itab-veh_fzrq+10(2) '#'

'00:00:00'

INTO itab-veh_fzrq1.

TRANSLATE itab-veh_fzrq1 USING '# '.

CONCATENATE itab-veh_clzzrq+0(4) '-'

itab-veh_clzzrq+6(2) '-'

itab-veh_clzzrq+10(2) '#'

'00:00:00'

INTO itab-veh_clzzrq1.

TRANSLATE itab-veh_clzzrq1 USING '# '.

MODIFY itab TRANSPORTING veh_czrq veh_fzrq1 veh_clzzrq1.

IF itab-veh_clztxx = 'QX' .

CONCATENATE itab-veh_fdjxh

itab-veh_fdjh

INTO itab-veh_fdjh

SEPARATED BY space .

MODIFY itab TRANSPORTING veh_fdjh .

ENDIF .

IF itab-veh_clztxx = 'JH' .

CLEAR: itab-veh_fdjxh , itab-veh_fdjh .

MODIFY itab TRANSPORTING veh_fdjxh veh_fdjh .

ENDIF .

ENDLOOP.

IF p_radio1 = 'X'.

PERFORM render_xml_file TABLES itab USING 'd:\upload.vm'

'C:\upload.xml'.

ELSEIF p_radio2 = 'X'.

PERFORM render_xml_file TABLES itab USING 'd:\DELERQ.vm'

'C:\DELERQ.xml'.

ENDIF .

************************************************************************

  • END-OF-SELECTION

************************************************************************

END-OF-SELECTION .

----


  • FORM render_xml_file *

----


  • ........ *

----


  • --> P_OUTPUT *

----


FORM render_xml_file TABLES itab USING p_input p_output.

DATA: BEGIN OF it_data OCCURS 0,

line(255) TYPE c,

END OF it_data.

DATA: it_xml LIKE TABLE OF it_data WITH HEADER LINE,

it_header LIKE TABLE OF it_data WITH HEADER LINE,

it_foot LIKE TABLE OF it_data WITH HEADER LINE,

it_repeat LIKE TABLE OF it_data WITH HEADER LINE,

it_cont LIKE TABLE OF it_data WITH HEADER LINE.

DATA: line(255) TYPE c.

*0:header 1:content 2:foot

DATA: sign(1) TYPE c.

DATA: it_name(20) TYPE c.

FIELD-SYMBOLS: <fs> TYPE ANY.

DATA: fld_name(30) TYPE c.

DATA: prefix(30) TYPE c,

surfix(30) TYPE c.

DATA: dsn(20) VALUE 'Upload.vm'.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

filename = p_input

filetype = 'DAT'

TABLES

data_tab = it_data

EXCEPTIONS

conversion_error = 1

file_open_error = 2

file_read_error = 3

invalid_type = 4

no_batch = 5

unknown_error = 6

invalid_table_width = 7

gui_refuse_filetransfer = 8

customer_error = 9

OTHERS = 10.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

sign = 0.

LOOP AT it_data.

line = it_data-line.

CONDENSE line.

IF line+0(8) = '#foreach'.

sign = 1.

PERFORM get_enclose_text

USING line '(' ')'

CHANGING it_name.

CONTINUE.

ELSEIF line+0(4) = '#end'.

sign = 2.

CONTINUE.

ENDIF.

CONDENSE it_data.

IF sign = 0.

APPEND it_data TO it_header.

ELSEIF sign = 2.

APPEND it_data TO it_foot.

ELSE.

APPEND it_data TO it_repeat.

ENDIF.

ENDLOOP.

LOOP AT itab.

LOOP AT it_repeat.

IF NOT it_repeat-line CS '$'.

it_cont-line = it_repeat-line.

ELSE.

PERFORM get_enclose_text

USING it_repeat-line '<' '>'

CHANGING prefix.

PERFORM get_enclose_text

USING it_repeat-line '/' '>'

CHANGING surfix.

PERFORM get_enclose_text

USING it_repeat-line '$' '<'

CHANGING fld_name.

ASSIGN COMPONENT fld_name OF STRUCTURE itab TO <fs>.

CONCATENATE '<' prefix '>'

<fs>

'</' surfix '>'

INTO it_cont-line.

ENDIF.

APPEND it_cont.

ENDLOOP.

ENDLOOP.

LOOP AT it_header.

APPEND it_header TO it_xml.

ENDLOOP.

LOOP AT it_cont.

APPEND it_cont TO it_xml.

ENDLOOP.

LOOP AT it_foot.

APPEND it_foot TO it_xml.

ENDLOOP.

CALL FUNCTION 'WS_DOWNLOAD'

EXPORTING

filename = p_output

filetype = 'DAT'

TABLES

data_tab = it_xml

EXCEPTIONS

file_open_error = 1

file_write_error = 2

invalid_filesize = 3

invalid_type = 4

no_batch = 5

unknown_error = 6

invalid_table_width = 7

gui_refuse_filetransfer = 8

customer_error = 9

OTHERS = 10.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDFORM.

----


  • FORM get_enclose_text *

----


  • ........ *

----


  • --> P1 *

  • --> P2 *

  • --> P_TEXT *

----


FORM get_enclose_text USING p_orgin p1 p2 CHANGING p_text.

DATA: start TYPE i,

end TYPE i,

len TYPE i.

SEARCH p_orgin FOR p1.

IF sy-subrc = 0.

start = sy-fdpos.

ENDIF.

start = start + 1.

SEARCH p_orgin FOR p2 STARTING AT start.

IF sy-subrc = 0.

end = sy-fdpos.

ENDIF.

len = end - 1.

p_text = p_orgin+start(len).

CONDENSE p_text.

ENDFORM.

Read only

uwe_schieferstein
Active Contributor
0 Likes
517

Hello Arturo

The author of the previous posting is apparently not aware of the statement CALL TRANSFORMATION which allows you to easily convert between ABAP structures and XML. The ABAP keyword documentation is quite verbose:


Syntax 
CALL TRANSFORMATION {trans|(name)} 
                    [PARAMETERS {p1 = e1 p2 = e2 ...}|(ptab)] 
                    [OBJECTS    {o1 = e1 o2 = e2 ...}|(otab)] 
                    [OPTIONS    a1 = e1 a2 = e2 ...] 
                    SOURCE {XML sxml} 
                         | {{bn1 = e1 bn2 = e2 ...}|(stab)} 
                    RESULT {XML rxml} 
                         | {{bn1 = f1 bn2 = f2 ...}|(rtab)}. 


This statement calls the specified XSL transformation (XSLT) or a simple transformation (ST, as of release 6.40). The source of the transformation is specified after SOURCE and the result is stored as specified after RESULT. Use PARAMETERS and OBJECTS to pass parameters to the transformation. Possible transformation types are: 

from XML to XML (only for XSLT), 

from XML to ABAP (for XSLT and simple transformations), 

from ABAP to XML (for XSLT and simple transformations), 

from ABAP to ABAP (only for XSLT), 

where the last two types are available only as of release 6.20. 



The name of the transformation can be specified either directly as trans or as content of a character-type data object name in braces. The specified transformation must exist as a XSLT program or as a simple transformation in the Repository. 

If you like to learn more about the XML features of the SAP system have a look at the classes, interfaces and sample reports in packages SIXML and SIXML_TEST.

Regards

Uwe

Read only

Former Member
0 Likes
517

so what does the transformation between XML and ABAP data structures generate? which of the following 3?

- Generation of ABAP proxy types from XML schemas.

- Generation of XML schemas from ABAP types.

- Neither generation of XML schemas from ABAP types nor generation of ABAP

proxy types from XML schemas.