Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 9159

(OTFSPOOL to PDF + MAIL) Blank PDF Provided

$
0
0

Hi Experts,


I have a blank PDF provided by SAP from an OTFSPOOL when I use the sample code of Wiki.SAP.

 

I am using a SAP sample code posted on WIKI.SCN.SAP.COM and I adapted it with 2 basic modifications (in red below) :

 

*&---------------------------------------------------------------------*

*& Report  ZSCLI_SEND_MAIL_FROM_SPOOLPDF

*&

*&---------------------------------------------------------------------*

*&    Converts spool request into PDF document and emails it to        *

*&    recipicant.                                                      *

*&                                                                     *

*&    Execution                                                        *

*&    ---------                                                        *

*&    This program must be run as a background job in-order            *

*&    for the write commands to create a Spool request rather          *

*&    than be displayed on screen                                      *

*&---------------------------------------------------------------------*

 

 

REPORT  zscli_send_mail_from_spoolpdf.

 

PARAMETER: p_email1   LIKE somlreci1-receiver

                                     DEFAULT 'rachid.roughi@xxxxxxxx.fr',

            p_sender   LIKE somlreci1-receiver

                                     DEFAULT 'rachid.roughi@xxxxxxxxx.fr',

            p_delspl   AS CHECKBOX,

           p_spool    TYPE rqident  DEFAULT'14502'

            .

 

*DATA DECLARATION

DATA: gd_recsize TYPE i.

 

* Spool IDs

TYPES: BEGIN OF t_tbtcp.

         INCLUDE STRUCTURE tbtcp.

TYPES: END OF t_tbtcp.

DATA: it_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0,

       wa_tbtcp TYPE t_tbtcp.

 

* Job Runtime Parameters

DATA: gd_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.

 

DATAw_recsize TYPE i.

 

DATA: gd_subject   LIKE sodocchgi1-obj_descr,

       it_mess_bod LIKE solisti1 OCCURS 0 WITH HEADER LINE,

       it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,

       ls_mess_att LIKE solisti1 ,

       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

DATA: gd_spool_nr LIKE tsp01-rqident,

       gd_destination LIKE rlgrap-filename,

       gd_bytecount LIKE tst01-dsize,

       gd_buffer TYPE string.

 

* Binary store for PDF

DATA: BEGIN OF it_pdf_output OCCURS 0.

         INCLUDE STRUCTURE tline.

DATA: END OF it_pdf_output.

DATA ls_pdf_output LIKE LINE OF it_pdf_output .

CONSTANTS: c_dev LIKE  sy-sysid VALUE 'DEV',

            c_no(1)     TYPE c   VALUE ' ',

            c_device(4) TYPE c   VALUE 'LOCL'.

 

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

*START-OF-SELECTION.

START-OF-SELECTION.

 

   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 5 SECONDS.

     SUBMIT rsconn01 WITH mode   = 'INT'

                     WITH output = 'X'

                     AND RETURN.

   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(zdd) WITH gd_spool_nr.

     gd_spool_nr = wa_tbtcp-listident.

     MESSAGE s004(zdd) WITH gd_spool_nr.

   ELSE.

     MESSAGE s005(zdd).

   ENDIF.

ENDFORM.                    "obtain_spool_id

 

*---------------------------------------------------------------------*

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

 

*---------------------------------------------------------------------*

*    FORM convert_spool_to_pdf                                     *

*---------------------------------------------------------------------*

FORM convert_spool_to_pdf.

 

   gd_spool_nr = p_spool  .

 

" CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF' " OLD

   CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'  " <== Because my spool is a SMARTFORM

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

 

   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.                    "convert_spool_to_pdf

 

*---------------------------------------------------------------------*

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

 

*---------------------------------------------------------------------*

*    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 = 'Pièce jointe'.

*  CONCATENATE 'attach_name' ' ' INTO gd_attachment_name.

   it_mess_bod        = 'Madame, Monsieur,'.

   APPEND it_mess_bod.

   it_mess_bod        = 'Vous venez de recevoir cette pièce jointe.'.

   CONCATENATE it_mess_bod p_spool INTO it_mess_bod SEPARATED BY space.

   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

                                       'Mail from SAP'

                                       'PDF'

                                       gd_attachment_name

                                       gd_attachment_desc

                                       p_sender

                                       gd_sender_type

                              CHANGING gd_error

                                       gd_reciever.

ENDFORM.                    "send_email

 

*---------------------------------------------------------------------*

*    FORM delete_spool                                             *

*---------------------------------------------------------------------*

FORM delete_spool.

   DATA: ld_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.                    "delete_spool

 

*---------------------------------------------------------------------*

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

 

   DATA: ld_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 0 WITH HEADER LINE,

           t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,

           t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,

           t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,

           t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,

           w_cnt TYPE i,

           w_sent_all(1) TYPE 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 - 1 ) * 255 + strlen( it_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.

   SUBMIT RSCONN01 WITH TYPE_REC = 'INT'

   EXPORTING LIST TO MEMORY

     AND RETURN.

ENDFORM.                    "send_file_as_email_attachment

 

 

This is my SPOOL:

 

Sans titre.jpg

 

 

In SOST, I played many times the program with filling or not my Smartforms and I have:

 

3.jpg

 

 

Do you know, why I have a BLANK PDF provided ?

 

Thank you very much.

Rachid.


Viewing all articles
Browse latest Browse all 9159

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>