SAP ABAP - Sample Program To Convert Smartform To PDF Document & Mail It To The Concerned As An Attachment.

This sample program processes a smartform, converts it into a PDF document and mails it to the approval as an attachment.

SAMPLE PROGRAM:


REPORT ztest_smartform_to_pdf_attach_mail_send.

DATA: it_nfal TYPE nfal OCCURS 0 WITH HEADER LINE.
DATA: fm_name TYPE rs38l_fnam.
DATA: ssfctrlop TYPE ssfctrlop.
DATA: ssfcompop TYPE ssfcompop.
DATA: it_otf_data TYPE ssfcrescl.
DATA: it_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE.
DATA: bin_filesize TYPE i.
DATA: it_pdfdata TYPE TABLE OF tline.
DATA: it_pdf TYPE TABLE OF solisti1.

* MAIL RELATED DECLARATIONS
DATA : g_sent_to_all TYPE sonv-flag,
g_tab_lines TYPE i.

TYPES: t_document_data TYPE sodocchgi1,
t_packing_list TYPE sopcklsti1,
t_attachment TYPE solisti1,
t_body_msg TYPE solisti1,
t_receivers TYPE somlreci1,
t_pdf TYPE tline.

DATA : w_document_data TYPE t_document_data,
w_packing_list TYPE t_packing_list,
w_attachment TYPE t_attachment,
w_body_msg TYPE t_body_msg,
w_receivers TYPE t_receivers,
w_pdf TYPE t_pdf.

DATA: customer TYPE scustom,
bookings TYPE ty_bookings,
connections TYPE ty_connections.
DATA: var_a.

DATA : i_document_data TYPE STANDARD TABLE OF t_document_data,
i_packing_list TYPE STANDARD TABLE OF t_packing_list,
i_attachment TYPE STANDARD TABLE OF t_attachment,
i_body_msg TYPE STANDARD TABLE OF t_body_msg,
i_receivers TYPE STANDARD TABLE OF t_receivers,
i_pdf TYPE STANDARD TABLE OF t_pdf.

PARAMETERS p_mail TYPE char120 OBLIGATORY.


START-OF-SELECTION.

SELECT * FROM nfal INTO TABLE it_nfal UP TO 10 ROWS.

ssfctrlop-no_dialog = 'X'.
ssfctrlop-preview = 'X'.
ssfctrlop-getotf = 'X'.
ssfcompop-tddest = 'LP01'.

GET FUNCTION MODULE NAME FOR GIVEN SMARTFORM
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'SF_EXAMPLE_01'
IMPORTING
fm_name = fm_name.

CALL FUNCTION fm_name
EXPORTING
control_parameters = ssfctrlop
output_options = ssfcompop
customer = customer
bookings = bookings
connections = connections
variable = var_a
IMPORTING
job_output_info = it_otf_data.

* APPENDING THE OTF DATA INTO THE FINAL TABLE
it_otf_final[] = it_otf_data-otfdata[].

* CONVERTING OTF DATA INTO PDF DATA
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = bin_filesize
* bin_file =
TABLES
otf = it_otf_final
lines = it_pdfdata[]
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
OTHERS = 5.

* To send data as email attachment, we need to have a table of SOLISTI1.
* This table contains line size of 255 characters. Below function module
* does the trick of changing the table from X character sized lines into
* any given Y character sized lines.

CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
EXPORTING
line_width_dst = '255'
TABLES
content_in = it_pdfdata[]
content_out = it_pdf[]
EXCEPTIONS
err_line_width_src_too_long = 1
err_line_width_dst_too_long = 2
err_conv_failed = 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.
ELSE.

* SUBJECT OF THE MAIL.
w_document_data-obj_name = 'MAIL_TO_HEAD'.
w_document_data-obj_descr = 'Regarding Mail Program by SAP ABAP'.

* BODY OF THE MAIL
w_body_msg = 'This is body of mail msg.'.
APPEND w_body_msg TO i_body_msg.
CLEAR w_body_msg.

* WRITE PACKING LIST FOR BODY
DESCRIBE TABLE i_body_msg LINES g_tab_lines.
w_packing_list-head_start = 1.
w_packing_list-head_num = 0.
w_packing_list-body_start = 1.
w_packing_list-body_num = g_tab_lines.
w_packing_list-doc_type = 'RAW'.
APPEND w_packing_list TO i_packing_list.
CLEAR w_packing_list.

* WRITE PACKING LIST FOR ATTACHMENT
w_packing_list-transf_bin = 'X'.
w_packing_list-head_start = 1.
w_packing_list-head_num = 1.
w_packing_list-body_start = 1.

DESCRIBE TABLE it_pdf LINES w_packing_list-body_num.
w_packing_list-doc_type = 'PDF'.
w_packing_list-obj_descr = 'PDF Attachment'.
w_packing_list-obj_name = 'PDF_ATTACHMENT'.
w_packing_list-doc_size = w_packing_list-body_num * 255.
APPEND w_packing_list TO i_packing_list.
CLEAR w_packing_list.

* FILL THE DOCUMENT DATA &GET SIZE OF ATTACHMENT
w_document_data-obj_langu = sy-langu.
READ TABLE it_pdf INTO w_pdf INDEX g_tab_lines.
w_document_data-doc_size = ( g_tab_lines - 1 ) * 255 + STRLEN( w_attachment ).

* RECEIVERS LIST.
w_receivers-rec_type = 'U'. "Internet address
w_receivers-receiver = p_mail.
w_receivers-com_type = 'INT'.
w_receivers-notif_del = 'X'.
w_receivers-notif_ndel = 'X'.
APPEND w_receivers TO i_receivers .
CLEAR:w_receivers.


* SEND MAILS TO RECIPIENTS
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = w_document_data
put_in_outbox = 'X'
commit_work = 'X'
IMPORTING
sent_to_all = g_sent_to_all
TABLES
packing_list = i_packing_list
contents_bin = it_pdf
contents_txt = i_body_msg
receivers = i_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.

IF sy-subrc = 0 .
MESSAGE i303(me) WITH 'Mail has been Successfully Sent.'.
ENDIF.
ENDIF.


MORE PROGRAMS ON SAPSCRIPT / SMARTFORMS:

- Downloading Graphics From Any SAPSCRIPTS.

- ... Back To Index On Sapscripts / Smartfroms.




Your suggestions and comments are welcome in this section.


Please mail all your contributions to administrator@abapmadeeasy.com We request you to mention your Name, Designation, Experience & Organization you are working for. Your posts will be verified and posted in this site with your name.

No comments:

Post a Comment