Skip to Content
author's profile photo Former Member
Former Member

Sendin Spool reports to an e-mail address.

Just wondering how one would go about developing a process to look for a specific spool report and send it to a specific e-mail address. I would place the reports and associated e-mail address in a Z table to be maintained by a user group. I have no clue on how to read the spool and collect a specific report to be sent via e-mail. Any help or suggestions would be greatly appreciated.

Thanks,

Scott

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

3 Answers

  • Posted on Jan 13, 2005 at 03:53 PM

    Hello,

    FM RS_SEND_MAIL_FOR_SPOOLLIST would help you.

    Regards, Murugesh AS

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jan 13, 2005 at 03:53 PM

    Hi Scot,

    You don't have to create a Z-table. You can use Distribution lists to accomplish this. You can assign the distribution list either when creating a job, or go to the spool (SP01) and go via menu Spool Request -> Forward -> Send using SAP-Office.

    Regards,

    John.

    Add a comment
    10|10000 characters needed characters exceeded

  • Posted on Jan 13, 2005 at 04:03 PM

    Here is some sample code. This program takes the spool from a previous job step. It converts this spool to PDF and then inserts this PDF as an attachment in an E-mail.

    ************************************************************************
    * Program Name: KEG Job Sched Run with PDF Output Creation: 03/22/2001
    *
    *                                                                      *
    * SAP Name    : ZESU_JOB_RUN_WITH_PDF_OUTPUT      Application: U       *
    *                                                                      *
    * Author      : Thomas Jung                       Type: 1              *
    *______________________________________________________________________*
    * Description :  This Program will read the spool produced
    * by the specified previous job step and converts it to
    * PDF.  This PDF-Formatted report is then output to a file.            *
    *______________________________________________________________________*
    * Inputs: File name, job step                                          *
    *                                                                      *
    * Outputs: File formatted in PDF with the report output.               *
    *______________________________________________________________________*
    * External Routines
    * FILE_GET_NAME
    * CONVERT_ABAPSPOOLJOB_2_PDF
    * CONVERT_OTFSPOOLJOB_2_PDF
    * Z_E_OPEN_FILE_FOR_OUTPUT_BIN
    * Z_E_WRITE_TO_FILE_WITH_LENGTH
    * SO_NEW_DOCUMENT_ATT_SEND_API1
    * BAPI_USER_GET_DETAIL
    *______________________________________________________________________*
    * Return Codes:
    * The program uses the standard function modules for File manipulation
    * therefore it has all the standard error routines for Files.          *
    *______________________________________________________________________*
    * Ammendments:                                                         *
    *    Programmer        Date     Req. #            Action               *
    * ================  ==========  ======  ===============================*
    * Thomas Jung       03/27/2001  ------  Initial Program.               *
    *                                                                      *
    ************************************************************************
    
    report  zesu_job_run_with_pdf_output message-id zes_job.
    
    *----------------------------------------------------------------------*
    * DATA DICTIONARY TABLES                                               *
    *----------------------------------------------------------------------*
    tables: raldb. "Transfer Structure for Logical Databases
    tables: tbtcp.
    tables: icon,   "Icons table
            bapiadsmtp, "BAPI structure for e-mail addresses (central
            bapiadpag.
    
    
    *----------------------------------------------------------------------*
    * TYPE POOLS                                                           *
    *----------------------------------------------------------------------*
    type-pools: sbdst.
    
    *----------------------------------------------------------------------*
    * CONSTANTS                                                            *
    *----------------------------------------------------------------------*
    constants: logical_file_name like filename-fileintern
                  value 'ZEX_STANDARD_FILENAME',
               pdf_ext(4) type c
                  value '.pdf',
               pdf_type(3) type c
                  value 'PDF',
               internet(1) type c
                  value 'U',
               dist_list(1) type c
                  value 'C',
               kimball_domain(12) type c value '@kimball.com'.
    
    constants: kim_ftp(80) type c
    value
    'ftp://kww.kog.kimball.com/webtools/acrobat_reader/acroread40w95.exe'.
    
    constants: ext_ftp(80) type c
    value
    'http://www.adobe.com/products/acrobat/readermain.html'.
    
    
    *----------------------------------------------------------------------*
    * VARIABLES                                                            *
    *----------------------------------------------------------------------*
    data: length type i.
    data: f4_field like trdir-name.
    data: pathleng type i,
          nameleng type i,
          physleng type i.
    data jselect like btcselect.
    data: report like sy-repid.
    
    data: doc_chng         like sodocchgi1.
    
    data: tab_lines        like sy-tabix.
    
    
    *----------------------------------------------------------------------*
    * INTERNAL TABLES                                                      *
    *----------------------------------------------------------------------*
    data: begin of html_tab occurs 0.
            include structure w3html.
    data: end of html_tab.
    
    data: icontab(32) occurs 10 with header line.
    
    data: itab like abaplist occurs   0 with header line.
    
    data: ipdf        like tline      occurs 0 with header line.
    
    data: objpack          like sopcklsti1 occurs 2 with header line.
    
    data: objhead          like solisti1   occurs 1 with header line.
    
    data: objbin           like solisti1   occurs 10 with header line.
    
    data: objtxt           like solisti1   occurs 10 with header line.
    
    data: reclist          like somlreci1  occurs 5 with header line.
    
    *----------------------------------------------------------------------*
    * SELECTION SCREEN LAYOUT                                              *
    *----------------------------------------------------------------------*
    selection-screen begin of block one with frame title text-001.
    parameters: fileintn like filename-fileintern obligatory
                    default logical_file_name,
                filepath like rlgrap-filename lower case.
    
    parameters: file1    like rlgrap-filename obligatory lower case,
                physname like rlgrap-filename lower case.
    parameters: date1 as checkbox.
    parameters: time1 as checkbox.
    selection-screen end of block one.
    
    selection-screen begin of block two with frame title text-002.
    parameter: step like tbtcp-stepcount.
    parameter: abap radiobutton group one.
    parameter: oft  radiobutton group one.
    selection-screen end of block two.
    
    selection-screen begin of block three with frame title text-003.
    parameter: file  radiobutton group two.
    parameter: email radiobutton group two.
    
    selection-screen skip 1.
    
    parameter: int radiobutton group thre.
    parameter: dis radiobutton group thre.
    
    selection-screen skip 1.
    
    parameter: ext_user like somlreci1-receiver.
    
    selection-screen end of block three.
    *----------------------------------------------------------------------*
    * SELECTION SCREEN PROCESSING - OUTPUT                                 *
    *----------------------------------------------------------------------*
    at selection-screen output.
      perform filename_processing.
      loop at screen.
        if screen-name eq 'FILEPATH' or
           screen-name eq 'PHYSNAME'.
          screen-input = 0.
          modify screen.
        endif.
      endloop.
    
    
    *----------------------------------------------------------------------*
    * START OF SELECTION                                                   *
    *----------------------------------------------------------------------*
    start-of-selection.
    
      move sy-repid to report.
      perform auth_check.
    
      perform filename_processing.
    
      perform get_spool.
    
      perform convert_list_to_pdf.
    
      if file = 'X'.
        perform write_to_file.
      else.
        perform send_pdf_in_email.
      endif.
    
    
    *&---------------------------------------------------------------------*
    *&      Form  filename_processing
    *&---------------------------------------------------------------------*
    *       Prepair to conver to the logical file name to a physical name
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    form filename_processing.
      perform get_filename using fileintn file1 physname.
      nameleng = strlen( file1 ).
      physleng = strlen( physname ).
      pathleng = physleng - nameleng.
      if pathleng > 0.
        filepath = physname(pathleng).
      endif.
    
    endform.                    " filename_processing
    *&---------------------------------------------------------------------*
    *&      Form  get_filename
    *&---------------------------------------------------------------------*
    *       Convert the logical file name into a physical file name
    *----------------------------------------------------------------------*
    *      -->P_FILEINTN  Input Logical File Name
    *      -->P_FILE1     Filename selected by input
    *      -->P_PHYSNAME  Output Physical File Name
    *----------------------------------------------------------------------*
    form get_filename using    p_fileintn
                               p_file1
                               p_physname.
    
      data: p_file2 like rlgrap-filename.
      clear p_file2.
    
      move p_file1 to p_file2.
    
      if date1 = 'X'.
        concatenate p_file2
                    '_'
                    sy-datum
                    into p_file2.
      endif.
    
      if time1 = 'X'.
        concatenate p_file2
                    '_'
                    sy-uzeit
                    into p_file2.
      endif.
    
      concatenate p_file2
                  pdf_ext
                  into p_file2.
    
      call function 'FILE_GET_NAME'
            exporting
              client                        = sy-mandt
              logical_filename              = p_fileintn
              operating_system              = sy-opsys
              parameter_1                   = p_file2
    *     PARAMETER_2                   = ' '
    *     PARAMETER_3                   = ' '
    *     USE_PRESENTATION_SERVER       = ' '
    *     WITH_FILE_EXTENSION           = ' '
    *     USE_BUFFER                    = ' '
            importing
    *     EMERGENCY_FLAG                =
    *     FILE_FORMAT                   =
              file_name                     = p_physname
            exceptions
              file_not_found                = 1
              others                        = 2
                    .
      if sy-subrc <> 0.
        message e001(zes_general) with sy-subrc.
      endif.
    
    endform.                    " get_filename
    *&---------------------------------------------------------------------*
    *&      Form  write_to_file
    *&---------------------------------------------------------------------*
    *       TRANSFER PDF DATA TO OUTPUT FILE
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    form write_to_file.
      data: string_out type string.
      describe field objbin length length.
    
      call function 'Z_E_OPEN_FILE_FOR_OUTPUT_BIN'
           exporting
                filename1 = physname.
    
      loop at objbin.
        clear string_out.
        move objbin to string_out.
        call function 'Z_E_WRITE_TO_FILE_WITH_LENGTH'
             exporting
                  filename1        = physname
                  length           = length
                  please_open_file = 'NO'
                  string           = string_out.
      endloop.
    
    endform.                    " write_to_file
    *&---------------------------------------------------------------------*
    *&      Form  convert_list_to_pdf
    *&---------------------------------------------------------------------*
    *       Convert to Spool to PDF
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    form convert_list_to_pdf.
      data: spool_id like tsp01-rqident.
      move tbtcp-listident to spool_id.
    
    ****Is this ABAP List Processing?
      if abap = 'X'.
        call function 'CONVERT_ABAPSPOOLJOB_2_PDF'
          exporting
            src_spoolid                    = spool_id
    *       NO_DIALOG                      =
    *       DST_DEVICE                     =
    *       PDF_DESTINATION                =
    *     IMPORTING
    *       PDF_BYTECOUNT                  =
    *       PDF_SPOOLID                    =
    *       LIST_PAGECOUNT                 =
    *       BTC_JOBNAME                    =
    *       BTC_JOBCOUNT                   =
          tables
            pdf                            = ipdf
         exceptions
           err_no_abap_spooljob           = 1
           err_no_spooljob                = 2
           err_no_permission              = 3
           err_conv_not_possible          = 4
           err_bad_destdevice             = 5
           user_cancelled                 = 6
           err_spoolerror                 = 7
           err_temseerror                 = 8
           err_btcjob_open_failed         = 9
           err_btcjob_submit_failed       = 10
           err_btcjob_close_failed        = 11
           others                         = 12.
        if sy-subrc <> 0.
          message i016 with sy-subrc.
        endif.
      else.
    ****Or is this SAPscript?
        call function 'CONVERT_OTFSPOOLJOB_2_PDF'
          exporting
            src_spoolid                    = spool_id
    *       NO_DIALOG                      =
    *       DST_DEVICE                     =
    *       PDF_DESTINATION                =
    *     IMPORTING
    *       PDF_BYTECOUNT                  =
    *       PDF_SPOOLID                    =
    *       OTF_PAGECOUNT                  =
    *       BTC_JOBNAME                    =
    *       BTC_JOBCOUNT                   =
          tables
            pdf                            = ipdf
         exceptions
           err_no_otf_spooljob            = 1
           err_no_spooljob                = 2
           err_no_permission              = 3
           err_conv_not_possible          = 4
           err_bad_dstdevice              = 5
           user_cancelled                 = 6
           err_spoolerror                 = 7
           err_temseerror                 = 8
           err_btcjob_open_failed         = 9
           err_btcjob_submit_failed       = 10
           err_btcjob_close_failed        = 11
           others                         = 12.
        if sy-subrc <> 0.
          message i016 with sy-subrc.
        endif.
      endif.
    
      perform convert_pdf tables ipdf
                                 objbin.
    
    endform.                    " convert_list_to_pdf
    *&---------------------------------------------------------------------*
    *&      Form  get_spool
    *&---------------------------------------------------------------------*
    *   Read the job log to get the spool number for the specified step
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    form get_spool.
      clear jselect.
    *jselect-jobname = '*'.
      jselect-username = '*'.
    
    ****Have this program get its own Job Name
      call function 'GET_JOB_RUNTIME_INFO'
           importing
    *         EVENTID                 =
    *         EVENTPARM               =
    *         EXTERNAL_PROGRAM_ACTIVE =
              jobcount                = jselect-jobcount
              jobname                 = jselect-jobname
    *         STEPCOUNT               =
           exceptions
                no_runtime_info         = 1
                others                  = 2.
    
    ****Read the spool number for this job step.
      clear tbtcp.
      select single listident from tbtcp
             into tbtcp-listident
             where jobname   = jselect-jobname
               and jobcount  = jselect-jobcount
               and stepcount = step.
      if tbtcp-listident = 0.
        message i009 with step.
      endif.
    
    endform.                    " get_spool
    *&---------------------------------------------------------------------*
    *&      Form  convert_pdf
    *&---------------------------------------------------------------------*
    *       Take the PDF information returned by the function module
    *       and convert it to a file readable format.  It currently is
    *       in a printable-only format.
    *----------------------------------------------------------------------*
    *      -->P_IPDF  PDF Source
    *      -->P_OBJBIN  PDF Destination
    *----------------------------------------------------------------------*
    form convert_pdf tables   t_source_tab structure ipdf
                              t_target_tab structure objbin.
    
    
      data:  l_hfeld(1600)      type c,
    
             l_offset           type p,
    
             l_tabix            like sy-tabix,
    
             l_max              type i,
    
             l_linecount_source type i,
    
             l_length_source    type i,
    
             l_length_target    type i.
    
    
    
    * Zeilenlänge des Quell-PDF-Files
    
      describe field t_source_tab length l_length_source.
    
    * Zeilenlänge der Ziel-Mime-Tabelle
    
      describe field t_target_tab length l_length_target.
    
    * Zeilenanzahl des Quell-PDF-Files
    
      describe table t_source_tab lines l_linecount_source.
    
    * Die maximale Zielgröße wird durch das Feld l_hfeld begrenzt.
    
      l_max = l_length_target + l_length_source.
    
    *  IF L_MAX > 1600.
    *
    *    RAISE CONVERT_NOT_POSSIBLE.
    *
    *  ENDIF.
    
      refresh t_target_tab.
    
      loop at t_source_tab.
    
        l_tabix = sy-tabix.
    
        move t_source_tab to l_hfeld+l_offset.
    
    * falls letzte zeile der quelltabelle erreicht
    
        if l_tabix = l_linecount_source.
    
          l_length_source = strlen( t_source_tab ).
    
        endif.
    
        l_offset = l_offset + l_length_source.
    
        while l_offset ge l_length_target.
    
          clear t_target_tab.
    
          t_target_tab = l_hfeld(l_length_target).
    
          append t_target_tab.
    
          shift l_hfeld by l_length_target places.
    
          l_offset = l_offset - l_length_target.
    
        endwhile.                          " l_offset ge p_length_target
    
    * falls letzte zeile der quelltabelle erreicht
    
        if l_tabix = l_linecount_source.
    
          if l_offset gt 0.
    
            clear t_target_tab.
    
            t_target_tab = l_hfeld(l_offset).
    
            append t_target_tab.
    
          endif.                           " l_offset gt 0
    
        endif.                             " l_tabix = l_linecount_lines
    
      endloop.                             " p_source_tab
    
    endform.                    " convert_pdf
    *&---------------------------------------------------------------------*
    *&      Form  auth_check
    *&---------------------------------------------------------------------*
    *       Perform Authorization Check
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    form auth_check.
      authority-check object 'Z_ABAP_CHK'
                   id 'BUKRS' dummy
                   id 'ACTVT' dummy
                   id 'WERKS' dummy
                   id 'REPID' field report.
    
      if sy-subrc ne 0.
        message e024.
      endif.
    
    endform.                    " auth_check
    *&---------------------------------------------------------------------*
    *&      Form  send_pdf_in_email
    *&---------------------------------------------------------------------*
    *       Transfer the PDF file in an E-Mail
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    form send_pdf_in_email.
    
      data: iaddsmtp type bapiadsmtp occurs 0 with header line.
      data: ireturn type bapiret2 occurs 0 with header line.
    
      concatenate text-010 jselect-jobname text-011
                  into doc_chng-obj_descr
                  separated by space.
    
      clear objtxt.
      objtxt = text-012.
      append objtxt.
    
      clear objtxt.
      objtxt = text-013.
      append objtxt.
    
      clear objtxt.
      concatenate text-014 jselect-jobname
                  into objtxt
                  separated by space.
      append objtxt.
    
      clear objtxt.
      objtxt = text-015.
      append objtxt.
    
      clear objtxt.
      objtxt = text-016.
      append objtxt.
    
      clear objtxt.
      append objtxt.
    
      clear objtxt.
      concatenate text-017 kim_ftp
                  into objtxt
                  separated by space.
      append objtxt.
    
      clear objtxt.
      concatenate text-018 ext_ftp
                into objtxt
                separated by space.
      append objtxt.
    
      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.
    
      describe table objbin lines tab_lines.
      concatenate jselect-jobname pdf_ext
                  into objhead.
      append objhead.
    
      objpack-transf_bin = 'X'.
      objpack-head_start = 1.
      objpack-head_num   = 1.
      objpack-body_start = 1.
      objpack-body_num   = tab_lines.
      objpack-doc_type   = pdf_type.
      objpack-obj_name   = jselect-jobname.
      concatenate text-019 jselect-jobname
                  into objpack-obj_descr
                  separated by space.
    
      objpack-doc_size   = tab_lines * 255.
      append objpack.
    
      if int = 'X'.
        clear iaddsmtp.
        refresh iaddsmtp.
        clear bapiadsmtp.
        call function 'BAPI_USER_GET_DETAIL'
             exporting
                  username = ext_user+0(12)
             tables
                  return   = ireturn
                  addsmtp  = iaddsmtp.
        loop at iaddsmtp where std_no = 'X'.
          clear bapiadsmtp.
          move iaddsmtp to bapiadsmtp.
        endloop.
        if bapiadsmtp-e_mail = ''.
          concatenate ext_user kimball_domain
                    into reclist-receiver.
        else.
          move bapiadsmtp-e_mail to reclist-receiver.
        endif.
        move internet to reclist-rec_type.
      else.
        reclist-receiver = ext_user.
        move dist_list to reclist-rec_type.
      endif.
      append reclist.
    
      call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'
        exporting
          document_data                    = doc_chng
          put_in_outbox                    = 'X'
    *   IMPORTING
    *     SENT_TO_ALL                      =
    *     NEW_OBJECT_ID                    =
        tables
          packing_list                     = objpack
          object_header                    = objhead
          contents_bin                     = objbin
          contents_txt                     = objtxt
    *     CONTENTS_HEX                     =
    *     OBJECT_PARA                      =
    *     OBJECT_PARB                      =
          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
                .
      case sy-subrc.
        when 0.
          message i014 with reclist-receiver.
        when 1.
          message i015 with text-027.
        when 2.
          message i015 with text-028.
        when 3.
          message i015 with text-029.
        when 4.
          message i015 with text-030.
        when 5.
          message i015 with text-031.
        when 6.
          message i015 with text-032.
        when 7.
          message i015 with text-033.
        when 8.
          message i015 with text-036.
        when others.
          message i015 with text-036.
      endcase.
    
    
    endform.                    " send_pdf_in_email
    

    Add a comment
    10|10000 characters needed characters exceeded

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.