*&---------------------------------------------------------------------* *& Report  ZJOBY_EMAIL_TEST *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZJOBY_EMAIL_TEST. TYPE-POOLS: IXML. *------------------------------------------------------------------------* *                           Data Declarations                            * *------------------------------------------------------------------------* * Structure for Final Internal Table TYPES: BEGIN OF TY_FINAL,          SRNO(3)   TYPE N,          USER_ID   TYPE USR02-BNAME,          FULL_NAME TYPE BAPIADDR3-FULLNAME,          DEPT      TYPE BAPIADDR3-DEPARTMENT,          LOGIN(3)  TYPE C,        END OF TY_FINAL. * Structure for USR02 TYPES: BEGIN OF TY_USR02,          BNAME TYPE USR02-BNAME,          TRDAT TYPE USR02-TRDAT,        END OF TY_USR02. * Internal Table & Work Area for Final Internal Table DATA: IT_FINAL TYPE TABLE OF TY_FINAL,       WA_FINAL TYPE TY_FINAL. * Internal Table & Work Area for USR02 Internal Table DATA: IT_USR02 TYPE TABLE OF TY_USR02,       WA_USR02 TYPE TY_USR02. * Work Area for ADD3_DATA Structre DATA: WA_ADDR TYPE BAPIADDR3. DATA: IT_RETURN TYPE TABLE OF BAPIRET2. DATA: LV_DATE TYPE D. DATA: LV_FILENAME TYPE STRING. TYPES: BEGIN OF XML_LINE,          DATA(255) TYPE X,        END OF XML_LINE. DATA: L_IXML          TYPE REF TO IF_IXML,       L_STREAMFACTORY TYPE REF TO IF_IXML_STREAM_FACTORY,       L_OSTREAM       TYPE REF TO IF_IXML_OSTREAM,       L_RENDERER      TYPE REF TO IF_IXML_RENDERER,       L_DOCUMENT      TYPE REF TO IF_IXML_DOCUMENT. DATA: L_ELEMENT_ROOT       TYPE REF TO IF_IXML_ELEMENT,       NS_ATTRIBUTE         TYPE REF TO IF_IXML_ATTRIBUTE,       R_ELEMENT_PROPERTIES TYPE REF TO IF_IXML_ELEMENT,       R_ELEMENT            TYPE REF TO IF_IXML_ELEMENT,       R_WORKSHEET          TYPE REF TO IF_IXML_ELEMENT,       R_TABLE              TYPE REF TO IF_IXML_ELEMENT,       R_COLUMN             TYPE REF TO IF_IXML_ELEMENT,       R_ROW                TYPE REF TO IF_IXML_ELEMENT,       R_CELL               TYPE REF TO IF_IXML_ELEMENT,       R_DATA               TYPE REF TO IF_IXML_ELEMENT,       L_VALUE              TYPE STRING,       L_TYPE               TYPE STRING,       L_TEXT(100)          TYPE C,       R_STYLES             TYPE REF TO IF_IXML_ELEMENT,       R_STYLE              TYPE REF TO IF_IXML_ELEMENT,       R_STYLE1             TYPE REF TO IF_IXML_ELEMENT,       R_FORMAT             TYPE REF TO IF_IXML_ELEMENT,       R_BORDER             TYPE REF TO IF_IXML_ELEMENT,       NUM_ROWS             TYPE I. DATA: L_XML_TABLE TYPE TABLE OF XML_LINE,       WA_XML      TYPE XML_LINE,       L_XML_SIZE  TYPE I,       L_RC        TYPE I. *------------------------------------------------------------------------* *                             Initialization                             * *------------------------------------------------------------------------* INITIALIZATION.   LV_DATE = SY-DATUM - 1. *------------------------------------------------------------------------* *                           Start of Selection                           * *------------------------------------------------------------------------* START-OF-SELECTION.   PERFORM GET_USER_DATA.   PERFORM PROCESS_XML_DATA.   PERFORM SEND_MAIL. *&---------------------------------------------------------------------* *&      Form  get_user_data *&---------------------------------------------------------------------* *       Fetch User details from USR02 *----------------------------------------------------------------------* FORM GET_USER_DATA.   REFRESH IT_FINAL.   SELECT DISTINCT BNAME TRDAT FROM USR02 INTO TABLE IT_USR02.   SORT IT_USR02 BY BNAME.   IF NOT IT_USR02[] IS INITIAL.     LOOP AT IT_USR02 INTO WA_USR02.       CLEAR WA_FINAL.       WA_FINAL-SRNO = SY-TABIX.                   " Serial No.       WA_FINAL-USER_ID = WA_USR02-BNAME.          " User ID       CALL FUNCTION 'BAPI_USER_GET_DETAIL'         EXPORTING           USERNAME = WA_USR02-BNAME         IMPORTING           ADDRESS  = WA_ADDR         TABLES           RETURN   = IT_RETURN.       IF SY-SUBRC EQ 0.         WA_FINAL-FULL_NAME = WA_ADDR-FULLNAME.    " Full Name         WA_FINAL-DEPT = WA_ADDR-DEPARTMENT.       " Department       ENDIF.       IF WA_USR02-TRDAT EQ LV_DATE.         WA_FINAL-LOGIN = 'YES'.                   " Login on Previous Day       ELSE.         WA_FINAL-LOGIN = 'NO'.       ENDIF.       APPEND WA_FINAL TO IT_FINAL.     ENDLOOP.   ENDIF. ENDFORM.                    " get_user_data *&---------------------------------------------------------------------* *&      Form  SEND_MAIL *&---------------------------------------------------------------------* *       Send Email *----------------------------------------------------------------------* FORM SEND_MAIL.   DATA: OBJPACK   LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.   DATA: OBJHEAD   LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.   DATA: OBJBIN    LIKE SOLIX OCCURS 10 WITH HEADER LINE.   DATA: OBJTXT    LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.   DATA: RECLIST   LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.   DATA: DOC_CHNG  LIKE SODOCCHGI1.   DATA: TAB_LINES LIKE SY-TABIX.   DATA: L_NUM(3).   DATA: SUBJ_DATE(10) TYPE C. * Mail Subject   CONCATENATE LV_DATE+6(2) '-' LV_DATE+4(2) '-' LV_DATE+0(4) INTO SUBJ_DATE.   CONCATENATE 'SAP Application Usage Report ' SUBJ_DATE INTO DOC_CHNG-OBJ_DESCR SEPARATED BY SPACE. * Mail Contents   OBJTXT = 'Dear User,'.   APPEND OBJTXT.   CLEAR OBJTXT.   APPEND OBJTXT.   CONCATENATE 'Please find the attached SAP Application Usage Report for ' SUBJ_DATE INTO OBJTXT SEPARATED BY SPACE.              " Mail Contents   APPEND OBJTXT.   CLEAR OBJTXT.   APPEND OBJTXT.   OBJTXT = 'Thanks & Regards,'.   APPEND OBJTXT.   OBJTXT = 'Himanshu Kanekar'.   APPEND OBJTXT.   DESCRIBE TABLE OBJTXT LINES TAB_LINES.   READ TABLE OBJTXT INDEX TAB_LINES.   DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ). * Packing List For the E-mail Body   OBJPACK-HEAD_START = 1.   OBJPACK-HEAD_NUM   = 0.   OBJPACK-BODY_START = 1.   OBJPACK-BODY_NUM   = TAB_LINES.   OBJPACK-DOC_TYPE   = 'RAW'.   APPEND OBJPACK. * Creation of the Document Attachment   LOOP AT L_XML_TABLE INTO WA_XML.     CLEAR OBJBIN.     OBJBIN-LINE = WA_XML-DATA.     APPEND OBJBIN.   ENDLOOP.   DESCRIBE TABLE OBJBIN LINES TAB_LINES.   OBJHEAD = 'SAP Login Details'.   APPEND OBJHEAD. * Packing List For the E-mail Attachment   OBJPACK-TRANSF_BIN = 'X'.   OBJPACK-HEAD_START = 1.   OBJPACK-HEAD_NUM   = 0.   OBJPACK-BODY_START = 1.   OBJPACK-BODY_NUM = TAB_LINES.   CONCATENATE 'SAP_Login_Details' SUBJ_DATE INTO OBJPACK-OBJ_DESCR SEPARATED BY SPACE.   OBJPACK-DOC_TYPE = 'XLS'.   OBJPACK-DOC_SIZE = TAB_LINES * 255.   APPEND OBJPACK. * Target Recipent   CLEAR RECLIST.   RECLIST-RECEIVER = '家里蹲@qq.com'.   RECLIST-REC_TYPE = 'U'.   RECLIST-NOTIF_READ = 'X'.   RECLIST-COM_TYPE = 'INT'.   RECLIST-NOTIF_DEL = 'X'.   RECLIST-NOTIF_NDEL = 'X'.   APPEND RECLIST. * Sending the document   CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'     EXPORTING       DOCUMENT_DATA              = DOC_CHNG       PUT_IN_OUTBOX              = 'X'       COMMIT_WORK                = 'X'     TABLES       PACKING_LIST               = OBJPACK       OBJECT_HEADER              = OBJHEAD       CONTENTS_TXT               = OBJTXT       CONTENTS_HEX               = OBJBIN       RECEIVERS                  = RECLIST     EXCEPTIONS       TOO_MANY_RECEIVERS         = 1       DOCUMENT_NOT_SENT          = 2       OPERATION_NO_AUTHORIZATION = 4       OTHERS                     = 99.   IF SY-SUBRC = 0.     WAIT UP TO 2 SECONDS.     SUBMIT RSCONN01 WITH MODE = 'INT' AND RETURN.   ENDIF. ENDFORM.                    " SEND_MAIL *&---------------------------------------------------------------------* *&      Form  process_xml_data *&---------------------------------------------------------------------* *       Process XML Data *----------------------------------------------------------------------* FORM PROCESS_XML_DATA . * Creating a ixml Factory   L_IXML = CL_IXML=>CREATE( ). * Creating the DOM Object Model   L_DOCUMENT = L_IXML->CREATE_DOCUMENT( ). * Create Root Node 'Workbook'   L_ELEMENT_ROOT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Workbook'  PARENT = L_DOCUMENT ).   L_ELEMENT_ROOT->SET_ATTRIBUTE( NAME = 'xmlns'  VALUE = 'urn:schemas-microsoft-com:office:spreadsheet' ).   NS_ATTRIBUTE = L_DOCUMENT->CREATE_NAMESPACE_DECL( NAME = 'ss'  PREFIX = 'xmlns'  URI = 'urn:schemas-microsoft-com:office:spreadsheet' ).   L_ELEMENT_ROOT->SET_ATTRIBUTE_NODE( NS_ATTRIBUTE ).   NS_ATTRIBUTE = L_DOCUMENT->CREATE_NAMESPACE_DECL( NAME = 'x'  PREFIX = 'xmlns'  URI = 'urn:schemas-microsoft-com:office:excel' ).   L_ELEMENT_ROOT->SET_ATTRIBUTE_NODE( NS_ATTRIBUTE ). * Create node for document properties.   R_ELEMENT_PROPERTIES = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'TEST_REPORT'  PARENT = L_ELEMENT_ROOT ).   L_VALUE = SY-UNAME.   L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Author'  VALUE = L_VALUE  PARENT = R_ELEMENT_PROPERTIES  ). * Styles   R_STYLES = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Styles'  PARENT = L_ELEMENT_ROOT  ). * Style for Header   R_STYLE  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Style'   PARENT = R_STYLES  ).   R_STYLE->SET_ATTRIBUTE_NS( NAME = 'ID'  PREFIX = 'ss'  VALUE = 'Header' ).   R_FORMAT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Font'  PARENT = R_STYLE  ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Bold'  PREFIX = 'ss'  VALUE = '1' ).   R_FORMAT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Interior' PARENT = R_STYLE  ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Color'   PREFIX = 'ss'  VALUE = '#92D050' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Pattern' PREFIX = 'ss'  VALUE = 'Solid' ).   R_FORMAT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Alignment'  PARENT = R_STYLE  ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Vertical'  PREFIX = 'ss'  VALUE = 'Center' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'WrapText'  PREFIX = 'ss'  VALUE = '1' ).   R_BORDER  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Borders'  PARENT = R_STYLE ).   R_FORMAT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Border'   PARENT = R_BORDER  ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Position'  PREFIX = 'ss'  VALUE = 'Bottom' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'LineStyle'  PREFIX = 'ss'  VALUE = 'Continuous' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Weight'  PREFIX = 'ss'  VALUE = '1' ).   R_FORMAT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Border'   PARENT = R_BORDER  ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Position'  PREFIX = 'ss'  VALUE = 'Left' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'LineStyle'  PREFIX = 'ss'  VALUE = 'Continuous' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Weight'  PREFIX = 'ss'  VALUE = '1' ).   R_FORMAT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Border'   PARENT = R_BORDER  ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Position'  PREFIX = 'ss'  VALUE = 'Top' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'LineStyle'  PREFIX = 'ss'  VALUE = 'Continuous' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Weight'  PREFIX = 'ss'  VALUE = '1' ).   R_FORMAT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Border'   PARENT = R_BORDER  ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Position'  PREFIX = 'ss'  VALUE = 'Right' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'LineStyle'  PREFIX = 'ss'  VALUE = 'Continuous' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Weight'  PREFIX = 'ss'  VALUE = '1' ). * Style for Data   R_STYLE1  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Style'   PARENT = R_STYLES  ).   R_STYLE1->SET_ATTRIBUTE_NS( NAME = 'ID'  PREFIX = 'ss'  VALUE = 'Data' ).   R_BORDER  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Borders'  PARENT = R_STYLE1 ).   R_FORMAT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Border'   PARENT = R_BORDER  ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Position'  PREFIX = 'ss'  VALUE = 'Bottom' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'LineStyle'  PREFIX = 'ss'  VALUE = 'Continuous' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Weight'  PREFIX = 'ss'  VALUE = '1' ).   R_FORMAT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Border'   PARENT = R_BORDER  ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Position'  PREFIX = 'ss'  VALUE = 'Left' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'LineStyle'  PREFIX = 'ss'  VALUE = 'Continuous' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Weight'  PREFIX = 'ss'  VALUE = '1' ).   R_FORMAT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Border'   PARENT = R_BORDER  ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Position'  PREFIX = 'ss'  VALUE = 'Top' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'LineStyle'  PREFIX = 'ss'  VALUE = 'Continuous' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Weight'  PREFIX = 'ss'  VALUE = '1' ).   R_FORMAT  = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Border'   PARENT = R_BORDER  ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Position'  PREFIX = 'ss'  VALUE = 'Right' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'LineStyle'  PREFIX = 'ss'  VALUE = 'Continuous' ).   R_FORMAT->SET_ATTRIBUTE_NS( NAME = 'Weight'  PREFIX = 'ss'  VALUE = '1' ). * Worksheet   R_WORKSHEET = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Worksheet'  PARENT = L_ELEMENT_ROOT ).   R_WORKSHEET->SET_ATTRIBUTE_NS( NAME = 'Name'  PREFIX = 'ss'  VALUE = 'Sheet1' ). * Table   R_TABLE = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Table'  PARENT = R_WORKSHEET ).   R_TABLE->SET_ATTRIBUTE_NS( NAME = 'FullColumns'  PREFIX = 'x'  VALUE = '1' ).   R_TABLE->SET_ATTRIBUTE_NS( NAME = 'FullRows'     PREFIX = 'x'  VALUE = '1' ). * Column Formatting   R_COLUMN = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Column'  PARENT = R_TABLE ).   R_COLUMN->SET_ATTRIBUTE_NS( NAME = 'Width'  PREFIX = 'ss'  VALUE = '40' ).   R_COLUMN = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Column'  PARENT = R_TABLE ).   R_COLUMN->SET_ATTRIBUTE_NS( NAME = 'Width'  PREFIX = 'ss'  VALUE = '90' ).   R_COLUMN = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Column'  PARENT = R_TABLE ).   R_COLUMN->SET_ATTRIBUTE_NS( NAME = 'Width'  PREFIX = 'ss'  VALUE = '140' ).   R_COLUMN = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Column'  PARENT = R_TABLE ).   R_COLUMN->SET_ATTRIBUTE_NS( NAME = 'Width'  PREFIX = 'ss'  VALUE = '150' ).   R_COLUMN = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Column'  PARENT = R_TABLE ).   R_COLUMN->SET_ATTRIBUTE_NS( NAME = 'Width'  PREFIX = 'ss'  VALUE = '90' ). * Blank Row *  R_ROW = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Row'  PARENT = R_TABLE ). * Column Headers Row   R_ROW = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Row'  PARENT = R_TABLE ).   R_ROW->SET_ATTRIBUTE_NS( NAME = 'AutoFitHeight'  PREFIX = 'ss'  VALUE = '1' ). * Sr. No.   R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ).   R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Header' ).   R_DATA = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Data'  VALUE = 'Sr. No.'  PARENT = R_CELL ).   R_DATA->SET_ATTRIBUTE_NS( NAME = 'Type'  PREFIX = 'ss' VALUE = 'String' ). * User Name   R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ).   R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Header' ).   R_DATA = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Data'  VALUE = 'User Name'  PARENT = R_CELL ).   R_DATA->SET_ATTRIBUTE_NS( NAME = 'Type'  PREFIX = 'ss' VALUE = 'String' ). * Full Name   R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ).   R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Header' ).   R_DATA = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Data'  VALUE = 'Full Name'  PARENT = R_CELL ).   R_DATA->SET_ATTRIBUTE_NS( NAME = 'Type'  PREFIX = 'ss' VALUE = 'String' ). * Department   R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ).   R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Header' ).   R_DATA = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Data'  VALUE = 'Department'  PARENT = R_CELL ).   R_DATA->SET_ATTRIBUTE_NS( NAME = 'Type'  PREFIX = 'ss' VALUE = 'String' ). * Login   R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ).   R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Header' ).   CONCATENATE 'Login - ' LV_DATE+6(2) '/' LV_DATE+4(2) '/' LV_DATE+0(4) INTO L_VALUE.   R_DATA = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Data'  VALUE = L_VALUE  PARENT = R_CELL ).   R_DATA->SET_ATTRIBUTE_NS( NAME = 'Type'  PREFIX = 'ss' VALUE = 'String' ). * Blank Row after Column Headers *  R_ROW = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Row'  PARENT = R_TABLE ). *  R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ). *  R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Data' ). * *  R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ). *  R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Data' ). * *  R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ). *  R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Data' ). * *  R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ). *  R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Data' ). * *  R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ). *  R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Data' ). * Data Table   LOOP AT IT_FINAL INTO WA_FINAL.     R_ROW = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Row'  PARENT = R_TABLE ). * Sr. No.     R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ).     R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Data' ).     L_VALUE = SY-TABIX.     CONDENSE L_VALUE NO-GAPS.     R_DATA = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Data'  VALUE = L_VALUE   PARENT = R_CELL ).           " Data     R_DATA->SET_ATTRIBUTE_NS( NAME = 'Type'  PREFIX = 'ss'  VALUE = 'Number' ).                               " Cell format * User Name     R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ).     R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Data' ).     L_VALUE = WA_FINAL-USER_ID.     R_DATA = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Data'  VALUE = L_VALUE   PARENT = R_CELL ).           " Data     R_DATA->SET_ATTRIBUTE_NS( NAME = 'Type'  PREFIX = 'ss'  VALUE = 'String' ).                               " Cell format * Full Name     R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ).     R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Data' ).     L_VALUE = WA_FINAL-FULL_NAME.     R_DATA = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Data'  VALUE = L_VALUE   PARENT = R_CELL ).           " Data     R_DATA->SET_ATTRIBUTE_NS( NAME = 'Type'  PREFIX = 'ss'  VALUE = 'String' ).                               " Cell format * Department     R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ).     R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Data' ).     L_VALUE = WA_FINAL-DEPT.     R_DATA = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Data'  VALUE = L_VALUE   PARENT = R_CELL ).           " Data     R_DATA->SET_ATTRIBUTE_NS( NAME = 'Type'  PREFIX = 'ss'  VALUE = 'String' ).                               " Cell format * Login     R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell'  PARENT = R_ROW ).     R_CELL->SET_ATTRIBUTE_NS( NAME = 'StyleID'  PREFIX = 'ss'  VALUE = 'Data' ).     L_VALUE = WA_FINAL-LOGIN.     R_DATA = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Data'  VALUE = L_VALUE   PARENT = R_CELL ).          " Data     R_DATA->SET_ATTRIBUTE_NS( NAME = 'Type'  PREFIX = 'ss'  VALUE = 'String' ).                              " Cell format   ENDLOOP. * Creating a Stream Factory   L_STREAMFACTORY = L_IXML->CREATE_STREAM_FACTORY( ). * Connect Internal XML Table to Stream Factory   L_OSTREAM = L_STREAMFACTORY->CREATE_OSTREAM_ITABLE( TABLE = L_XML_TABLE ). * Rendering the Document   L_RENDERER = L_IXML->CREATE_RENDERER( OSTREAM  = L_OSTREAM  DOCUMENT = L_DOCUMENT ).   L_RC = L_RENDERER->RENDER( ). * Saving the XML Document   L_XML_SIZE = L_OSTREAM->GET_NUM_WRITTEN_RAW( ). ENDFORM.                    " process_xml_data