Sunday, December 19, 2010
REPORT  ztest_smartform.
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
*--------------------------------------------------------*
"Variables
DATA :
g_sent_to_all   TYPE sonv-flag,
g_tab_lines     TYPE i.
"Types
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.
"Workareas
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.
"Internal Tables
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.
*START-OF-SELECTION.
START-OF-SELECTION.
"select data
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 = 'ZTEST_SMARTFORM'
IMPORTING
fm_name  = fm_name.
"Call Smartform function module.
CALL FUNCTION fm_name
EXPORTING
control_parameters = ssfctrlop
output_options     = ssfcompop
IMPORTING
job_output_info    = it_otf_data
TABLES
it_nfal            = it_nfal.

************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.
REFRESH it_pdf[].

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

"Function module to send mail 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.

0 comments:

Post a Comment

Your useful comments, suggestions are appreciated.Your comments are moderated.

Followers

Contact Form

Name

Email *

Message *

Web Dynpro ABAP Book

An SAP Consultant

Follow US


Want to Contribute ?

If you are interested in writing about the new stuff you learn everyday while working, please write to the.sap.consultants@gmail.com.

Click on Contribution for more details.