示例程序:
REPORT zgr_sd_00_r_order_release.
TABLES: vbak, kna1, mvke, makt, vbap, objk,
zgr_sd_usa_017,soparbi1.
TYPES: BEGIN OF ty_vbap,
vbeln TYPE vbak-vbeln,
posnr TYPE vbap-posnr,
matnr TYPE vbap-matnr,
arktx TYPE vbap-arktx,
kwmeng TYPE vbap-kwmeng,
werks TYPE vbap-werks,
lgort TYPE vbap-lgort,
edatu TYPE vbep-edatu,
END OF ty_vbap.
CONSTANTS:
gc_tab TYPE c VALUE cl_bcs_convert=>gc_tab, "CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
gc_crlf TYPE c VALUE cl_bcs_convert=>gc_crlf. "CL_ABAP_CHAR_UTILITIES=>CR_LF
DATA: i_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
i_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE, "receivers
i_contents_txt LIKE solisti1 OCCURS 0 WITH HEADER LINE, "ASCII contents of object and attachments
i_contents_hex LIKE solix OCCURS 0 WITH HEADER LINE, "Binary contents of object and attachments
i_contents_bin LIKE solisti1 OCCURS 0 WITH HEADER LINE,
i_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE, "attachments name
w_doc_data LIKE sodocchgi1.
DATA: c_mimetype TYPE char64 VALUE 'APPLICATION/MSEXCEL;charset=utf-16le'.
DATA: v_xattach TYPE xstring.
DATA: lv_string TYPE string.
DATA: tab_lines LIKE sy-tabix,
w_sent_all(1) TYPE c,
w_error TYPE sy-subrc.
DATA: wa_vbap TYPE ty_vbap,
itab_vbap TYPE STANDARD TABLE OF ty_vbap.
DATA: wa_log TYPE zgr_sd_usa_017,
itab_log TYPE STANDARD TABLE OF zgr_sd_usa_017.
TYPE-POOLS: ixml.
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.
TYPE-POOLS: slis.
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE, "slis_t_fieldcat_alv WITH HEADER LINE,slis_t_fieldcat_alv
fieldcatalog_alv TYPE slis_t_fieldcat_alv WITH HEADER LINE,
i_events TYPE slis_t_event, "alv事件
w_events LIKE LINE OF i_events,
gd_tab_group TYPE slis_t_sp_group_alv,
* gd_layout TYPE lvc_s_layo, "slis_layout_alv,
gd_layout TYPE slis_layout_alv,
usercommand TYPE slis_fieldname VALUE 'USERCOMMAND',
gd_repid LIKE sy-repid.
SELECTION-SCREEN BEGIN OF BLOCK blk3 WITH FRAME TITLE TEXT-103.
PARAMETER p_email AS CHECKBOX USER-COMMAND send MODIF ID m2.
SELECT-OPTIONS s_addres FOR soparbi1-value NO INTERVALS MODIF ID m1.
SELECTION-SCREEN END OF BLOCK blk3.
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT .
LOOP AT SCREEN .
CASE screen-group1.
WHEN 'M1' .
IF p_email EQ 'X' .
screen-active = 1 .
ELSE .
screen-active = 0 .
ENDIF .
ENDCASE .
MODIFY SCREEN .
ENDLOOP .
START-OF-SELECTION.
PERFORM fetch_data.
PERFORM frm_email.
PERFORM layout_build. "2.用于定义ALV表单的相关格式、属性
PERFORM fields_build. "3.用来定义表单中的各个列的相关信息,比如列名等
PERFORM display_data. "4.用来显示ALV表单
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FETCH_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fetch_data .
CLEAR:wa_vbap,itab_vbap.
CLEAR:wa_log,itab_log.
DATA: l_date TYPE sy-datum.
DATA: wa_header TYPE bapisdh1, "表头
wa_headerx TYPE bapisdh1x, "表头标志
wa_item TYPE bapisditm, "行项目
wa_itemx TYPE bapisditmx,
wa_return TYPE bapiret2.
DATA:
lt_item TYPE STANDARD TABLE OF bapisditm,
lt_itemx TYPE STANDARD TABLE OF bapisditmx,
lt_return TYPE STANDARD TABLE OF bapiret2.
DATA: cp_eind TYPE c.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = sy-datum
days = 7
months = 0
signum = '+'
years = 0
IMPORTING
calc_date = l_date.
SELECT
vbap~vbeln
vbap~posnr
vbap~matnr
vbap~arktx
vbap~kwmeng
vbap~werks
vbap~lgort
vbep~edatu
"edatu
FROM
vbak JOIN vbap ON vbak~vbeln = vbap~vbeln
JOIN vbep ON vbap~vbeln = vbep~vbeln AND vbap~posnr = vbep~posnr
INTO CORRESPONDING FIELDS OF TABLE itab_vbap
WHERE vbep~etenr = 1
AND vbak~vkorg = '1410'
AND vbap~abgru = 'U2'
AND vbep~edatu <= l_date.
LOOP AT itab_vbap INTO wa_vbap.
* UPDATE vbap SET abgru = ''
* WHERE vbeln = wa_vbap-vbeln AND posnr = wa_vbap-posnr.
CLEAR wa_item.
CLEAR wa_itemx.
CLEAR lt_item.
CLEAR lt_itemx.
wa_headerx-updateflag = 'U'.
wa_item-itm_number = wa_vbap-posnr.
wa_itemx-itm_number = wa_vbap-posnr.
wa_itemx-updateflag = 'U'.
wa_itemx-reason_rej = 'X'.
APPEND wa_item TO lt_item.
APPEND wa_itemx TO lt_itemx.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = wa_vbap-vbeln
order_header_inx = wa_headerx
TABLES
return = lt_return
order_item_in = lt_item[]
order_item_inx = lt_itemx[].
* 处理错误消息:通过判断消息的类型,来判断BAPI是否成功
LOOP AT lt_return INTO wa_return.
* CLEAR ls_msg.
* ls_msg-class = 'BUS'.
* ls_msg-msgtyp = wa_return-type.
* ls_msg-msgno = wa_return-number.
* ls_msg-msgtxt = wa_return-message.
* APPEND ls_msg TO tp_message.
IF wa_return-type EQ 'E' OR
wa_return-type = 'A' OR
wa_return = 'X'.
cp_eind = 'X'. "失败
ENDIF.
ENDLOOP.
IF cp_eind NE 'X'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
CLEAR:wa_log.
MOVE-CORRESPONDING wa_vbap TO wa_log.
GET TIME.
wa_log-datum = sy-datum.
wa_log-uzeit = sy-uzeit.
APPEND wa_log TO itab_log.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
ENDIF.
ENDLOOP.
INSERT zgr_sd_usa_017 FROM TABLE itab_log.
"alv
ENDFORM. " FETCH_DATA
*&---------------------------------------------------------------------*
*& Form DEFINE_MAIL_HEADER
*&---------------------------------------------------------------------*
FORM define_mail_header .
DATA: tmp_date LIKE sy-datum.
DATA: tmp_char(30).
tmp_date = sy-datum.
CONCATENATE 'Overdue Batch ' sy-datum INTO tmp_char.
********define subject and priority************
w_doc_data-obj_descr = 'Hello'. "Email Subject.
w_doc_data-priority = 1. "mail PRIORITY¡A 1 is highest
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'OFFER'. "Name of document..
w_doc_data-sensitivty = 'O'. "Document sensitivity.
********mail main context***********************
i_contents_txt = 'Dear Mr and Miss:'.
APPEND i_contents_txt.
i_contents_txt = ' '.
APPEND i_contents_txt.
i_contents_txt = ' Please check attachment in time!'.
APPEND i_contents_txt.
i_contents_txt = ' This Email is sent by systme, Do not Return the Email.'.
APPEND i_contents_txt.
i_contents_txt =' If you have any problem, please contact with ERP.'.
APPEND i_contents_txt.
i_contents_txt = ' '.
APPEND i_contents_txt.
i_contents_txt = tmp_date.
APPEND i_contents_txt.
DESCRIBE TABLE i_contents_txt LINES tab_lines.
READ TABLE i_contents_txt INDEX tab_lines.
w_doc_data-doc_size = ( tab_lines - 1 ) * 255 + strlen( i_contents_txt ).
********count lines by man context*************
CLEAR i_packing_list-transf_bin.
i_packing_list-transf_bin = space. "ASCII format/binary format
i_packing_list-head_start = 1.
i_packing_list-head_num = 0.
i_packing_list-body_start = 1.
i_packing_list-body_num = tab_lines.
i_packing_list-doc_type = 'RAW'.
APPEND i_packing_list.
ENDFORM. " DEFINE_MAIL_HEADER
*&---------------------------------------------------------------------*
*& Form DEFINE_MAIL_ATTACHMENT
*&---------------------------------------------------------------------*
FORM define_mail_attachment .
LOOP AT itab_vbap INTO wa_vbap.
DATA:l_kwmeng TYPE string.
MOVE wa_vbap-kwmeng TO l_kwmeng.
CONCATENATE lv_string
wa_vbap-vbeln gc_tab
wa_vbap-posnr gc_tab
wa_vbap-matnr gc_tab
wa_vbap-arktx gc_tab
l_kwmeng gc_tab
wa_vbap-edatu gc_crlf
INTO lv_string.
ENDLOOP.
* Convert string to xstring type
* 'APPLICATION/MSEXCEL;charset=utf-16le'
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_string
mimetype = c_mimetype
IMPORTING
buffer = v_xattach
EXCEPTIONS
failed = 1
OTHERS = 2.
* Add the file header for utf-16le. .
IF sy-subrc = 0.
CONCATENATE cl_abap_char_utilities=>byte_order_mark_little
v_xattach INTO v_xattach IN BYTE MODE.
ENDIF.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = v_xattach
TABLES
binary_tab = i_contents_hex.
***set attachment name, count size*******************
DESCRIBE TABLE itab_vbap LINES tab_lines.
tab_lines = tab_lines .
i_packing_list-transf_bin = 'X'.
i_packing_list-head_start = 1.
i_packing_list-head_num = 0.
i_packing_list-body_start = 1.
i_packing_list-body_num = tab_lines.
i_packing_list-doc_type = 'XLS'.
i_packing_list-obj_name = 'ATTACHMENT'.
i_packing_list-obj_descr = 'spfli'.
i_packing_list-doc_size = tab_lines * 255.
APPEND i_packing_list.
ENDFORM. " DEFINE_MAIL_ATTACHMENT
*&---------------------------------------------------------------------*
*& Form GET_RECEIVERS
*&---------------------------------------------------------------------*
FORM get_receivers .
* Add the recipients email address
CLEAR i_receivers.
REFRESH i_receivers.
* SELECT * FROM zszmail.
* i_receivers-receiver = '461356592@qq.com'."Email Address
i_receivers-receiver = 'hu.wang@sh.shin-china.com'."Email Address
i_receivers-rec_type = 'U'. "Internet address
i_receivers-notif_read = 'X'.
i_receivers-com_type = 'INT'.
i_receivers-notif_del = 'X'.
i_receivers-notif_ndel = 'X'.
APPEND i_receivers.
* ENDSELECT.
ENDFORM. " GET_RECEIVERS
*&---------------------------------------------------------------------*
*& Form SEND_EMAIL_MESSAGE
*&---------------------------------------------------------------------*
FORM send_email_message.
DATA: w_subrc LIKE sy-subrc.
* Call the FM to post the message to SAPMAIL
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = w_doc_data "Attributes of new document
put_in_outbox = 'X' "Flag: Move document to outbox after send
commit_work = 'X' "An explicit COMMIT WORK is to be set
IMPORTING
sent_to_all = w_sent_all
TABLES
packing_list = i_packing_list "Information about structure of data tables
object_header = i_object_header
contents_hex = i_contents_hex
contents_txt = i_contents_txt "ASCII contents of object and attachments
receivers = i_receivers "Document recipients with send attributes
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
w_subrc = sy-subrc.
WAIT UP TO 2 SECONDS.
IF w_subrc EQ 0.
SUBMIT rsconn01 WITH mode = 'INT'
WITH output = 'X'
AND RETURN.
ENDIF.
ENDFORM. " SEND_EMAIL_MESSAGE
*&---------------------------------------------------------------------*
*& Form FRM_EMAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_email .
CHECK p_email IS NOT INITIAL.
CHECK sy-batch IS NOT INITIAL. "是否后台作业
CHECK s_addres[] IS NOT INITIAL.
PERFORM frm_process_email_data.
PERFORM frm_send_email.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_EMAIL_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_process_email_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 = 'Sales_Manager_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 ).
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
PERFORM frm_column_format USING '70'. "Sales Document
PERFORM frm_column_format USING '50'. "Item
PERFORM frm_column_format USING '60'. "Material
PERFORM frm_column_format USING '130'. "Material description
PERFORM frm_column_format USING '80'. "Order Qty
PERFORM frm_column_format USING '60'. "Plant
PERFORM frm_column_format USING '130'. "Storage location
PERFORM frm_column_format USING '90'. "Delivery date
PERFORM frm_column_format USING '70'. "Release date
* PERFORM frm_column_format USING '70'. "Release Time
* 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' ).
PERFORM frm_header_description USING 'Sales Document'.
PERFORM frm_header_description USING 'Item'.
PERFORM frm_header_description USING 'Material'.
PERFORM frm_header_description USING 'Material description'.
PERFORM frm_header_description USING 'Order Qty'.
PERFORM frm_header_description USING 'Storage location'.
PERFORM frm_header_description USING 'Plant'.
PERFORM frm_header_description USING 'Delivery date'.
PERFORM frm_header_description USING 'Release date'.
* PERFORM frm_header_description USING 'Release time'.
* Data Table
LOOP AT itab_log INTO wa_log.
r_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = wa_log-vbeln
IMPORTING
output = wa_log-vbeln.
PERFORM frm_fill_table USING 'String' wa_log-vbeln. "Sales Document
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = wa_log-posnr
IMPORTING
output = wa_log-posnr.
PERFORM frm_fill_table USING 'String' wa_log-posnr."Item
PERFORM frm_fill_table USING 'String' wa_log-matnr.
PERFORM frm_fill_table USING 'String' wa_log-arktx.
PERFORM frm_fill_table USING 'String' wa_log-kwmeng."
PERFORM frm_fill_table USING 'String' wa_log-werks."
PERFORM frm_fill_table USING 'String' wa_log-lgort.
PERFORM frm_fill_table USING 'String' wa_log-edatu.
PERFORM frm_fill_table USING 'String' wa_log-datum.
* PERFORM frm_fill_table USING 'String' wa_log-uzeit.
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.
*&---------------------------------------------------------------------*
*& Form FRM_SEND_EMAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_send_email .
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 sy-datlo+6(2) '-' sy-datlo+4(2) '-' sy-datlo+0(4) INTO subj_date.
*modify by hand lixuexue 2015.03.25 SM 2238 -----start
"old
*CONCATENATE 'SAP Sales Manager Report ' SUBJ_DATE INTO DOC_CHNG-OBJ_DESCR SEPARATED BY SPACE.
"ne
DATA job TYPE btcjob.
* SELECT SINGLE jobname INTO job FROM v_op WHERE jobname EQ 'ZMZ1400SD01' AND status EQ 'R'. .
* IF sy-subrc = 0.
* CONCATENATE 'Consumable Mo Sales Rpt' subj_date INTO doc_chng-obj_descr SEPARATED BY space.
* ENDIF.
* SELECT SINGLE jobname INTO job FROM v_op WHERE jobname EQ 'ZWZ1400SD27' AND status EQ 'R'.
* IF sy-subrc = 0.
* CONCATENATE '9700 Sales Rpt' subj_date INTO doc_chng-obj_descr SEPARATED BY space.
* ENDIF.
*
* SELECT SINGLE jobname INTO job FROM v_op WHERE jobname EQ 'ZWZ1400SD28' AND status EQ 'R'.
* IF sy-subrc = 0.
* CONCATENATE '9800 Sales Rpt' subj_date INTO doc_chng-obj_descr SEPARATED BY space.
* ENDIF.
*
* SELECT SINGLE jobname INTO job FROM v_op WHERE jobname EQ 'ZWZ1400SD29' AND status EQ 'R'.
* IF sy-subrc = 0.
* CONCATENATE '9800 Sales Rpt' subj_date INTO doc_chng-obj_descr SEPARATED BY space.
* ENDIF.
IF doc_chng-obj_descr IS INITIAL.
CONCATENATE 'Release Blanket Order' subj_date INTO doc_chng-obj_descr SEPARATED BY space.
ENDIF.
*modify by hand lixuexue 2015.03.25 SM 2238 -----end
* 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 = 'Release Blanket Order'.
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.
*modify by hand lixuexue 2015.03.25 SM 2238 -----start
"old
*CONCATENATE 'SAP Sales Manager Report' SUBJ_DATE INTO OBJPACK-OBJ_DESCR SEPARATED BY SPACE.
"new
DATA job1 TYPE btcjob.
SELECT SINGLE jobname INTO job1 FROM v_op WHERE jobname EQ 'ZMZ1400SD01' AND status EQ 'R'.
*
* IF sy-subrc = 0.
* CONCATENATE 'Consumable Mo Sales Rpt' subj_date INTO objpack-obj_descr SEPARATED BY space.
* ENDIF.
* SELECT SINGLE jobname INTO job1 FROM v_op WHERE jobname EQ 'ZWZ1400SD27' AND status EQ 'R'.
* IF sy-subrc = 0.
* CONCATENATE '9700 Sales Rpt' subj_date INTO objpack-obj_descr SEPARATED BY space.
* ENDIF.
* SELECT SINGLE jobname INTO job1 FROM v_op WHERE jobname EQ 'ZWZ1400SD28' AND status EQ 'R'.
* IF sy-subrc = 0.
* CONCATENATE '9800 Sales Rpt' subj_date INTO objpack-obj_descr SEPARATED BY space.
* ENDIF.
* SELECT SINGLE jobname INTO job1 FROM v_op WHERE jobname EQ 'ZWZ1400SD29' AND status EQ 'R'.
* IF sy-subrc = 0.
* CONCATENATE '9800 Sales Rpt' subj_date INTO objpack-obj_descr SEPARATED BY space.
* ENDIF.
IF objpack-obj_descr IS INITIAL.
CONCATENATE 'Release Blanket Order' subj_date INTO objpack-obj_descr SEPARATED BY space.
ENDIF.
*modify by hand lixuexue 2015.03.25 SM 2238 -----start
objpack-doc_type = 'XLS'.
objpack-doc_size = tab_lines * 255.
APPEND objpack.
* Target Recipent
CLEAR reclist.
LOOP AT s_addres.
reclist-receiver = s_addres-low.
reclist-rec_type = 'U'.
APPEND reclist.
ENDLOOP.
* Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = doc_chng
put_in_outbox = '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.
COMMIT WORK.
MESSAGE 'Email send successfully' TYPE 'S'.
ELSE.
ROLLBACK WORK.
MESSAGE 'Failed to send email' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_COLUMN_FORMAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_1669 text
*----------------------------------------------------------------------*
FORM frm_column_format USING p_len.
r_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
r_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = p_len ).
r_column->set_attribute_ns( name = 'AutoFitWidth' prefix = 'ss' value = '1' ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILL_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_1796 text
* -->P_WA_LOG_VBELN text
*----------------------------------------------------------------------*
FORM frm_fill_table USING p_type
p_value.
r_cell = l_document->create_simple_element( name = 'Cell' parent = r_row ).
r_cell->set_attribute_ns( name = 'StyleID' prefix = 'ss' value = 'Data' ).
IF p_type = 'Number'.
PERFORM frm_number_format USING p_value CHANGING l_value.
ELSE.
l_value = p_value.
ENDIF.
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 = p_type ).
ENDFORM. " FRM_FILL_TABLE
*&---------------------------------------------------------------------*
*& Form FRM_HEADER_DESCRIPTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_1730 text
*----------------------------------------------------------------------*
FORM frm_header_description USING p_desc.
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 = p_desc parent = r_cell ).
r_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
ENDFORM. " FRM_HEADER_DESCRIPTION
*&---------------------------------------------------------------------*
*& Form FRM_NUMBER_FORMAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_VALUE text
* <--P_L_VALUE text
*----------------------------------------------------------------------*
FORM frm_number_format USING p_wa_tab_boqty
CHANGING p_l_value.
IF p_wa_tab_boqty < 0.
p_wa_tab_boqty = p_wa_tab_boqty * -1.
p_l_value = p_wa_tab_boqty.
CONCATENATE '-' p_l_value INTO p_l_value.
CONDENSE p_l_value NO-GAPS.
p_wa_tab_boqty = p_wa_tab_boqty * -1.
ELSE.
p_l_value = p_wa_tab_boqty.
CONDENSE p_l_value NO-GAPS.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form LAYOUT_BUILD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM layout_build .
gd_layout-zebra = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FIELDS_BUILD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fields_build .
fieldcatalog-fieldname = 'VBELN'."
fieldcatalog-seltext_m = TEXT-111.
fieldcatalog-col_pos = 1.
fieldcatalog-outputlen = 10.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
* fieldcatalog-do_sum = 'X'.
fieldcatalog-no_zero = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'POSNR'."
fieldcatalog-seltext_m = TEXT-002.
fieldcatalog-col_pos = 2.
fieldcatalog-outputlen = 10.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
* fieldcatalog-do_sum = 'X'.
* fieldcatalog-no_zero = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MATNR'."‘
fieldcatalog-seltext_m = TEXT-003.
fieldcatalog-col_pos = 3.
fieldcatalog-outputlen = 10.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
* fieldcatalog-do_sum = 'X'.
* fieldcatalog-no_zero = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'ARKTX'.
fieldcatalog-seltext_m = TEXT-004.
fieldcatalog-col_pos = 4.
fieldcatalog-outputlen = 20.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
* fieldcatalog-do_sum = 'X'.
* fieldcatalog-no_zero = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'KWMENG'."‘可用性日期’
fieldcatalog-seltext_m = TEXT-005.
fieldcatalog-col_pos = 5.
fieldcatalog-outputlen = 10.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
* fieldcatalog-do_sum = 'X'.
* fieldcatalog-no_zero = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'WERKS'."收获日期
fieldcatalog-seltext_m = TEXT-006.
fieldcatalog-col_pos = 6.
fieldcatalog-outputlen = 10.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
* fieldcatalog-do_sum = 'X'.
* fieldcatalog-no_zero = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'LGORT'.
fieldcatalog-seltext_m = TEXT-007.
fieldcatalog-col_pos = 7.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'EDATU'.
fieldcatalog-seltext_m = TEXT-008.
fieldcatalog-col_pos = 8.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'DATUM'.
fieldcatalog-seltext_m = TEXT-009.
fieldcatalog-col_pos = 9.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'UZEIT'.
fieldcatalog-seltext_m = TEXT-010.
fieldcatalog-col_pos = 10.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_data .
gd_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = gd_repid
* i_callback_top_of_page = 'TOP-OF-PAGE' "see FORM
* i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
* i_grid_title = outtext
i_callback_pf_status_set = 'FRM_SETSTATUS'
is_layout = gd_layout
it_fieldcat = fieldcatalog[]
* it_special_groups = gd_tabgroup
* IT_EVENTS = GT_XEVENTS
* i_save = 'X'
* is_variant = z_template
TABLES
t_outtab = itab_log
EXCEPTIONS
program_error = 1
OTHERS = 2.
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 frm_setstatus USING pt_extab TYPE slis_t_extab. "固定参数
SET PF-STATUS 'STANDARD_FULLSCREEN' .
ENDFORM.
FORM user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield.
CASE ucomm.
WHEN '&EMAIL'.
IF s_addres[] IS INITIAL.
MESSAGE 'Please input the email address in selection screen' TYPE 'E'.
EXIT.
ENDIF.
PERFORM frm_process_email_data
PERFORM frm_send_email.
ENDCASE.
ENDFORM.