Tuesday, June 21, 2011

ZFunction Module to Send Mail

A Customized function module to send mail to external Mail id with attachment.

FUNCTION Z_DOMS_SEND_EMAIL_CUSTOMER .
*"----------------------------------------------------------------------
*"*"Update Function Module:
*"
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(I_RECP) TYPE  ZDOMS_SO_RECNAME_T
*"     VALUE(I_SUBJ) TYPE  SO_OBJ_DES
*"     VALUE(I_MSG1) TYPE  SOLISTI1
*"     VALUE(I_MSG2) TYPE  SOLISTI1 OPTIONAL
*"     VALUE(I_MSG3) TYPE  SWFTLISTI1 OPTIONAL
*"     VALUE(I_MSG4) TYPE  SOLISTI1 OPTIONAL
*"     VALUE(I_MSG5) TYPE  SOLISTI1 OPTIONAL
*"     VALUE(I_MSG6) TYPE  SOLISTI1 OPTIONAL
*"     VALUE(I_MSG7) TYPE  SOLISTI1 OPTIONAL
*"     VALUE(I_MSG8) TYPE  SOLISTI1 OPTIONAL
*"     VALUE(I_MSG9) TYPE  SOLISTI1 OPTIONAL
*"     VALUE(I_MSG10) TYPE  SOLISTI1 OPTIONAL
*"     VALUE(I_ATTACH) TYPE  SWF_CREATE OPTIONAL
*"     VALUE(I_ATTACH_NAME) TYPE  SO_OBJ_DES OPTIONAL
*"  EXCEPTIONS
*"      INVALID_EMAIL_ID
*"      EMAIL_NOT_SEND
*"----------------------------------------------------------------------
  DATA: OBJID         LIKE SOFOLENTI1-OBJECT_ID,
        WA_RECP       TYPE ZDOMS_SO_RECNAME_L,
        OBJPACK       LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
        OBJHEAD       LIKE SOLISTI1   OCCURS 0 WITH HEADER LINE,
        OBJBIN        LIKE SOLISTI1   OCCURS 0 WITH HEADER LINE,
        OBJHLD        LIKE SOLISTI1   OCCURS 0 WITH HEADER LINE,
        OBJTXT        LIKE SOLISTI1   OCCURS 0 WITH HEADER LINE,
        RECLIST       LIKE SOMLRECI1  OCCURS 0 WITH HEADER LINE,
        INT_SCRCODE   LIKE SOLI       OCCURS 0 WITH HEADER LINE,
        DOC_CHNG      LIKE SODOCCHGI1,
        TAB_LINES     LIKE SY-TABIX,
        WS_HEADSTART  LIKE OBJPACK-HEAD_START,
        WS_BODYSTART  LIKE OBJPACK-BODY_START,
        WA_MSG3       TYPE SOLISTI1,
        T_MSG         TYPE SWFTLISTI1.

  CONSTANTS: WC_PERIOD     VALUE '.',
           WC_TAB TYPE X VALUE '09',
           WC_ATSIGN     VALUE '@',
           lv_tabix  TYPE INT4 VALUE 2,
           CON_TAB  TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
           CON_CRET TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF.

  LOOP AT I_RECP INTO WA_RECP.
    IF WA_RECP NS WC_ATSIGN.
      RAISE INVALID_EMAIL_ID.
    ENDIF.
  ENDLOOP.
  WS_HEADSTART = 0.
  WS_BODYSTART = 0.
  CLEAR OBJPACK.     REFRESH OBJPACK.
  CLEAR OBJHEAD.     REFRESH OBJHEAD.
  CLEAR RECLIST.     REFRESH RECLIST.
  CLEAR INT_SCRCODE. REFRESH INT_SCRCODE.
* Define receiver list
  LOOP AT I_RECP INTO WA_RECP.
    RECLIST-RECEIVER   = WA_RECP-LOW.
    RECLIST-REC_TYPE   = 'U'.
    RECLIST-COM_TYPE   = ''.
    APPEND RECLIST.
  ENDLOOP.

* Define Subject Line
  DOC_CHNG-OBJ_NAME = 'Invoice Notification'.
  DOC_CHNG-OBJ_DESCR = I_SUBJ.
  DOC_CHNG-OBJ_LANGU = SY-LANGU.         " For Att
  DOC_CHNG-SENSITIVTY = 'F'.             " For Att
  DOC_CHNG-DOC_SIZE = 1.                 " For Att

* Define Body Text
  IF I_MSG1 <> SPACE OR I_MSG2 <> SPACE OR I_MSG3[] IS NOT INITIAL OR
     I_MSG4 <> SPACE OR I_MSG5 <> SPACE OR I_MSG6 <> SPACE OR
     I_MSG7 <> SPACE OR I_MSG8 <> SPACE OR I_MSG9 <> SPACE OR
     I_MSG10 <> SPACE.
    APPEND: I_MSG1 TO OBJTXT,
            I_MSG2 TO OBJTXT.
    LOOP AT I_MSG3 INTO WA_MSG3.
      APPEND WA_MSG3 TO OBJTXT.
    ENDLOOP.
    APPEND:
     I_MSG4 TO OBJTXT,
     I_MSG5 TO OBJTXT,
     I_MSG6 TO OBJTXT,
     I_MSG7 TO OBJTXT,
     I_MSG8 TO OBJTXT,
     I_MSG9 TO OBJTXT,
     I_MSG10 TO OBJTXT.
  ENDIF.

  DESCRIBE TABLE OBJTXT LINES TAB_LINES.
  READ TABLE OBJTXT INDEX TAB_LINES.
  DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).

  CLEAR OBJPACK-TRANSF_BIN.
  OBJPACK-HEAD_START = 1.
  OBJPACK-HEAD_NUM = 0.
  OBJPACK-BODY_START = 1.
  OBJPACK-BODY_NUM = TAB_LINES.
  OBJPACK-DOC_TYPE = 'RAW'.
  APPEND OBJPACK.
  CLEAR OBJPACK.
* Check for attachment is requested for Message Variable 3
  IF I_ATTACH EQ 'X'.
* Add entry to OBJHEAD table
    WS_HEADSTART = WS_HEADSTART + 1.
    OBJHEAD-LINE = I_ATTACH_NAME. "'Invoice.xls'.
    APPEND OBJHEAD.

* Set Body Start variable
    DESCRIBE TABLE OBJBIN LINES WS_BODYSTART.
    WS_BODYSTART = WS_BODYSTART + 1.

* Add file information into Packlist table
    T_MSG[] = I_MSG3[].
*   First two rows are not required
    DELETE T_MSG INDEX 1.
    DELETE T_MSG INDEX 2.
    DESCRIBE TABLE T_MSG LINES TAB_LINES.
    REPLACE ALL OCCURRENCES OF '/' IN TABLE T_MSG WITH CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

    LOOP AT T_MSG INTO WA_MSG3.
         if sy-tabix = lv_tabix.
      CONCATENATE CON_CRET WA_MSG3 CON_CRET INTO  OBJBIN.
      APPEND OBJBIN.
      else.
        CONCATENATE WA_MSG3 CON_CRET INTO  OBJBIN.
       APPEND OBJBIN.
       endif.
    ENDLOOP.
*    APPEND LINES OF T_MSG TO OBJBIN.

    OBJPACK-TRANSF_BIN = 'X'.
    OBJPACK-HEAD_START = WS_HEADSTART.
    OBJPACK-HEAD_NUM = 1.
    OBJPACK-BODY_START = WS_BODYSTART.
    OBJPACK-BODY_NUM = TAB_LINES + 1.
    OBJPACK-DOC_TYPE = 'XLS'.
    OBJPACK-OBJ_NAME = 'Invoice.xls'.
    OBJPACK-OBJ_DESCR = I_ATTACH_NAME. "'Fenner DOMS Invoice'.
*    OBJPACK-DOC_SIZE = '9999'.
    APPEND OBJPACK.
  ENDIF.
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      DOCUMENT_DATA              = DOC_CHNG
      PUT_IN_OUTBOX              = 'X'
    IMPORTING
      NEW_OBJECT_ID              = OBJID
    TABLES
      PACKING_LIST               = OBJPACK
      OBJECT_HEADER              = OBJHEAD
      CONTENTS_BIN               = OBJBIN
      CONTENTS_TXT               = OBJTXT
      RECEIVERS                  = 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 NE 0.
    RAISE EMAIL_NOT_SEND.
  ENDIF.

ENDFUNCTION.

NOTE :
IMPORT PARAMETER


I_RECP    TYPE    ZDOMS_SO_RECNAME_T
I_SUBJ    TYPE    SO_OBJ_DES
I_MSG1    TYPE    SOLISTI1
I_MSG2    TYPE    SOLISTI1
I_MSG3    TYPE    SWFTLISTI1
I_MSG4    TYPE    SOLISTI1
I_MSG5    TYPE    SOLISTI1
I_MSG6    TYPE    SOLISTI1
I_MSG7    TYPE    SOLISTI1
I_MSG8    TYPE    SOLISTI1
I_MSG9    TYPE    SOLISTI1
I_MSG10    TYPE    SOLISTI1
I_ATTACH    TYPE    SWF_CREATE
I_ATTACH_NAME    TYPE    SO_OBJ_DES


Exceptions


INVALID_EMAIL_ID    Invalid E-mail id
EMAIL_NOT_SEND    Email sending failed



No comments:

Post a Comment