Another day at work....another challenge to face..
I was asked to download datas from the database table TOA01 and get 3 different excel file from them...I used the function: SDIXML_DATA_TO_DOM and SDIXML_DOM_TO_XML..if you need to use it all you have to know is:
1. you have to create a proper internal table that will fit the data you are downloading from the database table
2. how to copy and paste from my blog ;)
have fun!
REPORT ZTOA01_CREA_FILE.
TABLES TOA01.
DATA: TAB_APPO TYPE STANDARD TABLE OF TOA01,
RC_APPO TYPE TOA01. " RECORD DI APPOGGIO
DATA: TAB_APPO1 TYPE STANDARD TABLE OF TOA01,
RC_APPO1 TYPE TOA01.
data: societa(4).
PARAMETERS: CB_FILE AS CHECKBOX,
SOC type string,
P_FILE LIKE rlgrap-filename ,
p_file2 LIKE rlgrap-filename.
societa = soc.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file2.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE2'
IMPORTING
file_name = p_file2.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
START-OF-SELECTION.
" COPIA DEI DATI DELLA TOA01 ALLA TABELLA INTERNA
SELECT * FROM TOA01 INTO TABLE TAB_APPO WHERE SAP_OBJECT EQ 'BUS1505'
AND AR_OBJECT LIKE 'ZREMCONT%'
AND ARCHIV_ID EQ 'A3'.
LOOP AT TAB_APPO INTO RC_APPO.
ENDLOOP.
IF CB_FILE = 'X'.
PERFORM CONVERTI_IN_XML.
ENDIF.
LOOP AT TAB_APPO INTO RC_APPO.
IF RC_APPO-OBJECT_ID(4) EQ SOCIETA.
MOVE RC_APPO TO RC_APPO1.
APPEND RC_APPO1 TO TAB_APPO1.
ENDIF.
ENDLOOP.
CASE SOCIETA.
WHEN 'FS01'.
if tab_appo1[] is not initial.
PERFORM CONVERTI_IN_XML_2.
else.
write: 'Nessun contratto immobiliare presente per la società: ', soc.
endif.
WHEN 'ITF '.
if tab_appo1[] is not initial.
PERFORM CONVERTI_IN_XML_2.
else.
write: 'Nessun contratto immobiliare presente per la società: ', societa.
endif.
WHEN 'FSCS'.
if tab_appo1[] is not initial.
PERFORM CONVERTI_IN_XML_2.
else.
write: 'Nessun contratto immobiliare presente per la società: ', societa.
endif.
ENDCASE.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form CONVERTI_IN_XML
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM CONVERTI_IN_XML.
DATA: L_DOM TYPE REF TO IF_IXML_ELEMENT,
M_DOCUMENT TYPE REF TO IF_IXML_DOCUMENT,
G_IXML TYPE REF TO IF_IXML,
W_STRING TYPE XSTRING,
W_SIZE TYPE I,
W_RESULT TYPE I,
W_LINE TYPE STRING,
IT_XML TYPE DCXMLLINES,
S_XML LIKE LINE OF IT_XML,
W_RC LIKE SY-SUBRC.
DATA: XML TYPE DCXMLLINES.
DATA: RC TYPE SY-SUBRC,
BEGIN OF XML_TAB OCCURS 0,
D LIKE LINE OF XML,
END OF XML_TAB.
CLASS CL_IXML DEFINITION LOAD.
G_IXML = CL_IXML=>CREATE( ).
CHECK NOT G_IXML IS INITIAL.
M_DOCUMENT = G_IXML->CREATE_DOCUMENT( ).
CHECK NOT M_DOCUMENT IS INITIAL.
WRITE: / 'Conversione avvenuta:'.
CALL FUNCTION 'SDIXML_DATA_TO_DOM'
EXPORTING
NAME = 'TAB_APPO'
DATAOBJECT = TAB_APPO[]
IMPORTING
DATA_AS_DOM = L_DOM
CHANGING
DOCUMENT = M_DOCUMENT
EXCEPTIONS
ILLEGAL_NAME = 1
OTHERS = 2.
IF SY-SUBRC = 0.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
SY-SUBRC.
ENDIF.
CHECK NOT L_DOM IS INITIAL.
W_RC = M_DOCUMENT->APPEND_CHILD( NEW_CHILD = L_DOM ).
IF W_RC IS INITIAL.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
W_RC.
ENDIF.
CALL FUNCTION 'SDIXML_DOM_TO_XML'
EXPORTING
DOCUMENT = M_DOCUMENT
IMPORTING
XML_AS_STRING = W_STRING
SIZE = W_SIZE
TABLES
XML_AS_TABLE = IT_XML
EXCEPTIONS
NO_DOCUMENT = 1
OTHERS = 2.
IF SY-SUBRC = 0.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
SY-SUBRC.
ENDIF.
LOOP AT IT_XML INTO XML_TAB-D.
APPEND XML_TAB.
ENDLOOP.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
BIN_FILESIZE = W_SIZE
FILENAME = P_FILE
FILETYPE = 'BIN'
TABLES
DATA_TAB = XML_TAB
EXCEPTIONS
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. "CONVERTI_IN_XML
*&---------------------------------------------------------------------*
*& Form CONVERTI_IN_XML_FS01
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CONVERTI_IN_XML_2 .
DATA: L_DOM TYPE REF TO IF_IXML_ELEMENT,
M_DOCUMENT TYPE REF TO IF_IXML_DOCUMENT,
G_IXML TYPE REF TO IF_IXML,
W_STRING TYPE XSTRING,
W_SIZE TYPE I,
W_RESULT TYPE I,
W_LINE TYPE STRING,
IT_XML TYPE DCXMLLINES,
S_XML LIKE LINE OF IT_XML,
W_RC LIKE SY-SUBRC.
DATA: XML TYPE DCXMLLINES.
DATA: RC TYPE SY-SUBRC,
BEGIN OF XML_TAB OCCURS 0,
D LIKE LINE OF XML,
END OF XML_TAB.
CLASS CL_IXML DEFINITION LOAD.
G_IXML = CL_IXML=>CREATE( ).
CHECK NOT G_IXML IS INITIAL.
M_DOCUMENT = G_IXML->CREATE_DOCUMENT( ).
CHECK NOT M_DOCUMENT IS INITIAL.
WRITE: / 'Conversione avvenuta:'.
CALL FUNCTION 'SDIXML_DATA_TO_DOM'
EXPORTING
NAME = 'TAB_APPO1'
DATAOBJECT = TAB_APPO1[]
IMPORTING
DATA_AS_DOM = L_DOM
CHANGING
DOCUMENT = M_DOCUMENT
EXCEPTIONS
ILLEGAL_NAME = 1
OTHERS = 2.
IF SY-SUBRC = 0.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
SY-SUBRC.
ENDIF.
CHECK NOT L_DOM IS INITIAL.
W_RC = M_DOCUMENT->APPEND_CHILD( NEW_CHILD = L_DOM ).
IF W_RC IS INITIAL.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
W_RC.
ENDIF.
CALL FUNCTION 'SDIXML_DOM_TO_XML'
EXPORTING
DOCUMENT = M_DOCUMENT
IMPORTING
XML_AS_STRING = W_STRING
SIZE = W_SIZE
TABLES
XML_AS_TABLE = IT_XML
EXCEPTIONS
NO_DOCUMENT = 1
OTHERS = 2.
IF SY-SUBRC = 0.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
SY-SUBRC.
ENDIF.
LOOP AT IT_XML INTO XML_TAB-D.
APPEND XML_TAB.
ENDLOOP.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
BIN_FILESIZE = W_SIZE
FILENAME = p_File2
FILETYPE = 'BIN'
TABLES
DATA_TAB = XML_TAB
EXCEPTIONS
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. " CONVERTI_IN_XML_2
more information at:
http://www.google.it/url?sa=t&source=web&cd=8&ved=0CGoQFjAH&url=http%3A%2F%2Fwww.se80.co.uk%2Fsapfms%2Fs%2Fsdix%2Fsdixml_data_to_dom.htm&ei=uCJ_TYqqF42XOquwpbsI&usg=AFQjCNHd-wI_CtC_ut-3TyAF0ftj8njlig
Zu l' ABAPeor!!!
lunedì 7 marzo 2011
NEED TO SHARE!!!!!!
Need to share thoughts, tips, music and everything else is going on in my PINK life so why not to have a blog!
"Against the grain should be a way of life
What's worth the price is always worth the fight
Every second counts 'cause there's no second try
So live like you're never living twice
Don't take the free ride in your own life"
Iscriviti a:
Post (Atom)
