Abap Classical report to PDF using spool and email

REPORT YMARK_ASD.
*source : https://scn.sap.com/thread/879625
PARAMETERp_email1 LIKE somlreci1-receiver,
           p_sender LIKE somlreci1-receiver,
           p_delspl  AS CHECKBOX.



*DATA DECLARATION
DATAgd_recsize TYPE i.


*Spool IDs
TYPESBEGIN OF t_tbtcp.
        INCLUDE STRUCTURE tbtcp.
TYPESEND OF t_tbtcp.
DATAit_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0,
      wa_tbtcp TYPE t_tbtcp.


*Job Runtime Parameters

DATAgd_eventid LIKE tbtcm-eventid,
      gd_eventparm LIKE tbtcm-eventparm,
      gd_external_program_active LIKE tbtcm-xpgactive,
      gd_jobcount LIKE tbtcm-jobcount,
      gd_jobname LIKE tbtcm-jobname,
      gd_stepcount LIKE tbtcm-stepcount,
      gd_error    TYPE sy-subrc,
      gd_reciever TYPE sy-subrc.

DATA:  w_recsize TYPE i.

DATAgd_subject   LIKE sodocchgi1-obj_descr,
      it_mess_bod LIKE solisti1 OCCURS WITH HEADER LINE,
      it_mess_att LIKE solisti1 OCCURS WITH HEADER LINE,
      gd_sender_type     LIKE soextreci1-adr_typ,
      gd_attachment_desc TYPE so_obj_nam,
      gd_attachment_name TYPE so_obj_des.

*Spool to PDF conversions

DATAgd_spool_nr LIKE tsp01-rqident,
      gd_destination LIKE rlgrap-filename,
      gd_bytecount LIKE tst01-dsize,
      gd_buffer TYPE string.

*Binary store for PDF

DATABEGIN OF it_pdf_output OCCURS 0.
        INCLUDE STRUCTURE tline.
DATAEND OF it_pdf_output.


CONSTANTSc_dev LIKE  sy-sysid VALUE 'DEV',
           c_no(1)     TYPE c   VALUE ' ',
           c_device(4TYPE c   VALUE 'LOCL'.


START-OF-SELECTION.

do 10 times.
  WRITE 'Hello World'.
enddo  .
  new-page.
  commit work.
  new-page print off.


  IF sy-batch EQ 'X'.
    PERFORM get_job_details.
    PERFORM obtain_spool_id.
    PERFORM convert_spool_to_pdf.
    PERFORM process_email.

    if p_delspl EQ 'X'.
      PERFORM delete_spool.
    endif.

    IF sy-sysid c_dev.
      wait up to seconds.
      SUBMIT rsconn01 WITH mode   'INT'
                      WITH output 'X'
                      AND RETURN.
    ENDIF.
  ELSE.
    SKIP.
    WRITE:'Program must be executed in background in-order for spool',
            'request to be created.'.
  ENDIF.



*------------------------------------------------------------------------------------
*      FORM obtain_spool_id
*------------------------------------------------------------------------------------
FORM obtain_spool_id.
  CHECK NOT gd_jobname IS INITIAL ).
  CHECK NOT gd_jobcount IS INITIAL ).
  SELECT FROM  tbtcp
                 INTO TABLE it_tbtcp
                 WHERE      jobname     gd_jobname
                 AND        jobcount    gd_jobcount
                 AND        stepcount   gd_stepcount
                 AND        listident   <> '0000000000'
                 ORDER BY   jobname
                            jobcount
                            stepcount.

  READ TABLE it_tbtcp INTO wa_tbtcp INDEX 1.
  IF sy-subrc 0.
    message s004(zddwith gd_spool_nr.
    gd_spool_nr wa_tbtcp-listident.
    MESSAGE s004(zddWITH gd_spool_nr.
  ELSE.
    MESSAGE s005(zdd).
  ENDIF.
ENDFORM.

*------------------------------------------------------------------------------------
*      FORM get_job_details
*------------------------------------------------------------------------------------
FORM get_job_details.
*Get current job details

  CALL FUNCTION 'GET_JOB_RUNTIME_INFO'
       IMPORTING
            eventid                 gd_eventid
            eventparm               gd_eventparm
            external_program_active gd_external_program_active
            jobcount                gd_jobcount
            jobname                 gd_jobname
            stepcount               gd_stepcount
       EXCEPTIONS
            no_runtime_info         1
            OTHERS                  2.
ENDFORM.

*------------------------------------------------------------------------------------
*      FORM convert_spool_to_pdf
*------------------------------------------------------------------------------------
FORM convert_spool_to_pdf.

  CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
       EXPORTING
            src_spoolid              gd_spool_nr
            no_dialog                c_no
            dst_device               c_device
       IMPORTING
            pdf_bytecount            gd_bytecount
       TABLES
            pdf                      it_pdf_output
       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.



  CHECK sy-subrc 0.

*Transfer the 132-long strings to 255-long strings

  LOOP AT it_pdf_output.
    TRANSLATE it_pdf_output USING ' ~'.
    CONCATENATE gd_buffer it_pdf_output INTO gd_buffer.
  ENDLOOP.

  TRANSLATE gd_buffer USING '~ '.

  DO.
    it_mess_att gd_buffer.
    APPEND it_mess_att.
    SHIFT gd_buffer LEFT BY 255 PLACES.
    IF gd_buffer IS INITIAL.
      EXIT.
    ENDIF.
  ENDDO.
ENDFORM.

*------------------------------------------------------------------------------------
*      FORM process_email
*------------------------------------------------------------------------------------
FORM process_email.
  DESCRIBE TABLE it_mess_att LINES gd_recsize.
  CHECK gd_recsize > 0.
  PERFORM send_email USING p_email1.
* perform send_email using p_email2.
ENDFORM.

*------------------------------------------------------------------------------------
*      FORM send_email
*------------------------------------------------------------------------------------
* -->  p_email
*------------------------------------------------------------------------------------

FORM send_email USING p_email.
  CHECK NOT p_email IS INITIAL ).
  REFRESH it_mess_bod.

*Default subject matter
  gd_subject         'Subject'.
  gd_attachment_desc 'Attachname'.
 CONCATENATE 'attach_name' ' ' INTO gd_attachment_name.

  it_mess_bod        'Message Body text, line 1'.
  APPEND it_mess_bod.
  it_mess_bod        'Message Body text, line 2...'.
  APPEND it_mess_bod.


*If no sender specified - default blank
  IF p_sender EQ space.
    gd_sender_type  space.
  ELSE.
    gd_sender_type  'INT'.
  ENDIF.

*Send file by email as .xls speadsheet
  PERFORM send_file_as_email_attachment
                               tables it_mess_bod
                                      it_mess_att
                                using p_email
                                      'Example .xls documnet attachment'
                                      'PDF'
                                      gd_attachment_name
                                      gd_attachment_desc
                                      p_sender
                                      gd_sender_type
                             changing gd_error
                                      gd_reciever.
ENDFORM.


*------------------------------------------------------------------------------------
*      FORM delete_spool
*------------------------------------------------------------------------------------
FORM delete_spool.
  DATAld_spool_nr TYPE tsp01_sp0r-rqid_char.

  ld_spool_nr gd_spool_nr.

  CHECK p_delspl <> c_no.
  CALL FUNCTION 'RSPO_R_RDELETE_SPOOLREQ'
       EXPORTING
            spoolid ld_spool_nr.
ENDFORM.

*&------------------------------------------------------------------------------------
*&      Form  SEND_FILE_AS_EMAIL_ATTACHMENT
*&------------------------------------------------------------------------------------
*      Send email
*------------------------------------------------------------------------------------
FORM send_file_as_email_attachment tables it_message
                                          it_attach
                                    using p_email
                                          p_mtitle
                                          p_format
                                          p_filename
                                          p_attdescription
                                          p_sender_address
                                          p_sender_addres_type
                                 changing p_error
                                          p_reciever.


  DATAld_error    TYPE sy-subrc,
        ld_reciever TYPE sy-subrc,
        ld_mtitle LIKE sodocchgi1-obj_descr,
        ld_email LIKE  somlreci1-receiver,
        ld_format TYPE  so_obj_tp ,
        ld_attdescription TYPE  so_obj_nam ,
        ld_attfilename TYPE  so_obj_des ,
        ld_sender_address LIKE  soextreci1-receiver,
        ld_sender_address_type LIKE  soextreci1-adr_typ,
        ld_receiver LIKE  sy-subrc.

data:   t_packing_list like sopcklsti1 occurs with header line,
        t_contents like solisti1 occurs with header line,
        t_receivers like somlreci1 occurs with header line,
        t_attachment like solisti1 occurs with header line,
        t_object_header like solisti1 occurs with header line,
        w_cnt type i,
        w_sent_all(1type c,
        w_doc_data like sodocchgi1.

  ld_email   p_email.
  ld_mtitle p_mtitle.
  ld_format              p_format.
  ld_attdescription      p_attdescription.
  ld_attfilename         p_filename.
  ld_sender_address      p_sender_address.
  ld_sender_address_type p_sender_addres_type.


*Fill the document data.
  w_doc_data-doc_size 1.


*Populate the subject/generic message attributes
  w_doc_data-obj_langu sy-langu.
  w_doc_data-obj_name  'SAPRPT'.
  w_doc_data-obj_descr ld_mtitle .
  w_doc_data-sensitivty 'F'.

*Fill the document data and get size of attachment
  CLEAR w_doc_data.
  READ TABLE it_attach INDEX w_cnt.
  w_doc_data-doc_size =
     w_cnt 255 STRLENit_attach ).
  w_doc_data-obj_langu  sy-langu.
  w_doc_data-obj_name   'SAPRPT'.
  w_doc_data-obj_descr  ld_mtitle.
  w_doc_data-sensitivty 'F'.
  CLEAR t_attachment.
  REFRESH t_attachment.
  t_attachment[] it_attach[].


*Describe the body of the message
  CLEAR t_packing_list.
  REFRESH t_packing_list.
  t_packing_list-transf_bin space.
  t_packing_list-head_start 1.
  t_packing_list-head_num 0.
  t_packing_list-body_start 1.
  DESCRIBE TABLE it_message LINES t_packing_list-body_num.
  t_packing_list-doc_type 'RAW'.
  APPEND t_packing_list.

*Create attachment notification
  t_packing_list-transf_bin 'X'.
  t_packing_list-head_start 1.
  t_packing_list-head_num   1.
  t_packing_list-body_start 1.

  DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
  t_packing_list-doc_type   =  ld_format.
  t_packing_list-obj_descr  =  ld_attdescription.
  t_packing_list-obj_name   =  ld_attfilename.
  t_packing_list-doc_size   =  t_packing_list-body_num * 255.
  APPEND t_packing_list.

*Add the recipients email address

  CLEAR t_receivers.
  REFRESH t_receivers.
  t_receivers-receiver ld_email.
  t_receivers-rec_type 'U'.
  t_receivers-com_type 'INT'.
  t_receivers-notif_del 'X'.
  t_receivers-notif_ndel 'X'.
  APPEND t_receivers.

  CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
       EXPORTING
            document_data              w_doc_data
            put_in_outbox              'X'
            sender_address             ld_sender_address
            sender_address_type        ld_sender_address_type
            commit_work                'X'
       IMPORTING
            sent_to_all                w_sent_all
       TABLES
            packing_list               t_packing_list
            contents_bin               t_attachment
            contents_txt               it_message
            receivers                  t_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.


*Populate zerror return code
  ld_error sy-subrc.


*Populate zreceiver return code
  LOOP AT t_receivers.
    ld_receiver t_receivers-retrn_code.
  ENDLOOP.
ENDFORM.
0 comments:

Post a Comment

message

Labels

NuffNang

Search google

Blog Archive

My Blog List

Twitter

Message

Followers