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
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