Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Internal table as automail attachment

Former Member
0 Kudos

Hi,

My requirement is to send the internal table as an excel attachment to the automail trigerred on user-command.

Can anyone please help me. I searched in the forum and found links using class CL_DOCUMENT_BCS  but I am unable to implement it properly as I have not implemented it earlier. Can anyone share the full code or help me by some other way please.

Regards,

Sharbani

1 ACCEPTED SOLUTION

former_member184569
Active Contributor
0 Kudos

Hi Sharbani,

This is the sample code for sending an internal table as an attachment.

*&---------------------------------------------------------------------*
*& Report  ZTEST_EMAIL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST_EMAIL.

**--------------------------------------------------------*
*"  Data retrieval related declarations
**--------------------------------------------------------*
TYPES:
       BEGIN OF T_EKBE1,
         EBELN TYPE ebeln,
         EBELP TYPE ebelp,
         GJAHR TYPE gjahr,
         MATNR TYPE matnr,
         DMBTR TYPE dmbtr,
       END OF T_EKBE1.

TYPES:
       BEGIN OF T_EKBE,
         EBELN(10) TYPE c,
         EBELP(5) TYPE c,
         GJAHR(4) TYPE c,
         MATNR(18) TYPE c,
         DMBTR(13) TYPE c,
       END OF T_EKBE.

DATA:      W_EKBE TYPE T_EKBE.
DATA:
       I_EKBE TYPE STANDARD TABLE OF T_EKBE.
DATA:      W_EKBE1 TYPE T_EKBE1.
DATA:
       I_EKBE1 TYPE STANDARD TABLE OF T_EKBE1.
*--------------------------------------------------------*
"  Mail related declarations
*--------------------------------------------------------*
"Variables
DATA :
     G_SENT_TO_ALL   TYPE SONV-FLAG,
     G_TAB_LINES     TYPE I.
"Types
TYPES:
     T_DOCUMENT_DATA  TYPE  SODOCCHGI1,
     T_PACKING_LIST   TYPE  SOPCKLSTI1,
     T_ATTACHMENT     TYPE  SOLISTI1,
     T_BODY_MSG       TYPE  SOLISTI1,
     T_RECEIVERS      TYPE  SOMLRECI1.
"Workareas
DATA :
     W_DOCUMENT_DATA  TYPE  T_DOCUMENT_DATA,
     W_PACKING_LIST   TYPE  T_PACKING_LIST,
     W_ATTACHMENT     TYPE  T_ATTACHMENT,
     W_BODY_MSG       TYPE  T_BODY_MSG,
     W_RECEIVERS      TYPE  T_RECEIVERS.
"Internal Tables
DATA :
     I_DOCUMENT_DATA  TYPE STANDARD TABLE OF T_DOCUMENT_DATA,
     I_PACKING_LIST   TYPE STANDARD TABLE OF T_PACKING_LIST,
     I_ATTACHMENT     TYPE STANDARD TABLE OF T_ATTACHMENT,
     I_BODY_MSG       TYPE STANDARD TABLE OF T_BODY_MSG,
     I_RECEIVERS      TYPE STANDARD TABLE OF T_RECEIVERS.

*--------------------------------------------------------*
Start-of-selection.
*--------------------------------------------------------*
START-OF-SELECTION.
   PERFORM GET_DATA.
   PERFORM BUILD_XLS_DATA_TABLE.

*--------------------------------------------------------*
   "End-of-selection.
*--------------------------------------------------------*
END-OF-SELECTION.
   PERFORM SEND_MAIL.

*&--------------------------------------------------------*
   "Form  get_data from PA0001
*&--------------------------------------------------------*
FORM GET_DATA.

   SELECT EBELN
   EBELP
   GJAHR
   MATNR
   DMBTR
   FROM EKBE
   INTO CORRESPONDING FIELDS OF TABLE I_EKBE1
   UP TO 10 ROWS.

   loop at i_ekbe1 into w_ekbe1.
     MOVE-CORRESPONDING w_ekbe1 to w_ekbe.
     append w_ekbe to i_ekbe.
   endloop.

ENDFORM.                    " get_data

*&---------------------------------------------------------*
"Form  build_xls_data_table
*&---------------------------------------------------------*
FORM BUILD_XLS_DATA_TABLE.
   "If you have Unicode check active in program attributes then
   "you will need to declare constants as follows.
   CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.
   CONSTANTS:
   CON_TAB  TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
   CON_CRET TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF.

   CONCATENATE 'EBELN' 'EBELP' 'GJAHR' 'MATNR' 'DMBTR'
   INTO  W_ATTACHMENT
   SEPARATED BY  CON_TAB.

   CONCATENATE CON_CRET
   W_ATTACHMENT
   INTO W_ATTACHMENT.

   APPEND W_ATTACHMENT TO I_ATTACHMENT.
   CLEAR  W_ATTACHMENT.

   LOOP AT I_EKBE INTO W_EKBE.

     CONCATENATE W_EKBE-ebeln
     W_EKBE-ebelp
     W_EKBE-gjahr
     W_EKBE-matnr
     W_EKBE-dmbtr
     INTO W_ATTACHMENT
     SEPARATED BY CON_TAB.

     CONCATENATE CON_CRET W_ATTACHMENT
     INTO W_ATTACHMENT.

     APPEND W_ATTACHMENT TO I_ATTACHMENT.
     CLEAR  W_ATTACHMENT.
   ENDLOOP.

ENDFORM.                    "build_xls_data_table
*&----------------------------------------------------------*
"Form  send_mail
"---------------
"PACKING LIST
"This table requires information about how the data in the
"tables OBJECT_HEADER, CONTENTS_BIN and CONTENTS_TXT are to
"be distributed to the documents and its attachments.The first
"row is for the document, the following rows are each for one
"attachment.
*&-----------------------------------------------------------*
FORM SEND_MAIL .

   "Subject of the mail.
   W_DOCUMENT_DATA-OBJ_NAME  = 'MAIL_TO_HEAD'.
   W_DOCUMENT_DATA-OBJ_DESCR = 'Regarding Mail Program by SAP ABAP'.

   "Body of the mail
   PERFORM BUILD_BODY_OF_MAIL
   USING:SPACE,
   'Hi,',
   'I am fine. How are you? How are you doing ? ',
   'This program has been created to send simple mail',
   'with Subject,Body with Address of the sender. ',
   'Regards,',
   'Blog Admin,',
   'SAP HR Technical Consultant.'.

   "Write Packing List for Body
   DESCRIBE TABLE I_BODY_MSG LINES G_TAB_LINES.
   W_PACKING_LIST-HEAD_START = 1.
   W_PACKING_LIST-HEAD_NUM   = 0.
   W_PACKING_LIST-BODY_START = 1.
   W_PACKING_LIST-BODY_NUM   = G_TAB_LINES.
   W_PACKING_LIST-DOC_TYPE   = 'RAW'.
   APPEND W_PACKING_LIST TO I_PACKING_LIST.
   CLEAR  W_PACKING_LIST.

   "Write Packing List for Attachment
   W_PACKING_LIST-TRANSF_BIN = SPACE.
   W_PACKING_LIST-HEAD_START = 1.
   W_PACKING_LIST-HEAD_NUM   = 1.
   W_PACKING_LIST-BODY_START = G_TAB_LINES + 1.
   DESCRIBE TABLE I_ATTACHMENT LINES W_PACKING_LIST-BODY_NUM.
   W_PACKING_LIST-DOC_TYPE   = 'XXL'.
   W_PACKING_LIST-OBJ_DESCR  = 'Excell Attachment'.
   W_PACKING_LIST-OBJ_NAME   = 'XLS_ATTACHMENT'.
   W_PACKING_LIST-DOC_SIZE   = W_PACKING_LIST-BODY_NUM * 255.
   APPEND W_PACKING_LIST TO I_PACKING_LIST.
   CLEAR  W_PACKING_LIST.

   APPEND LINES OF I_ATTACHMENT TO I_BODY_MSG.
   "Fill the document data and get size of attachment
   W_DOCUMENT_DATA-OBJ_LANGU  = SY-LANGU.
   READ TABLE I_BODY_MSG INTO W_BODY_MSG INDEX G_TAB_LINES.
   W_DOCUMENT_DATA-DOC_SIZE = ( G_TAB_LINES - 1 ) * 255 + STRLEN( W_BODY_MSG ).

   "Receivers List.
   W_RECEIVERS-REC_TYPE   = 'U'"Internet address
   W_RECEIVERS-RECEIVER   = 'abc@xyz.com'.
   W_RECEIVERS-COM_TYPE   = 'INT'.
   W_RECEIVERS-NOTIF_DEL  = 'X'.
   W_RECEIVERS-NOTIF_NDEL = 'X'.
   APPEND W_RECEIVERS TO I_RECEIVERS .
   CLEAR:W_RECEIVERS.

   "Function module to send mail to Recipients
   CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
     EXPORTING
       DOCUMENT_DATA              = W_DOCUMENT_DATA
       PUT_IN_OUTBOX              = 'X'
       COMMIT_WORK                = 'X'
     IMPORTING
       SENT_TO_ALL                = G_SENT_TO_ALL
     TABLES
       PACKING_LIST               = I_PACKING_LIST
       CONTENTS_TXT               = I_BODY_MSG
       RECEIVERS                  = I_RECEIVERS
     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 = 0 .
     MESSAGE I303(ME) WITH 'Mail has been Successfully Sent.'.
   ELSE.
     WAIT UP TO 2 SECONDS.
     "This program starts the SAPconnect send process.
     SUBMIT RSCONN01 WITH MODE = 'INT'
     WITH OUTPUT = 'X'
     AND RETURN.
   ENDIF.

ENDFORM.                    " send_mail
*&-----------------------------------------------------------*
"      Form  build_body_of_mail
*&-----------------------------------------------------------*
FORM BUILD_BODY_OF_MAIL  USING L_MESSAGE.

   W_BODY_MSG = L_MESSAGE.
   APPEND W_BODY_MSG TO I_BODY_MSG.
   CLEAR  W_BODY_MSG.

ENDFORM.                    " build_body_of_mail




Within your user command module, you need to implement the above functionality.


Besides this, you need to make sure that email settings are configured in your system.

5 REPLIES 5

former_member184569
Active Contributor
0 Kudos

Hi Sharbani,

This is the sample code for sending an internal table as an attachment.

*&---------------------------------------------------------------------*
*& Report  ZTEST_EMAIL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST_EMAIL.

**--------------------------------------------------------*
*"  Data retrieval related declarations
**--------------------------------------------------------*
TYPES:
       BEGIN OF T_EKBE1,
         EBELN TYPE ebeln,
         EBELP TYPE ebelp,
         GJAHR TYPE gjahr,
         MATNR TYPE matnr,
         DMBTR TYPE dmbtr,
       END OF T_EKBE1.

TYPES:
       BEGIN OF T_EKBE,
         EBELN(10) TYPE c,
         EBELP(5) TYPE c,
         GJAHR(4) TYPE c,
         MATNR(18) TYPE c,
         DMBTR(13) TYPE c,
       END OF T_EKBE.

DATA:      W_EKBE TYPE T_EKBE.
DATA:
       I_EKBE TYPE STANDARD TABLE OF T_EKBE.
DATA:      W_EKBE1 TYPE T_EKBE1.
DATA:
       I_EKBE1 TYPE STANDARD TABLE OF T_EKBE1.
*--------------------------------------------------------*
"  Mail related declarations
*--------------------------------------------------------*
"Variables
DATA :
     G_SENT_TO_ALL   TYPE SONV-FLAG,
     G_TAB_LINES     TYPE I.
"Types
TYPES:
     T_DOCUMENT_DATA  TYPE  SODOCCHGI1,
     T_PACKING_LIST   TYPE  SOPCKLSTI1,
     T_ATTACHMENT     TYPE  SOLISTI1,
     T_BODY_MSG       TYPE  SOLISTI1,
     T_RECEIVERS      TYPE  SOMLRECI1.
"Workareas
DATA :
     W_DOCUMENT_DATA  TYPE  T_DOCUMENT_DATA,
     W_PACKING_LIST   TYPE  T_PACKING_LIST,
     W_ATTACHMENT     TYPE  T_ATTACHMENT,
     W_BODY_MSG       TYPE  T_BODY_MSG,
     W_RECEIVERS      TYPE  T_RECEIVERS.
"Internal Tables
DATA :
     I_DOCUMENT_DATA  TYPE STANDARD TABLE OF T_DOCUMENT_DATA,
     I_PACKING_LIST   TYPE STANDARD TABLE OF T_PACKING_LIST,
     I_ATTACHMENT     TYPE STANDARD TABLE OF T_ATTACHMENT,
     I_BODY_MSG       TYPE STANDARD TABLE OF T_BODY_MSG,
     I_RECEIVERS      TYPE STANDARD TABLE OF T_RECEIVERS.

*--------------------------------------------------------*
Start-of-selection.
*--------------------------------------------------------*
START-OF-SELECTION.
   PERFORM GET_DATA.
   PERFORM BUILD_XLS_DATA_TABLE.

*--------------------------------------------------------*
   "End-of-selection.
*--------------------------------------------------------*
END-OF-SELECTION.
   PERFORM SEND_MAIL.

*&--------------------------------------------------------*
   "Form  get_data from PA0001
*&--------------------------------------------------------*
FORM GET_DATA.

   SELECT EBELN
   EBELP
   GJAHR
   MATNR
   DMBTR
   FROM EKBE
   INTO CORRESPONDING FIELDS OF TABLE I_EKBE1
   UP TO 10 ROWS.

   loop at i_ekbe1 into w_ekbe1.
     MOVE-CORRESPONDING w_ekbe1 to w_ekbe.
     append w_ekbe to i_ekbe.
   endloop.

ENDFORM.                    " get_data

*&---------------------------------------------------------*
"Form  build_xls_data_table
*&---------------------------------------------------------*
FORM BUILD_XLS_DATA_TABLE.
   "If you have Unicode check active in program attributes then
   "you will need to declare constants as follows.
   CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.
   CONSTANTS:
   CON_TAB  TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
   CON_CRET TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF.

   CONCATENATE 'EBELN' 'EBELP' 'GJAHR' 'MATNR' 'DMBTR'
   INTO  W_ATTACHMENT
   SEPARATED BY  CON_TAB.

   CONCATENATE CON_CRET
   W_ATTACHMENT
   INTO W_ATTACHMENT.

   APPEND W_ATTACHMENT TO I_ATTACHMENT.
   CLEAR  W_ATTACHMENT.

   LOOP AT I_EKBE INTO W_EKBE.

     CONCATENATE W_EKBE-ebeln
     W_EKBE-ebelp
     W_EKBE-gjahr
     W_EKBE-matnr
     W_EKBE-dmbtr
     INTO W_ATTACHMENT
     SEPARATED BY CON_TAB.

     CONCATENATE CON_CRET W_ATTACHMENT
     INTO W_ATTACHMENT.

     APPEND W_ATTACHMENT TO I_ATTACHMENT.
     CLEAR  W_ATTACHMENT.
   ENDLOOP.

ENDFORM.                    "build_xls_data_table
*&----------------------------------------------------------*
"Form  send_mail
"---------------
"PACKING LIST
"This table requires information about how the data in the
"tables OBJECT_HEADER, CONTENTS_BIN and CONTENTS_TXT are to
"be distributed to the documents and its attachments.The first
"row is for the document, the following rows are each for one
"attachment.
*&-----------------------------------------------------------*
FORM SEND_MAIL .

   "Subject of the mail.
   W_DOCUMENT_DATA-OBJ_NAME  = 'MAIL_TO_HEAD'.
   W_DOCUMENT_DATA-OBJ_DESCR = 'Regarding Mail Program by SAP ABAP'.

   "Body of the mail
   PERFORM BUILD_BODY_OF_MAIL
   USING:SPACE,
   'Hi,',
   'I am fine. How are you? How are you doing ? ',
   'This program has been created to send simple mail',
   'with Subject,Body with Address of the sender. ',
   'Regards,',
   'Blog Admin,',
   'SAP HR Technical Consultant.'.

   "Write Packing List for Body
   DESCRIBE TABLE I_BODY_MSG LINES G_TAB_LINES.
   W_PACKING_LIST-HEAD_START = 1.
   W_PACKING_LIST-HEAD_NUM   = 0.
   W_PACKING_LIST-BODY_START = 1.
   W_PACKING_LIST-BODY_NUM   = G_TAB_LINES.
   W_PACKING_LIST-DOC_TYPE   = 'RAW'.
   APPEND W_PACKING_LIST TO I_PACKING_LIST.
   CLEAR  W_PACKING_LIST.

   "Write Packing List for Attachment
   W_PACKING_LIST-TRANSF_BIN = SPACE.
   W_PACKING_LIST-HEAD_START = 1.
   W_PACKING_LIST-HEAD_NUM   = 1.
   W_PACKING_LIST-BODY_START = G_TAB_LINES + 1.
   DESCRIBE TABLE I_ATTACHMENT LINES W_PACKING_LIST-BODY_NUM.
   W_PACKING_LIST-DOC_TYPE   = 'XXL'.
   W_PACKING_LIST-OBJ_DESCR  = 'Excell Attachment'.
   W_PACKING_LIST-OBJ_NAME   = 'XLS_ATTACHMENT'.
   W_PACKING_LIST-DOC_SIZE   = W_PACKING_LIST-BODY_NUM * 255.
   APPEND W_PACKING_LIST TO I_PACKING_LIST.
   CLEAR  W_PACKING_LIST.

   APPEND LINES OF I_ATTACHMENT TO I_BODY_MSG.
   "Fill the document data and get size of attachment
   W_DOCUMENT_DATA-OBJ_LANGU  = SY-LANGU.
   READ TABLE I_BODY_MSG INTO W_BODY_MSG INDEX G_TAB_LINES.
   W_DOCUMENT_DATA-DOC_SIZE = ( G_TAB_LINES - 1 ) * 255 + STRLEN( W_BODY_MSG ).

   "Receivers List.
   W_RECEIVERS-REC_TYPE   = 'U'"Internet address
   W_RECEIVERS-RECEIVER   = 'abc@xyz.com'.
   W_RECEIVERS-COM_TYPE   = 'INT'.
   W_RECEIVERS-NOTIF_DEL  = 'X'.
   W_RECEIVERS-NOTIF_NDEL = 'X'.
   APPEND W_RECEIVERS TO I_RECEIVERS .
   CLEAR:W_RECEIVERS.

   "Function module to send mail to Recipients
   CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
     EXPORTING
       DOCUMENT_DATA              = W_DOCUMENT_DATA
       PUT_IN_OUTBOX              = 'X'
       COMMIT_WORK                = 'X'
     IMPORTING
       SENT_TO_ALL                = G_SENT_TO_ALL
     TABLES
       PACKING_LIST               = I_PACKING_LIST
       CONTENTS_TXT               = I_BODY_MSG
       RECEIVERS                  = I_RECEIVERS
     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 = 0 .
     MESSAGE I303(ME) WITH 'Mail has been Successfully Sent.'.
   ELSE.
     WAIT UP TO 2 SECONDS.
     "This program starts the SAPconnect send process.
     SUBMIT RSCONN01 WITH MODE = 'INT'
     WITH OUTPUT = 'X'
     AND RETURN.
   ENDIF.

ENDFORM.                    " send_mail
*&-----------------------------------------------------------*
"      Form  build_body_of_mail
*&-----------------------------------------------------------*
FORM BUILD_BODY_OF_MAIL  USING L_MESSAGE.

   W_BODY_MSG = L_MESSAGE.
   APPEND W_BODY_MSG TO I_BODY_MSG.
   CLEAR  W_BODY_MSG.

ENDFORM.                    " build_body_of_mail




Within your user command module, you need to implement the above functionality.


Besides this, you need to make sure that email settings are configured in your system.

0 Kudos

Hi Susmitha,

Thank you so much. Its done.

Regards,

Sharbani

jayaprakashhj
Participant
0 Kudos

Hi,

in dialog program or report program?

JP

0 Kudos

Hi,

It was for report program and its done. Thanks.

Regards,

Sharbani.

Former Member
0 Kudos

Thread is closed.

Regards,

Sharbani