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: 

How to send a mail as .txt attachment ,As data is seperated by pipeline

former_member184119
Active Contributor
0 Kudos
467

Hi ,

I got a requirement to send a mail in .txt format (Using OOPS) and the data inside the mail is seperated by '|' Pls help me in this regard.

i have written a mail to send the mail in .xls it is working fine for me in .xls but i dont know how to write the same for txt where data should be seperated by '|'.

Regards

sas

Ps: i am attaching my code. and please specify where i need to modify to achieve the same. and any perfromance enhacements are also welcome.


*&---------------------------------------------------------------------*
*& Report  ZGBTEST02
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  YSAS_MAIL2.

*Changes done by sas
*PARAMETERS: P_MAIL TYPE AD_SMTPADR OBLIGATORY, " G C by sas

*P_MAIL1 TYPE AD_SMTPADR OBLIGATORY." G by sas
*

tables: adr6.
SELECT-OPTIONS:p_eaddr FOR adr6-SMTP_ADDR NO INTERVALS .
*end of changes by sas

DATA: I_GLT0 TYPE STANDARD TABLE OF GLT0.

DATA: I_MARA  TYPE STANDARD TABLE OF MARA.  " MARA Entries
*      I_MARC  TYPE STANDARD TABLE OF MARC.  " MARC Entries
DATA: L_TEXT  TYPE CHAR255.  " Text
DATA: L_LINES TYPE I,
      L_SIZE  TYPE SOOD-OBJLEN.
" Size of Attachment


* Mail related
DATA: I_CONTENT         TYPE   SOLI_TAB, " Mail content
      I_ATTACH          TYPE   SOLI_TAB, " Attachment
      I_ATTACH1         TYPE   SOLIX_TAB. " Attachment

DATA: L_SEND_REQUEST    TYPE REF TO    CL_BCS,
                                            " E-Mail Send Request
      L_DOCUMENT        TYPE REF TO    CL_DOCUMENT_BCS,
                                            " E-Mail Attachment
      L_RECIPIENT       TYPE REF TO    IF_RECIPIENT_BCS,
                                            " Distribution List
      L_SENDER          TYPE REF TO    IF_SENDER_BCS,
                                            " Address of Sender
      L_UNAME           TYPE           SALRTDRCPT,
                                            " Sender Name(SY-UNAME)
      L_BCS_EXCEPTION   TYPE REF TO    CX_DOCUMENT_BCS,
                                            " BCS Exception
      L_ADDR_EXCEPTION  TYPE REF TO    CX_ADDRESS_BCS,
                                            " Address Exception
      L_SEND_EXCEPTION  TYPE REF TO    CX_SEND_REQ_BCS.
" E-Mail sending Exception

*Constants------------------------------------------------------------*
CONSTANTS: C_TAB(1) TYPE C VALUE
           CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
                                     " Tab Character

           C_CR(1)  TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF,
                                     " Line Feed for End-Of_line

           C_EXT    TYPE SOODK-OBJTP VALUE 'XLS'. " XLS Extension

START-OF-SELECTION.

  SELECT * FROM MARA INTO TABLE I_MARA UP TO 20 ROWS.
  IF SYST-SUBRC EQ 0.
*    SELECT * FROM MARC INTO TABLE I_MARC FOR ALL ENTRIES IN I_MARA WHERE MATNR = I_MARA-MATNR.
  ENDIF.

*select * from glt0 into table i_glt0.

* Preparing body of the Mail

  MOVE 'SAP Material Master Records' TO L_TEXT.
  APPEND L_TEXT TO I_CONTENT.
  CLEAR L_TEXT.
  APPEND L_TEXT TO I_CONTENT.
  MOVE 'Thanks,' TO L_TEXT.
  APPEND L_TEXT TO I_CONTENT.
  MOVE 'SAP MM' TO L_TEXT.
  APPEND L_TEXT TO I_CONTENT.


* Creates persistent send request
  TRY.
      L_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).

* Creating Document
      L_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
                                    I_TYPE  = 'RAW'
                                    I_TEXT  = I_CONTENT[]
                                    I_SUBJECT = 'SAS MASTER Records' ).

* Preparing contents of attachment with Change Log
      PERFORM PREPARE_ATTACHMENT.

      DESCRIBE TABLE I_MARA LINES L_LINES.
* Size to multiplied by 2 for UNICODE enabled systems
      L_SIZE = L_LINES * 2 * 255.

* Adding Attachment
      CALL METHOD L_DOCUMENT->ADD_ATTACHMENT
        EXPORTING
          I_ATTACHMENT_TYPE    = C_EXT
          I_ATTACHMENT_SIZE    = L_SIZE
          I_ATTACHMENT_SUBJECT = 'MARA Details'
*          i_att_content_hex    = i_attach[].
          I_ATT_CONTENT_TEXT   = I_ATTACH[].

*      DESCRIBE TABLE I_MARC LINES L_LINES.
* Size to multiplied by 2 for UNICODE enabled systems
*      L_SIZE = L_LINES * 2 * 255.

** Adding Attachment
*      CALL METHOD L_DOCUMENT->ADD_ATTACHMENT
*        EXPORTING
*          I_ATTACHMENT_TYPE    = C_EXT
*          I_ATTACHMENT_SIZE    = L_SIZE
*          I_ATTACHMENT_SUBJECT = 'MARC Details'
*          I_ATT_CONTENT_HEX    = I_ATTACH1[].
**          i_att_content_text   = i_attach1[].

* Add document to send request
      CALL METHOD L_SEND_REQUEST->SET_DOCUMENT( L_DOCUMENT ).

      DATA:LR_SENDER TYPE REF TO IF_SENDER_BCS,
           LR_SEND TYPE REF TO CL_BCS.

* Preparing the sender object
*      LR_SENDER = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( sy-uname ).
       DATA: L1_UNAME TYPE SY-UNAME.
       L1_UNAME = SY-UNAME.
       LR_SENDER = CL_SAPUSER_BCS=>CREATE( L1_UNAME ).


* Setting the sender
      CALL METHOD L_SEND_REQUEST->SET_SENDER
        EXPORTING
          I_SENDER = LR_SENDER.

* E-Mail
   LOOP AT P_EADDR.
      TRANSLATE P_EADDR-LOW TO LOWER CASE.

      L_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( P_EADDR-LOW ).

      CALL METHOD L_SEND_REQUEST->ADD_RECIPIENT
        EXPORTING
          I_RECIPIENT  = L_RECIPIENT
          I_EXPRESS    = 'U'
          I_COPY       = ' '
          I_BLIND_COPY = ' '
          I_NO_FORWARD = ' '.

       IF SY-subrc EQ 0.
          WRITE:/'** SUCCESS:  Email Sent to', p_eaddr-LOW COLOR COL_NORMAL.
        ELSE.
          WRITE:/'** ERROR: Failed to send Email to',p_eaddr-LOW COLOR COL_NEGATIVE .
        ENDIF.
      ENDLOOP.
*Trigger E-Mail immediately
      L_SEND_REQUEST->SET_SEND_IMMEDIATELY( ' ' ).

      CALL METHOD L_SEND_REQUEST->SEND( ).

      COMMIT WORK.

    CATCH CX_DOCUMENT_BCS INTO L_BCS_EXCEPTION.
    CATCH CX_SEND_REQ_BCS INTO L_SEND_EXCEPTION.
    CATCH CX_ADDRESS_BCS  INTO L_ADDR_EXCEPTION.

  ENDTRY.


*&---------------------------------------------------------------------
*&      Form  PREPARE_ATTACHMENT
*&---------------------------------------------------------------------
FORM PREPARE_ATTACHMENT .

  FIELD-SYMBOLS: <LFS_TABLE>,    " Internal table structure
                 <LFS_CON>.      " Field Content
  DATA: L_TEXT TYPE CHAR1024.     " Text content for mail attachment
  DATA: L_CON TYPE STRING. "(50) TYPE c.        " Field Content in character format

  DATA: L_STR TYPE STRING,
        L_STR1 TYPE STRING.

  DATA: LS_SOLIX TYPE SOLIX.
* Columns to be tab delimeted
  LOOP AT I_MARA ASSIGNING <LFS_TABLE>.
    DO.
      ASSIGN COMPONENT SY-INDEX OF STRUCTURE <LFS_TABLE>
             TO <LFS_CON>.
      IF SY-SUBRC NE 0.
        CONCATENATE C_CR L_TEXT INTO L_TEXT.
*        CONCATENATE l_str c_cr l_text INTO l_str.
*        ls_solix-line = l_text.
*        APPEND ls_solix TO i_attach.
        APPEND L_TEXT TO I_ATTACH.
        EXIT.
      ELSE.
        CLEAR: L_CON.
        MOVE <LFS_CON> TO L_CON.
        CONDENSE L_CON.
        IF SY-INDEX = 1.
          CLEAR: L_TEXT.
          MOVE L_CON TO L_TEXT.
        ELSE.
          CONCATENATE L_TEXT L_CON INTO L_TEXT
             SEPARATED BY C_TAB.
        ENDIF.
      ENDIF.
    ENDDO.
  ENDLOOP.

*
** Columns to be tab delimeted
*  LOOP AT I_MARC ASSIGNING <LFS_TABLE>.
*    DO.
*      ASSIGN COMPONENT SY-INDEX OF STRUCTURE <LFS_TABLE>
*             TO <LFS_CON>.
*      IF SY-SUBRC NE 0.
*        CONCATENATE C_CR L_TEXT INTO L_TEXT.
**        CONCATENATE l_str c_cr l_text INTO l_str1.
*        LS_SOLIX-LINE = L_TEXT.
*        APPEND LS_SOLIX TO I_ATTACH1.
*        EXIT.
*      ELSE.
*        CLEAR: L_CON.
*        MOVE <LFS_CON> TO L_CON.
*        CONDENSE L_CON.
*        IF SY-INDEX = 1.
*          CLEAR: L_TEXT.
*          MOVE L_CON TO L_TEXT.
*        ELSE.
*          CONCATENATE L_TEXT L_CON INTO L_TEXT
*             SEPARATED BY C_TAB.
*        ENDIF.
*      ENDIF.
*    ENDDO.
*  ENDLOOP.


*  i_attach1[] = i_attach[].

ENDFORM.                    " PREPARE_ATTACHMENT

1 ACCEPTED SOLUTION

Former Member
0 Kudos
144

Hi,

Please try this. Hope this will help you

  • Columns to be tab delimeted

LOOP AT I_MARA ASSIGNING <LFS_TABLE>.

DO.

ASSIGN COMPONENT SY-INDEX OF STRUCTURE <LFS_TABLE>

TO <LFS_CON>.

IF SY-SUBRC NE 0.

CONCATENATE C_CR L_TEXT INTO L_TEXT.

  • CONCATENATE l_str c_cr l_text INTO l_str.

  • ls_solix-line = l_text.

  • APPEND ls_solix TO i_attach.

APPEND L_TEXT TO I_ATTACH.

EXIT.

ELSE.

CLEAR: L_CON.

MOVE <LFS_CON> TO L_CON.

CONDENSE L_CON.

IF SY-INDEX = 1.

CLEAR: L_TEXT.

MOVE L_CON TO L_TEXT.

ELSE.

***************

CONCATENATE L_TEXT L_CON INTO L_TEXT

SEPARATED BY '|'.

****************

ENDIF.

ENDIF.

ENDDO.

ENDLOOP.

Thanks & Regards.

Aniruddha

9 REPLIES 9

Former Member
0 Kudos
144

HI,

p_emp_details is internal table with below following fields.. you need to concantenate each field with the '|' into the string as i used the horizantal tab.

LOOP AT p_emp_details INTO i_emp_details_line.
    CONCATENATE i_emp_details_line-pnalt
                i_emp_details_line-egroup
                i_emp_details_line-ename
                i_emp_details_line-stext
                i_emp_details_line-srvdt
                i_emp_details_line-ltext
                i_emp_details_line-pbtxt
                i_emp_details_line-btrtx
                i_emp_details_line-mndat
                i_emp_details_line-fsdate
                i_emp_details_line-frdate
                i_emp_details_line-egroup
           INTO l_string
      SEPARATED BY cl_abap_char_utilities=>horizontal_tab.
*    CONCATENATE l_string cl_abap_char_utilities=>horizontal_tab
*               INTO l_string.
    APPEND l_string TO lt_objbin.
    CLEAR l_string.

   ENDLOOP.

0 Kudos
144

HI Aviansh,

Thanks for the response.

First my question is the code what i have written is works fine for .xls

so what extra changes i need to do make it work for .txt as well please suggest.

Regards

sas

Ps: and u said

"you need to concantenate each field with the '|' into the string as i used the horizantal tab."

So from where can i get the '|' from which class > or i need to prepare of my own?

Regards

sas

Edited by: saslove sap on Jan 27, 2009 9:59 AM

0 Kudos
144

Hi,

Yes you need to pass the fattachment as TXT and for '|' pipe symbol you can find this on your keboard above Enter Key. use shift to get this value.

0 Kudos
144

Avinash,

if u having 6.0 version please copy my code and execute it input any of the default mail adress.

U can see in Tcode :SOST the mail attachment clearly.When it is xls it is very fine.

Now if u change directly output extension 'xls' TO 'txt' I dont think it will work ...

please change it and see .....it is not giving proper attachment when u check in the SOST.

and i know the symbol my question is

Horizantal_tab is for tabseperated

so in the same way what is the things for '|'

Please advice..

Regards

sas

Former Member
0 Kudos
145

Hi,

Please try this. Hope this will help you

  • Columns to be tab delimeted

LOOP AT I_MARA ASSIGNING <LFS_TABLE>.

DO.

ASSIGN COMPONENT SY-INDEX OF STRUCTURE <LFS_TABLE>

TO <LFS_CON>.

IF SY-SUBRC NE 0.

CONCATENATE C_CR L_TEXT INTO L_TEXT.

  • CONCATENATE l_str c_cr l_text INTO l_str.

  • ls_solix-line = l_text.

  • APPEND ls_solix TO i_attach.

APPEND L_TEXT TO I_ATTACH.

EXIT.

ELSE.

CLEAR: L_CON.

MOVE <LFS_CON> TO L_CON.

CONDENSE L_CON.

IF SY-INDEX = 1.

CLEAR: L_TEXT.

MOVE L_CON TO L_TEXT.

ELSE.

***************

CONCATENATE L_TEXT L_CON INTO L_TEXT

SEPARATED BY '|'.

****************

ENDIF.

ENDIF.

ENDDO.

ENDLOOP.

Thanks & Regards.

Aniruddha

0 Kudos
144

Hi Anirudha,

Thanks . My requirement is the mail should have attachment as '.txt' file...Considering my code pls let me know what changes i can make it work ....

Regards

Sas

0 Kudos
144

Hi Sas,

I have copied the code and executed and it is working fine. I'm getting the text attachement in the email.

* Adding Attachment
      CALL METHOD L_DOCUMENT->ADD_ATTACHMENT
        EXPORTING
          I_ATTACHMENT_TYPE    = 'TXT'          "  C_EXT   My change
          I_ATTACHMENT_SIZE    = L_SIZE
          I_ATTACHMENT_SUBJECT = 'MARA Details'
*          i_att_content_hex    = i_attach[].
          I_ATT_CONTENT_TEXT   = I_ATTACH[].

CONCATENATE i_mara-MATNR
                         i_mara-ERSDA
                         i_mara-ERNAM
                         i_mara-LAEDA
                         .............
                         .............
               INTO   L_TEXT
             SEPARATED BY '|'.

0 Kudos
144

Hi Anirudh,

Thanks !! Ya what you said is correct it is working fine....

The things made me confusion are

1) when i execute with .xls Extenstion i can see the attachment opened directly in mail transaction.

2) where when i execute with .txt extension when i click to open it is displaying in sap screen only it is not opening any o/p in txt.....

so i save in the desktop it is working fine....

so almost the problem is solved except just working how can i add headers to that txt

Regards

SAS

Full marks to you both thanks

Former Member
0 Kudos
144

Hi,

Please pass EXT in the method add_attacment instaed of XLS.

it is working itested by copying your code.

Thanks.

UmaS.