Application Development and Automation 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: 
Read only

attach using the function SO_DOCUMENT_SEND_API1

Former Member
0 Likes
483

Hi all,

I'm using the function SO_DOCUMENT_SEND_API1 to send and email with a txt document attached, but I only can attach a document with a lenght less than 255 character.

Anyone could please tell me if there is another function that allow me to send an email with a document bigger than 255 character attached?

thank in advance.

2 REPLIES 2
Read only

Former Member
0 Likes
419

Hi Raul

Find below code, which downloads the data to a PC file and attach to the mail(no restriction of 256 characters). You can use this to modify accordingly. Have tried this quite long back.



DATA: METHOD1 LIKE SY-UCOMM,
      G_USER LIKE SOUDNAMEI1,
      G_USER_DATA LIKE SOUDATAI1,
      G_OWNER LIKE SOUD-USRNAM,
      G_RECEIPIENTS LIKE SOOS1 OCCURS 0 WITH HEADER LINE,
      G_DOCUMENT LIKE SOOD4,
      G_HEADER LIKE SOOD2,
      G_FOLMAM LIKE SOFM2,
      G_OBJCNT LIKE SOLI OCCURS 0 WITH HEADER LINE,
      G_OBJHEAD LIKE SOLI OCCURS 0 WITH HEADER LINE,
      G_OBJPARA LIKE SELC OCCURS 0 WITH HEADER LINE,
      G_OBJPARB LIKE SOOP1 OCCURS 0 WITH HEADER LINE,
      G_ATTACHMENTS LIKE SOOD5 OCCURS 0 WITH HEADER LINE,
      G_REFERENCES LIKE SOXRL OCCURS 0 WITH HEADER LINE.

DATA: G_AUTHORITY LIKE SOFA-USRACC,
      G_REF_DOCUMENT LIKE SOOD4,
      G_NEW_PARENT LIKE SOODK.

DATA: BEGIN OF G_FILES OCCURS 10 ,
        TEXT(4096) TYPE C,
      END OF G_FILES.

DATA: FOLD_NUMBER(12) TYPE C,
      FOLD_YR(2) TYPE C,
      FOLD_TYPE(3) TYPE C.

PARAMETERS P_FILE(4096) TYPE C DEFAULT 'C:\MATERIALS.TXT' OBLIGATORY.

DATA: IT_MARA TYPE STANDARD TABLE OF MARA.
DATA: L_FILE TYPE STRING.


START-OF-SELECTION.

   SELECT * FROM MARA INTO TABLE IT_MARA UP TO 20 ROWS.

   L_FILE = P_FILE.
   CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        FILENAME                        = L_FILE
      TABLES
        DATA_TAB                        = IT_MARA
      EXCEPTIONS
        FILE_WRITE_ERROR                = 1
        NO_BATCH                        = 2
        GUI_REFUSE_FILETRANSFER         = 3
        INVALID_TYPE                    = 4
        NO_AUTHORITY                    = 5
        UNKNOWN_ERROR                   = 6
        HEADER_NOT_ALLOWED              = 7
        SEPARATOR_NOT_ALLOWED           = 8
        FILESIZE_NOT_ALLOWED            = 9
        HEADER_TOO_LONG                 = 10
        DP_ERROR_CREATE                 = 11
        DP_ERROR_SEND                   = 12
        DP_ERROR_WRITE                  = 13
        UNKNOWN_DP_ERROR                = 14
        ACCESS_DENIED                   = 15
        DP_OUT_OF_MEMORY                = 16
        DISK_FULL                       = 17
        DP_TIMEOUT                      = 18
        FILE_NOT_FOUND                  = 19
        DATAPROVIDER_EXCEPTION          = 20
        CONTROL_FLUSH_ERROR             = 21
        OTHERS                          = 22.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    WRITE: / 'FILE'(007), L_FILE, 'WAS CREATED.'(008).
  ENDIF.


* CAN BE ANY FILE FROMYOUR PC ....EITHER XLS OR WORD OR PPT ETC ...
   G_USER-SAPNAME = SY-UNAME.

   CALL FUNCTION 'SO_USER_READ_API1'
     EXPORTING
       USER = G_USER
* PREPARE_FOR_FOLDER_ACCESS = ' '
    IMPORTING
       USER_DATA = G_USER_DATA
    EXCEPTIONS
       USER_NOT_EXIST = 1
       PARAMETER_ERROR = 2
       X_ERROR = 3
       OTHERS = 4.
   IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF.

   FOLD_TYPE = G_USER_DATA-OUTBOXFOL+0(3).
   FOLD_YR = G_USER_DATA-OUTBOXFOL+3(2).
   FOLD_NUMBER = G_USER_DATA-OUTBOXFOL+5(12).
   CLEAR G_FILES.

   REFRESH : G_OBJCNT, G_OBJHEAD, G_OBJPARA, G_OBJPARB, G_RECEIPIENTS,
             G_ATTACHMENTS, G_REFERENCES, G_FILES.

   METHOD1 = 'SAVE'.
   G_DOCUMENT-FOLTP = FOLD_TYPE.
   G_DOCUMENT-FOLYR = FOLD_YR.
   G_DOCUMENT-FOLNO = FOLD_NUMBER.
   G_DOCUMENT-OBJTP = G_USER_DATA-OBJECT_TYP.
   G_DOCUMENT-OBJDES = 'Material Details'.
   G_DOCUMENT-FOLRG = 'O'.
   G_DOCUMENT-OBJLEN = '0'.
   G_DOCUMENT-FILE_EXT = 'TXT'.

   G_HEADER-OBJDES = 'Material Details'.
   G_HEADER-FILE_EXT = 'TXT'.

   CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
     EXPORTING
       METHOD          = METHOD1
       OFFICE_USER     = SY-UNAME
       REF_DOCUMENT    = G_REF_DOCUMENT
       NEW_PARENT      = G_NEW_PARENT
     IMPORTING
       AUTHORITY       = G_AUTHORITY
     TABLES
       OBJCONT         = G_OBJCNT
       OBJHEAD         = G_OBJHEAD
       OBJPARA         = G_OBJPARA
       OBJPARB         = G_OBJPARB
       RECIPIENTS      = G_RECEIPIENTS
       ATTACHMENTS     = G_ATTACHMENTS
       REFERENCES      = G_REFERENCES
       FILES           = G_FILES
     CHANGING
       DOCUMENT        = G_DOCUMENT
       HEADER_DATA     = G_HEADER.

* FILE FROM THE PC TO SEND...
  METHOD1              = 'ATTCREATEFROMPC'.
  G_FILES-TEXT         = P_FILE.
  APPEND G_FILES.

  CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
   EXPORTING
     METHOD            = METHOD1
     OFFICE_USER       = G_OWNER
     REF_DOCUMENT      = G_REF_DOCUMENT
     NEW_PARENT        = G_NEW_PARENT
   IMPORTING
     AUTHORITY         = G_AUTHORITY
   TABLES
     OBJCONT           = G_OBJCNT
     OBJHEAD           = G_OBJHEAD
     OBJPARA           = G_OBJPARA
     OBJPARB           = G_OBJPARB
     RECIPIENTS        = G_RECEIPIENTS
     ATTACHMENTS       = G_ATTACHMENTS
     REFERENCES        = G_REFERENCES
     FILES             = G_FILES
   CHANGING
     DOCUMENT          = G_DOCUMENT
     HEADER_DATA       = G_HEADER.

  METHOD1              = 'SEND'.
  G_RECEIPIENTS-RECNAM = 'MK085'.
  G_RECEIPIENTS-RECESC = 'B'.
  G_RECEIPIENTS-SNDEX  = 'X'.
  APPEND G_RECEIPIENTS.


  CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
    EXPORTING
      METHOD           = METHOD1
      OFFICE_USER      = G_OWNER
      REF_DOCUMENT     = G_REF_DOCUMENT
      NEW_PARENT       = G_NEW_PARENT
    IMPORTING
      AUTHORITY        = G_AUTHORITY
    TABLES
      OBJCONT          = G_OBJCNT
      OBJHEAD          = G_OBJHEAD
      OBJPARA          = G_OBJPARA
      OBJPARB          = G_OBJPARB
      RECIPIENTS       = G_RECEIPIENTS
      ATTACHMENTS      = G_ATTACHMENTS
      REFERENCES       = G_REFERENCES
      FILES            = G_FILES
    CHANGING
      DOCUMENT         = G_DOCUMENT
      HEADER_DATA      = G_HEADER.


Kind Regards

Eswar

Read only

Former Member
0 Likes
419

Also check below example:

Execute below code with internet mailing address as parameter.



PARAMETERS: p_mail TYPE ad_smtpadr OBLIGATORY.

DATA: i_mara TYPE STANDARD TABLE OF mara.  " MARA 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

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.

* Preparing body of the Mail
  MOVE 'Mail Body' TO l_text.
  APPEND l_text TO i_content.

* Preparing contents of attachment with Change Log
  PERFORM prepare_attachment.

* 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 = 'Material Details' ).

      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 = 'Material Details'
          i_att_content_text   = i_attach[].

* Add document to send request
      CALL METHOD l_send_request->set_document( l_document ).

* Get Sender Object
      l_uname = sy-uname.

      l_sender = cl_sapuser_bcs=>create( l_uname ).

      CALL METHOD l_send_request->set_sender
        EXPORTING
          i_sender = l_sender.

* E-Mail
      TRANSLATE p_mail TO LOWER CASE.

    l_recipient = cl_cam_address_bcs=>create_internet_address( p_mail )
.

      CALL METHOD l_send_request->add_recipient
        EXPORTING
          i_recipient  = l_recipient
          i_express    = 'U'
          i_copy       = ' '
          i_blind_copy = ' '
          i_no_forward = ' '.


*Trigger E-Mail immediately
      l_send_request->set_send_immediately( 'X' ).

      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(50) TYPE c.        " Field Content in character format

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

ENDFORM.                    " PREPARE_ATTACHMENT

Kind Regards

Eswar