前言
XML 发送邮件
代码
DATA: GT_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE.
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,
L_XML_TABLE_FORECAST TYPE TABLE OF XML_LINE,
WA_XML TYPE XML_LINE,
GS_SOLIX TYPE SOLIX,
L_RC TYPE I,
L_XML_SIZE TYPE I,
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.
DATA BINARY_CONTENT_FORECAST TYPE SOLIX_TAB.
DATA SEND_REQUEST TYPE REF TO CL_BCS.
DATA BCS_EXCEPTION TYPE REF TO CX_BCS.
DATA DOCUMENT TYPE REF TO CL_DOCUMENT_BCS.
DATA RECIPIENT TYPE REF TO IF_RECIPIENT_BCS.
DATA MAIN_TEXT TYPE BCSY_TEXT.
DATA LC_XLS_TYPE TYPE SO_OBJ_TP VALUE 'XLS'.
DATA TITLE1(50) TYPE C.
DATA MAILTO TYPE AD_SMTPADR.
DATA SENT_TO_ALL TYPE OS_BOOLEAN.
CLEAR GT_SPFLI.REFRESH GT_SPFLI.
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_SPFLI FROM SPFLI.
L_IXML = CL_IXML=>CREATE( ).
L_DOCUMENT = L_IXML->CREATE_DOCUMENT( ).
PERFORM CREATE_WORKBOOK USING L_DOCUMENT
R_WORKSHEET
R_TABLE.
PERFORM FRM_FORECAST_COLUMN_FORMAT USING L_DOCUMENT R_TABLE.
LOOP AT GT_SPFLI.
R_ROW = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Row' PARENT = R_TABLE ).
PERFORM FRM_VALUE_DATA USING GT_SPFLI-CARRID."赋值
PERFORM FRM_VALUE_DATA USING GT_SPFLI-CITYFROM."赋值
ENDLOOP.
L_STREAMFACTORY = L_IXML->CREATE_STREAM_FACTORY( ).
L_OSTREAM = L_STREAMFACTORY->CREATE_OSTREAM_ITABLE( TABLE = L_XML_TABLE_FORECAST ).
L_RENDERER = L_IXML->CREATE_RENDERER( OSTREAM = L_OSTREAM DOCUMENT = L_DOCUMENT ).
L_RC = L_RENDERER->RENDER( ).
L_XML_SIZE = L_OSTREAM->GET_NUM_WRITTEN_RAW( ).
LOOP AT L_XML_TABLE_FORECAST INTO WA_XML.
CLEAR GS_SOLIX.
GS_SOLIX-LINE = WA_XML-DATA.
APPEND GS_SOLIX TO BINARY_CONTENT_FORECAST.
ENDLOOP.
TRY.
SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
TITLE1 = '测试数据'.
APPEND '测试数据' TO MAIN_TEXT.
APPEND ' 谢谢!' TO MAIN_TEXT.
APPEND '' TO MAIN_TEXT.
DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = 'RAW'
I_TEXT = MAIN_TEXT
I_SUBJECT = TITLE1 ). " 邮件主题名
DOCUMENT->ADD_ATTACHMENT(
I_ATTACHMENT_TYPE = LC_XLS_TYPE
I_ATTACHMENT_SUBJECT = 'SpreadSheet'
I_ATT_CONTENT_HEX = BINARY_CONTENT_FORECAST ).
SEND_REQUEST->SET_DOCUMENT( DOCUMENT ).
MAILTO = 'XXX'."收件人
RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).
SEND_REQUEST->ADD_RECIPIENT( RECIPIENT ).
SENT_TO_ALL = SEND_REQUEST->SEND( I_WITH_ERROR_SCREEN = 'X' ).
COMMIT WORK.
WAIT UP TO 10 SECONDS.
SUBMIT RSCONN01 WITH MODE = 'INT'
WITH OUTPUT = 'X'
AND RETURN.
IF SENT_TO_ALL IS INITIAL.
MESSAGE I500(SBCOMS) WITH MAILTO.
ELSE.
MESSAGE S022(SO).
ENDIF.
CATCH CX_BCS INTO BCS_EXCEPTION.
MESSAGE I865(SO) WITH BCS_EXCEPTION->ERROR_TYPE.
ENDTRY.
FORM CREATE_WORKBOOK USING L_DOCUMENT TYPE REF TO IF_IXML_DOCUMENT
R_WORKSHEET TYPE REF TO IF_IXML_ELEMENT
R_TABLE TYPE REF TO IF_IXML_ELEMENT.
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,
L_VALUE TYPE STRING.
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 ).
* 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' ).
ENDFORM. "CREATE_WORKBOOK
FORM FRM_FORECAST_COLUMN_FORMAT USING L_DOCUMENT TYPE REF TO IF_IXML_DOCUMENT
R_TABLE TYPE REF TO IF_IXML_ELEMENT.
DATA: 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.
R_COLUMN = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Column' PARENT = R_TABLE ).
R_COLUMN->SET_ATTRIBUTE_NS( NAME = 'Width' PREFIX = 'ss' VALUE = '60' )."设定第一列宽度
R_COLUMN = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Column' PARENT = R_TABLE ).
R_COLUMN->SET_ATTRIBUTE_NS( NAME = 'Width' PREFIX = 'ss' VALUE = '120' )."设定第二列宽度
R_ROW = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Row' PARENT = R_TABLE ).
R_ROW->SET_ATTRIBUTE_NS( NAME = 'AutoFitHeight' PREFIX = 'ss' VALUE = '1' ).
R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell' PARENT = R_ROW ).
R_DATA = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Data' VALUE = '' PARENT = R_CELL )."栏位1
R_DATA->SET_ATTRIBUTE_NS( NAME = 'Type' PREFIX = 'ss' VALUE = 'String' ).
R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell' PARENT = R_ROW ).
R_DATA = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Data' VALUE = 'Depart.city' PARENT = R_CELL )."栏位2
R_DATA->SET_ATTRIBUTE_NS( NAME = 'Type' PREFIX = 'ss' VALUE = 'String' ).
ENDFORM.
FORM FRM_VALUE_DATA USING SVALUE.
L_VALUE = SVALUE.
R_CELL = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'Cell' PARENT = R_ROW ).
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' ).
ENDFORM.