- 在 Unicode 系統下,寄有夾檔的 Email。
***********************************************************************
**Program name: ZJOEYTEST002
**Description : Email for Unicode
**Date/Author : 2008.07.15 / Joey Lee
***********************************************************************
** M O D I F I C A T I O N L O G
***********************************************************************
** ChangeDate Programmer Request Description
** ========== ========== ========== ==================
** 2008.07.15 Joey Lee New Program
***********************************************************************
REPORT zjoeytest002 NO STANDARD PAGE HEADING
LINE-SIZE 135
LINE-COUNT 58(2).
*======================================================================
*================================================Global Date declear===
*-----For attach file title
DATA: BEGIN OF t_hexcel OCCURS 0,
fname(50) TYPE c,
END OF t_hexcel.
*-----For attach file content
DATA: BEGIN OF t_mail OCCURS 0,
txt(1024),
END OF t_mail.
*-----For mail attach file
DATA: it_objbin LIKE solisti1 OCCURS 0 WITH HEADER LINE,
it_objbinx LIKE solix OCCURS 0 WITH HEADER LINE.
FIELD-SYMBOLS <ft_data> TYPE STANDARD TABLE.
DATA : g_title(50),
g_dataname TYPE string,
g_doc_size(12).
*-----For data
DATA: it_mail LIKE vbap OCCURS 0 WITH HEADER LINE,
g_message TYPE string.
*======================================================================
*===================================================Selection Screen===
PARAMETERS p_run AS CHECKBOX.
*======================================================================
*=======================================================Initial Data===
*LOAD-OF-PROGRAM
*INITIALIZATION.
*======================================================================
*============================================Selection Screen Events===
*AT SELECTION-SCREEN OUTPUT.
*AT SELECTION-SCREEN ON VALUE-REQUEST for <para/sel-opt>.
*AT SELECTION-SCREEN.
*AT SELECTION-SCREEN ON <f>.
*AT SELECTION-SCREEN ON BLOCK <>.
*======================================================================
*======================================================Report Events===
START-OF-SELECTION.
IF p_run NE 'X'.
STOP.
ELSE.
g_message = 'P_RUN ne X, did not send any mail'.
ENDIF.
*-Get data
PERFORM get_data.
*-Set attach file header
PERFORM generate_excel_header_error.
*-Adjust attach file format
ASSIGN it_mail[] TO <ft_data>.
PERFORM generate_mail_excel.
*-Send mail
g_title = 'Test attach mail'.
g_dataname = 'AttachFilename.xls'.
PERFORM send_mail USING g_title
g_dataname.
END-OF-SELECTION.
*-Write error message
WRITE g_message.
*======================================================================
*========================================================List Events===
*TOP-OF-PAGE.
*END-OF-PAGE.
*AT LINE-SELECTION.
*TOP-OF-PAGE DURING LINE-SELECTION.
*AT USER-COMMAND.
*======================================================================
*========================================================Subroutines===
*&---------------------------------------------------------------------*
*& Form GENERATE_EXCEL_HEADER_ERROR
*&---------------------------------------------------------------------*
FORM generate_excel_header_error .
t_hexcel-fname = '項次'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '錯誤訊息'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '過帳日期'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '記錄類型'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '幣別'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '公司代碼'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '業務範圍'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '利潤中心'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '客戶'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '營業課'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '部類'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '營別(自營/專櫃)'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '樓層'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '九大類'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '銷貨收入'.
APPEND t_hexcel. CLEAR t_hexcel.
t_hexcel-fname = '銷貨成本'.
APPEND t_hexcel. CLEAR t_hexcel.
ENDFORM. " GENERATE_EXCEL_HEADER_ERROR
*&---------------------------------------------------------------------*
*& Form GENERATE_MAIL_EXCEL
*&---------------------------------------------------------------------*
FORM generate_mail_excel .
DATA: l_strlen TYPE i,
l_count TYPE i,
l_count1 TYPE i,
l_tabix TYPE sy-tabix,
l_lines TYPE sy-tabix,
l_length(12),
l_index LIKE sy-index,
l_field_str TYPE string.
FIELD-SYMBOLS : <fs> TYPE ANY,
<f1> TYPE ANY.
*-Header
IF NOT t_hexcel[] IS INITIAL.
LOOP AT t_hexcel.
IF sy-tabix = 1.
t_mail-txt = t_hexcel-fname.
ELSE.
CONCATENATE t_mail-txt t_hexcel-fname INTO t_mail-txt
SEPARATED BY cl_abap_char_utilities=>horizontal_tab.
ENDIF.
ENDLOOP.
ENDIF.
CONDENSE t_mail-txt NO-GAPS.
CONCATENATE t_mail-txt cl_abap_char_utilities=>cr_lf INTO t_mail-txt.
APPEND t_mail. CLEAR t_mail.
*-Content
LOOP AT <ft_data> ASSIGNING <fs>.
DO.
l_index = sy-index.
ASSIGN COMPONENT l_index OF STRUCTURE <fs> TO <f1>.
IF sy-subrc <> 0.
EXIT.
ENDIF.
*-----將所有欄位合成一行
l_field_str = <f1>.
IF l_index = 1.
t_mail-txt = l_field_str.
ELSE.
CONCATENATE t_mail-txt l_field_str INTO t_mail-txt SEPARATED BY cl_abap_char_utilities=>horizontal_tab.
ENDIF.
ENDDO.
CONCATENATE t_mail-txt cl_abap_char_utilities=>cr_lf INTO t_mail-txt.
APPEND t_mail. CLEAR t_mail.
ENDLOOP.
DESCRIBE TABLE t_mail LINES l_lines.
*-將所有的資料以255字元切割後,放入夾檔的 Internal table
LOOP AT t_mail.
l_tabix = sy-tabix.
l_strlen = STRLEN( t_mail-txt ).
DO l_strlen TIMES.
it_objbin+l_count(1) = t_mail-txt+l_count1(1).
l_count = l_count + 1.
l_count1 = l_count1 + 1.
g_doc_size = g_doc_size + 1.
IF l_count = 255.
APPEND it_objbin. CLEAR it_objbin.
CLEAR l_count.
ELSEIF ( l_tabix = l_lines ) AND ( l_count1 = l_strlen ).
APPEND it_objbin. CLEAR it_objbin.
ENDIF.
ENDDO.
CLEAR l_count1.
ENDLOOP.
ENDFORM. " GENERATE_MAIL_EXCEL
*&---------------------------------------------------------------------*
*& Form send_mail
*&---------------------------------------------------------------------*
FORM send_mail USING p_tittle
p_dataname.
DATA: l_t_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
l_t_objhead LIKE solisti1 OCCURS 0 WITH HEADER LINE,
l_t_objbin LIKE solisti1 OCCURS 0 WITH HEADER LINE,
l_t_objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE,
l_t_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
l_t_doc_chng LIKE sodocchgi1.
DATA: l_lines LIKE sy-tabix,
l_username TYPE string,
l_temp TYPE c,
l_count TYPE i ,
l_div TYPE p DECIMALS 2,
l_pos TYPE i .
DATA: l_string TYPE string,
l_xstring TYPE xstring.
*-Mail tittle setting
l_t_doc_chng-obj_descr = p_tittle.
l_t_doc_chng-obj_langu = sy-langu.
l_t_doc_chng-sensitivty = 'O'. "Standard, normal sensitivity
*-Mail main text
l_t_objtxt = '第一行郵件內容'.
APPEND l_t_objtxt.
l_t_objtxt = '第二行郵件內容'.
APPEND l_t_objtxt.
l_t_objtxt = '第三行郵件內容'.
APPEND l_t_objtxt.
DESCRIBE TABLE l_t_objtxt LINES l_lines.
READ TABLE l_t_objtxt INDEX l_lines.
l_t_objpack-doc_size = ( l_lines - 1 ) * 255 + STRLEN( l_t_objtxt ).
*-Creation of the entry for the compressed document
CLEAR l_t_objpack-transf_bin.
l_t_objpack-head_start = 1.
l_t_objpack-head_num = 0.
l_t_objpack-body_start = 1.
l_t_objpack-body_num = l_lines.
l_t_objpack-doc_type = 'RAW'.
APPEND l_t_objpack.
LOOP AT it_objbin.
CONCATENATE l_string it_objbin-line INTO l_string .
ENDLOOP.
*---Conversion iso to unide
CALL FUNCTION 'EHSB_LBLS_CONV_UNICODE_ISO_MS'
EXPORTING
i_codepage_type_in = 'Unicode'
i_langu = 'M'
i_text = l_string
i_codepage_type_out = 'ISO'
IMPORTING
e_text = l_xstring.
l_t_objpack-doc_size = XSTRLEN( l_xstring ).
l_div = l_t_objpack-doc_size / 255.
l_count = TRUNC( l_div ).
DO l_count TIMES.
it_objbinx-line = l_xstring+l_pos(255).
l_pos = l_pos + 255.
APPEND it_objbinx.
ENDDO.
it_objbinx-line = l_xstring+l_pos.
APPEND it_objbinx.
*---Completing the recipient list
DESCRIBE TABLE it_objbinx LINES l_lines.
SPLIT p_dataname AT '.' INTO p_dataname l_temp.
l_t_objpack-obj_descr = p_dataname.
l_t_objpack-transf_bin = 'X'.
l_t_objpack-head_start = 1.
l_t_objpack-head_num = 1.
l_t_objpack-body_start = 1.
l_t_objpack-body_num = l_lines.
l_t_objpack-doc_type = 'XLS'.
APPEND l_t_objpack.
*---Get mail address
CLEAR l_t_reclist.
l_t_reclist-rec_type = 'U'. "外部郵件'U' 內部郵件'B'
l_t_reclist-express = 'X'.
l_t_reclist-receiver = '[email protected]'.
APPEND l_t_reclist.
*-有夾檔
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = l_t_doc_chng
put_in_outbox = 'X'
commit_work = 'X'
TABLES
packing_list = l_t_objpack
object_header = l_t_objhead
contents_hex = it_objbinx
contents_txt = l_t_objtxt
receivers = l_t_reclist
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.
IF sy-subrc EQ 0.
g_message = 'Send mail OK'.
ELSE.
g_message = 'Send mail error'.
ENDIF.
CLEAR : t_mail , t_mail[],
it_objbin, it_objbin[],
it_objbinx, it_objbinx[].
ENDFORM. " send_mail
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_data .
SELECT *
INTO TABLE it_mail
FROM vbap
UP TO 100 ROWS
WHERE vbeln NE space.
ENDFORM. " get_data