Sending mail with attachment report in Background

Content Author: Fernando Faian

I have read the hint about "Sending mail with attachment report".
It's great, but how can I make this function work in background??

I had that needed last year too. See attachment a function group with two functions. The second one has that functionality to send email or fax (SAP office) with attachment objects in background job using SO_ATTACHMENT_INSERT function. 

Pay attention because it’s working with output list from spool converted to pdf.

=================================================================================

z_send_email_fax_global

FUNCTION-POOL z_gfaian_mail_fax.            "MESSAGE-ID ..


*-----------------------------------------------------------------------
*  WORK TABLE AREAS
*-----------------------------------------------------------------------
TABLES: tsp01.


*-----------------------------------------------------------------------
* INTERNAL TABLES
*-----------------------------------------------------------------------
DATA: lt_rec_tab LIKE STANDARD TABLE OF soos1 WITH HEADER LINE,
      lt_note_text   LIKE STANDARD TABLE OF soli  WITH HEADER LINE,
      lt_attachments LIKE STANDARD TABLE OF sood5 WITH HEADER LINE.

DATA: lt_objcont LIKE STANDARD TABLE OF soli WITH HEADER LINE,
      lt_objhead LIKE STANDARD TABLE OF soli WITH HEADER LINE.

DATA: pdf_format LIKE STANDARD TABLE OF tline WITH HEADER LINE.

TYPES: BEGIN OF y_files,
       file(60) TYPE c,
       END OF y_files.

DATA: lt_files TYPE STANDARD TABLE OF y_files WITH HEADER LINE.

DATA: l_objcont     LIKE soli OCCURS 0 WITH HEADER LINE.
DATA: l_objhead     LIKE soli OCCURS 0 WITH HEADER LINE.


*-----------------------------------------------------------------------
* STRUCTURES
*-----------------------------------------------------------------------
DATA: folder_id      LIKE soodk,
      object_id      LIKE soodk,
      link_folder_id LIKE soodk,
      g_document     LIKE sood4,
*      g_header_data  LIKE sood2,
      g_folmem_data  LIKE sofm2,
      g_header_data  LIKE sood2,
      g_receive_data LIKE soos6,
      g_ref_document LIKE sood4,
      g_new_parent   LIKE soodk,
      l_folder_id    LIKE sofdk,
      v_email(50).


DATA: hd_dat  like sood1.

*-----------------------------------------------------------------------
*  VARIABLES
*-----------------------------------------------------------------------
DATA: client  LIKE tst01-dclient,
      name    LIKE tst01-dname,
      objtype LIKE rststype-type,
      type    LIKE rststype-type.

DATA: numbytes TYPE i,
      arc_idx LIKE toa_dara,
      pdfspoolid LIKE tsp01-rqident,
      jobname LIKE tbtcjob-jobname,
      jobcount LIKE tbtcjob-jobcount,
      is_otf.

DATA: outbox_flag LIKE sonv-flag VALUE 'X',
      store_flag  LIKE sonv-flag,
      delete_flag LIKE sonv-flag,
      owner       LIKE soud-usrnam,
      on          LIKE sonv-flag VALUE 'X',
      sent_to_all LIKE sonv-flag,
      g_authority LIKE sofa-usracc,
      w_objdes    LIKE sood4-objdes.

DATA: c_file LIKE rlgrap-filename,
      n_spool(6) TYPE n.

DATA: cancel.

DATA: desired_type  LIKE sood-objtp,
      real_type LIKE sood-objtp,
      attach_type LIKE sood-objtp,
      otf LIKE sood-objtp VALUE 'OTF', " SAPscript Ausgabeformat
      ali LIKE sood-objtp VALUE 'ALI'. " ABAP lists


*-----------------------------------------------------------------------
*  CONSTANTS
*-----------------------------------------------------------------------
CONSTANTS: ou_fol LIKE sofh-folrg              VALUE 'O',
           c_objtp    LIKE g_document-objtp    VALUE 'RAW',
           c_file_ext LIKE g_document-file_ext VALUE 'TXT'.

=================================================================================

z_send_email_fax2

FUNCTION z_faian_mail_fax2.
*"----------------------------------------------------------------------
*"*"Interface local:
*"  IMPORTING
*"     REFERENCE(SRC_SPOOLID) LIKE  TSP01-RQIDENT
*"     REFERENCE(FAX_MAIL_NUMBER) TYPE  SO_NAME
*"     REFERENCE(HEADER_MAIL) TYPE  SO_OBJ_DES
*"     REFERENCE(OBJECT_TYPE) TYPE  SO_ESCAPE
*"  TABLES
*"      LT_BODY_EMAIL STRUCTURE  SOLI
*"  EXCEPTIONS
*"      ERR_NO_ABAP_SPOOLJOB
*"----------------------------------------------------------------------


* Fist part: Verify if the spool really exists
  SELECT SINGLE * FROM tsp01 WHERE rqident = src_spoolid.
  IF sy-subrc NE 0.

    RAISE err_no_abap_spooljob. "doesn't exist

  ELSE.

    client = tsp01-rqclient.
    name   = tsp01-rqo1name.

    CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
         EXPORTING
              authority     = 'SP01'
              client        = client
              name          = name
              part          = 1

         IMPORTING
              type          = type
              objtype       = objtype
         EXCEPTIONS
              fb_error      = 1
              fb_rsts_other = 2
              no_object     = 3
              no_permission = 4
              OTHERS        = 5.

    IF objtype(3) = 'OTF'.
      desired_type = otf.
    ELSE.
      desired_type = ali.
    ENDIF.


    CALL FUNCTION 'RSPO_RETURN_SPOOLJOB'
         EXPORTING
              rqident              = src_spoolid
              desired_type         = desired_type
         IMPORTING
              real_type            = real_type
         TABLES
              buffer               = l_objcont
         EXCEPTIONS
              no_such_job          = 14
              type_no_match        = 94
              job_contains_no_data = 54
              no_permission        = 21
              can_not_access       = 21
              read_error           = 54.

    IF sy-subrc EQ 0.
      attach_type = real_type.
    ENDIF.


    CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
         EXPORTING
              owner     = sy-uname
              region    = ou_fol
         IMPORTING
              folder_id = l_folder_id
         EXCEPTIONS
              OTHERS    = 5.


* fill out informations about the header of the email
    CLEAR: g_document.
    g_document-foltp     = l_folder_id-foltp.
    g_document-folyr     = l_folder_id-folyr.
    g_document-folno     = l_folder_id-folno.

    g_document-objtp     = c_objtp.
    g_document-objdes    = header_mail.
    g_document-file_ext  = c_file_ext.

    g_header_data-objdes    = header_mail.


    CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
         EXPORTING
              method      = 'SAVE'
              office_user = sy-uname
         IMPORTING
              authority   = g_authority
         TABLES
              objcont     = lt_body_email
              attachments = lt_attachments
         CHANGING
              document    = g_document
              header_data = g_header_data
         EXCEPTIONS
              OTHERS      = 1.


    folder_id-objtp = l_folder_id-foltp.
    folder_id-objyr = l_folder_id-folyr.
    folder_id-objno = l_folder_id-folno.

    object_id-objtp = c_objtp.
    object_id-objyr = g_document-objyr.
    object_id-objno = g_document-objno.

    link_folder_id-objtp = l_folder_id-foltp.
    link_folder_id-objyr = l_folder_id-folyr.
    link_folder_id-objno = l_folder_id-folno.


    REFRESH lt_rec_tab.

*    CLEAR lt_rec_tab.
*    lt_rec_tab-sel        = 'X'.
*    lt_rec_tab-recesc     = object_type.   "This field for FAX/MAIL
*    lt_rec_tab-recnam     = 'U-'.
*    lt_rec_tab-deliver    = 'X'.
*    lt_rec_tab-not_deli   = 'X'.
*    lt_rec_tab-read       = 'X'.
*    lt_rec_tab-mailstatus = 'E'.
*    lt_rec_tab-adr_name   = fax_mail_number.
*    lt_rec_tab-sortfield  = fax_mail_number.
*    lt_rec_tab-recextnam  = fax_mail_number.
*    lt_rec_tab-sortclass  = '5'.
*    APPEND lt_rec_tab.


      lt_rec_tab-recextnam = fax_mail_number.
      lt_rec_tab-recesc = object_type.
      lt_rec_tab-sndart = 'INT'.
      lt_rec_tab-sndpri = 1.
      APPEND lt_rec_tab.



    lt_files-file = c_file.
    APPEND lt_files.


* begin of insertion by faianf01

    hd_dat-objdes = header_mail.

    CALL FUNCTION 'SO_ATTACHMENT_INSERT'
         EXPORTING
              object_id                  = object_id
              attach_type                = attach_type
              object_hd_change           = hd_dat
              owner                      = sy-uname
         TABLES
              objcont                    = l_objcont
              objhead                    = l_objhead
         EXCEPTIONS
              active_user_not_exist      = 35
              communication_failure      = 71
              object_type_not_exist      = 17
              operation_no_authorization = 21
              owner_not_exist            = 22
              parameter_error            = 23
              substitute_not_active      = 31
              substitute_not_defined     = 32
              system_failure             = 72
              x_error                    = 1000.

    IF sy-subrc > 0.
    ENDIF.


* end of insertion by faianf01



* send email from SAPOFFICE
    CALL FUNCTION 'SO_OBJECT_SEND'
         EXPORTING
              folder_id                  = folder_id
              object_id                  = object_id
              outbox_flag                = outbox_flag
              link_folder_id             = link_folder_id
              owner                      = sy-uname
*              check_send_authority       = 'X'
         TABLES
              receivers                  = lt_rec_tab
*              note_text                  = lt_note_text
         EXCEPTIONS
              active_user_not_exist      = 35
              communication_failure      = 71
              component_not_available    = 1
              folder_no_authorization    = 5
              folder_not_exist           = 6
              forwarder_not_exist        = 8
              object_no_authorization    = 13
              object_not_exist           = 14
              object_not_sent            = 15
              operation_no_authorization = 21
              owner_not_exist            = 22
              parameter_error            = 23
              substitute_not_active      = 31
              substitute_not_defined     = 32
              system_failure             = 72
              too_much_receivers         = 73
              user_not_exist             = 35.



  ENDIF.


ENDFUNCTION.

=================================================================================

z_send_email_fax

FUNCTION ZCBFS_SEND_MAIL.
*"----------------------------------------------------------------------
*"*"Interface local:
*"  IMPORTING
*"     REFERENCE(SRC_SPOOLID) LIKE  TSP01-RQIDENT
*"     REFERENCE(HEADER_MAIL) TYPE  SO_OBJ_DES
*"  TABLES
*"      LIST_FAX_MAIL_NUMBER STRUCTURE  SOLI
*"  EXCEPTIONS
*"      ERR_NO_ABAP_SPOOLJOB
*"----------------------------------------------------------------------
  DATA: vg_achou(1) TYPE n.

* Fist part: Verify if the spool really exists
  vg_achou = 1.
  DO 60 TIMES.

    SELECT SINGLE * FROM tsp01 WHERE rqident = src_spoolid.
    IF sy-subrc IS INITIAL.
      CLEAR vg_achou.
      EXIT.
    ELSE.
      WAIT UP TO 1 SECONDS.
    ENDIF.

  ENDDO.

  IF vg_achou = 1.
    RAISE err_no_abap_spooljob. "doesn't exist
  ENDIF.




  client = tsp01-rqclient.
  name   = tsp01-rqo1name.

  CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
       EXPORTING
            authority     = 'SP01'
            client        = client
            name          = name
            part          = 1
       IMPORTING
            type          = type
            objtype       = objtype
       EXCEPTIONS
            fb_error      = 1
            fb_rsts_other = 2
            no_object     = 3
            no_permission = 4
            OTHERS        = 5.

  IF objtype(3) = 'OTF'.
    desired_type = otf.
  ELSE.
    desired_type = ali.
  ENDIF.


  CALL FUNCTION 'RSPO_RETURN_SPOOLJOB'
       EXPORTING
            rqident              = src_spoolid
            desired_type         = desired_type
       IMPORTING
            real_type            = real_type
       TABLES
            buffer               = l_objcont
       EXCEPTIONS
            no_such_job          = 14
            type_no_match        = 94
            job_contains_no_data = 54
            no_permission        = 21
            can_not_access       = 21
            read_error           = 54.

  IF sy-subrc EQ 0.
    attach_type = real_type.
  ENDIF.


  CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
       EXPORTING
            owner     = sy-uname
            region    = ou_fol
       IMPORTING
            folder_id = l_folder_id
       EXCEPTIONS
            OTHERS    = 5.


* fill out informations about the header of the email
  CLEAR: g_document.
  g_document-foltp     = l_folder_id-foltp.
  g_document-folyr     = l_folder_id-folyr.
  g_document-folno     = l_folder_id-folno.

  g_document-objtp     = c_objtp.
  g_document-objdes    = header_mail.
  g_document-file_ext  = c_file_ext.

  g_header_data-objdes    = header_mail.


  CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
       EXPORTING
            method      = 'SAVE'
            office_user = sy-uname
       IMPORTING
            authority   = g_authority
       TABLES
            attachments = lt_attachments
       CHANGING
            document    = g_document
            header_data = g_header_data
       EXCEPTIONS
            OTHERS      = 1.


  folder_id-objtp = l_folder_id-foltp.
  folder_id-objyr = l_folder_id-folyr.
  folder_id-objno = l_folder_id-folno.

  object_id-objtp = c_objtp.
  object_id-objyr = g_document-objyr.
  object_id-objno = g_document-objno.

  link_folder_id-objtp = l_folder_id-foltp.
  link_folder_id-objyr = l_folder_id-folyr.
  link_folder_id-objno = l_folder_id-folno.


  REFRESH lt_rec_tab.

  LOOP AT LIST_FAX_MAIL_NUMBER.
    lt_rec_tab-recextnam = LIST_FAX_MAIL_NUMBER-LINE.
    lt_rec_tab-recesc = 'U'.
    lt_rec_tab-sndart = 'INT'.
    lt_rec_tab-sndpri = 1.
    APPEND lt_rec_tab.
  ENDLOOP.

  lt_files-file = c_file.
  APPEND lt_files.

  hd_dat-objdes = header_mail.

  CALL FUNCTION 'SO_ATTACHMENT_INSERT'
       EXPORTING
            object_id                  = object_id
            attach_type                = attach_type
            object_hd_change           = hd_dat
            owner                      = sy-uname
       TABLES
            objcont                    = l_objcont
            objhead                    = l_objhead
       EXCEPTIONS
            active_user_not_exist      = 35
            communication_failure      = 71
            object_type_not_exist      = 17
            operation_no_authorization = 21
            owner_not_exist            = 22
            parameter_error            = 23
            substitute_not_active      = 31
            substitute_not_defined     = 32
            system_failure             = 72
            x_error                    = 1000.

  IF sy-subrc > 0.
  ENDIF.


* send email from SAPOFFICE
  CALL FUNCTION 'SO_OBJECT_SEND'
       EXPORTING
            folder_id                  = folder_id
            object_id                  = object_id
            outbox_flag                = outbox_flag
            link_folder_id             = link_folder_id
            owner                      = sy-uname
       TABLES
            receivers                  = lt_rec_tab
            note_text                  = lt_note_text
       EXCEPTIONS
            active_user_not_exist      = 35
            communication_failure      = 71
            component_not_available    = 1
            folder_no_authorization    = 5
            folder_not_exist           = 6
            forwarder_not_exist        = 8
            object_no_authorization    = 13
            object_not_exist           = 14
            object_not_sent            = 15
            operation_no_authorization = 21
            owner_not_exist            = 22
            parameter_error            = 23
            substitute_not_active      = 31
            substitute_not_defined     = 32
            system_failure             = 72
            too_much_receivers         = 73
            user_not_exist             = 35.


ENDFUNCTION.

=================================================================================

ABAP Tips

Related ABAP Topics:
Table CDHDR and CDPOS Usage

Get help for your ABAP problems
Do you have a ABAP Question?

SAP Books
SAP Certification, Interview Questions, Functional, Basis Administration and ABAP Programming Reference Books

More ABAP Tips

Main Index
SAP Basis, ABAP Programming and Other IMG Stuff
http://www.erpgreat.com

All the site contents are Copyright © www.erpgreat.com and the content authors. All rights reserved.
All product names are trademarks of their respective companies.  The site www.erpgreat.com is in no way affiliated with SAP AG.
Every effort is made to ensure the content integrity.  Information used on this site is at your own risk.
 The content on this site may not be reproduced or redistributed without the express written permission of
www.erpgreat.com or the content authors.