ABAP OO EMAIL

来源:互联网 发布:宁波淘宝客服招聘 编辑:程序博客网 时间:2024/05/30 20:08

REPORT  zssp_zens_0010_er6444.

TYPE-POOLS: icon.

TABLES:zemail_address.

DATA: i_bodys TYPE TABLE OF ztarget_val_log WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
PARAMETERS: p_tname TYPE zemail_address-tabname DEFAULT 'ZTARGET_VAL_LOG'.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
  DATA: lr_mail_data TYPE REF TO cl_crm_email_data,
    lv_send_request TYPE sysuuid_x.

  CLEAR: i_bodys,i_bodys[].
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE i_bodys
    FROM ztarget_val_log
    WHERE xflag = ''.

  IF NOT i_bodys[] IS INITIAL.
    CREATE OBJECT lr_mail_data.
    PERFORM frm_bulid_oo_to TABLES lr_mail_data->to.
    PERFORM frm_bulid_oo_from CHANGING lr_mail_data->from.
    PERFORM frm_build_oo_body TABLES lr_mail_data->body.
    PERFORM frm_build_oo_attachment TABLES lr_mail_data->body.
    "the subject of this email
    lr_mail_data->subject = text-m01.
    "send this email out
    lv_send_request = cl_crm_email_utility_base=>send_email( iv_mail_data = lr_mail_data ).
    IF NOT lv_send_request IS INITIAL.
      SKIP 1.
      WRITE AT: /1 lv_send_request.
      WRITE AT: /5 text-m02.
      WRITE icon_mail AS ICON.
      WRITE: sy-uline.
      "try to lock the table till success
      DO.
        CALL FUNCTION 'ENQUEUE_EZTARGET_VAL_LOG'
          EXPORTING
            mode_ztarget_val_log = 'X'
            mandt                = sy-mandt
            _scope               = '2'
            _wait                = ' '
            _collect             = ' '
          EXCEPTIONS
            foreign_lock         = 1
            system_failure       = 2
            OTHERS               = 3.
        IF sy-subrc = 0.
          EXIT.
        ENDIF.
      ENDDO.
      "modify flag for the data has been sent out right now
      MODIFY ztarget_val_log FROM TABLE i_bodys.
      IF sy-subrc = 0.
        COMMIT WORK.
      ELSE.
        FORMAT COLOR COL_NEGATIVE ON.
        SKIP 1.
        WRITE AT: /1 text-m03.
        WRITE icon_message_critical_small AS ICON.
        FORMAT COLOR OFF.
        WRITE: sy-uline.
        STOP.
      ENDIF.
      "unlock this table
      CALL FUNCTION 'DEQUEUE_EZTARGET_VAL_LOG'
        EXPORTING
          mode_ztarget_val_log = 'X'
          mandt                = sy-mandt
          _scope               = '3'
          _synchron            = ' '
          _collect             = ' '.
    ELSE.
      FORMAT COLOR COL_NEGATIVE ON.
      SKIP 1.
      WRITE AT: /1 text-m04.
      WRITE icon_message_critical_small AS ICON.
      FORMAT COLOR OFF.
      WRITE: sy-uline.
      STOP.
    ENDIF.
  ELSE.
    SKIP 1.
    WRITE AT: /1 text-m05.
    WRITE icon_message_information_small AS ICON.
    WRITE: sy-uline.
    STOP.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  frm_bulid_oo_to
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->LI_TO      text
*----------------------------------------------------------------------*
FORM frm_bulid_oo_to TABLES li_to TYPE crmt_email_recipients.
  DATA: lw_to TYPE LINE OF crmt_email_recipients,
        li_email TYPE TABLE OF zemail_address WITH HEADER LINE.
  DATA: lv_flag.

  "get email address from table zemail_address
  CLEAR: li_email,li_email[],li_to[],lw_to.
  SELECT * INTO TABLE li_email FROM zemail_address WHERE tabname = p_tname.
  LOOP AT li_email.
    CLEAR: lv_flag.
    "check if the email is illegal
    PERFORM frm_regex_check USING '/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*' li_email-email lv_flag.
    IF lv_flag EQ 'X'.
      "to reveiver list
      CLEAR lw_to.
      lw_to-address = li_email-email.
      lw_to-name    = li_email-email.
      APPEND lw_to TO li_to.
    ELSE.
      SKIP 1.
      WRITE AT: /1 li_email-email.
      WRITE AT: /5 text-m06.
      WRITE icon_message_warning_small AS ICON.
      WRITE: sy-uline.
    ENDIF.
  ENDLOOP.
  "if the mail to box is empty, stop the process!
  IF li_to[] IS INITIAL.
    FORMAT COLOR COL_NEGATIVE ON.
    SKIP 1.
    WRITE AT: /1 text-m07.
    WRITE icon_message_critical_small AS ICON.
    FORMAT COLOR OFF.
    WRITE: sy-uline.
    STOP.
  ENDIF.
ENDFORM.                    "frm_bulid_oo_to
*&---------------------------------------------------------------------*
*&      Form  frm_bulid_oo_from
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->LI_FROM    text
*----------------------------------------------------------------------*
FORM frm_bulid_oo_from CHANGING li_from TYPE crms_email_recipient.
  "Now the send box is empty
ENDFORM.                    "frm_bulid_oo_from
*&---------------------------------------------------------------------*
*&      Form  build_attachment
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PTAB_BODY  text
*      -->P_ATTACH   text
*----------------------------------------------------------------------*
FORM frm_build_oo_attachment TABLES li_body TYPE crmt_email_mime_struc.
  DATA: lw_body TYPE crms_email_mime_struc.

  lw_body-is_attachment = 'X'.
*  MOVE 'text/html' TO lw_body-mime_type.
*  MOVE 'application/vnd.ms-excel' TO lw_body-mime_type.
  MOVE 'text/csv' TO lw_body-mime_type.

  CONCATENATE 'Contract target value calculation log_' sy-datum '_' sy-uzeit '.csv' INTO lw_body-file_name.

  DEFINE fill.
    concatenate lw_body-content_ascii '"' &1 '"' ',' into lw_body-content_ascii.
    concatenate lw_body-content_ascii '"' &2 '"' ',' into lw_body-content_ascii.
    concatenate lw_body-content_ascii '"' &3 '"' ',' into lw_body-content_ascii.
    concatenate lw_body-content_ascii '"' &4 '"' ',' into lw_body-content_ascii.
    concatenate lw_body-content_ascii '"' &5 '"' ',' into lw_body-content_ascii.
    concatenate lw_body-content_ascii '"' &6 '"' ',' into lw_body-content_ascii.
    concatenate lw_body-content_ascii '"' &7 '"' ',' into lw_body-content_ascii.
    concatenate lw_body-content_ascii '"' &8 '"' ',' into lw_body-content_ascii.
    concatenate lw_body-content_ascii cl_abap_char_utilities=>cr_lf into lw_body-content_ascii.
  END-OF-DEFINITION.
  "fill attachment
  fill: 'Contract Number' 'Date' 'Time' 'Counter' 'Message type' 'Message class' 'Message' 'User name'.
  LOOP AT i_bodys.
    fill: i_bodys-ebeln i_bodys-datum i_bodys-uzeit i_bodys-msgcounter i_bodys-msgtype i_bodys-msgid i_bodys-message i_bodys-uname.
    "set flag = 'X'
    i_bodys-xflag = 'X'.
    MODIFY i_bodys TRANSPORTING xflag.
  ENDLOOP.

  APPEND lw_body TO li_body.
ENDFORM.                    "build_attachment

*&---------------------------------------------------------------------*
*&      Form  frm_build_oo_body
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PTAB_BODY  text
*----------------------------------------------------------------------*
FORM frm_build_oo_body TABLES li_body TYPE crmt_email_mime_struc.
  DATA: lw_body TYPE crms_email_mime_struc.

  MOVE 'text/html' TO lw_body-mime_type.
  MOVE 'body.htm'  TO lw_body-file_name.

  DEFINE body.
    concatenate lw_body-content_ascii &1 &2 into lw_body-content_ascii.
  END-OF-DEFINITION.

  body: '<body bgcolor="#C0C0C0">' cl_abap_char_utilities=>cr_lf,
        '<p>Hi all,</p>' cl_abap_char_utilities=>cr_lf,
        '<p>Attached is the file for Contract target value calculation error log.</p>' cl_abap_char_utilities=>cr_lf,
        '<p>Thank you.</p>' cl_abap_char_utilities=>cr_lf,
        '</body>' ''.

  APPEND lw_body TO li_body.
ENDFORM.                    "frm_build_oo_body
*&---------------------------------------------------------------------*
*&      Form  frm_regex_check
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->REGEX      text
*      -->OBJ        text
*      -->RE         text
*----------------------------------------------------------------------*
FORM frm_regex_check USING regex obj re.
  DATA lc_matcher TYPE REF TO cl_abap_matcher.
  lc_matcher = cl_abap_matcher=>create( pattern = regex
                                     ignore_case = 'X'
                                     text = obj ).
  re =  lc_matcher->match( ).
ENDFORM.                    "frm_regex_check

原创粉丝点击