Code20080716 - ooxxvv/MySAPnotes GitHub Wiki

Code20080716

  • 在 Unicode 系統下,寄有夾檔的 Email。

Code

***********************************************************************
**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
⚠️ **GitHub.com Fallback** ⚠️