lunedì 7 marzo 2011

ABAP......MY DAILY CHALLENGE!!!

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

1 commento:

  1. Questo commento è stato eliminato da un amministratore del blog.

    RispondiElimina