Sending PO pdf as mail/fax to vendor address.
1. First configure o/p type for external send option.
2. Condition records should be maintained as per external send.
3. In driver program handle logic based on nast-nacha = '5'. ('5' is for external send)
4. While calling smart form generate OTF data.
5. Use FM 'SO_NEW_DOCUMENT_ATT_SEND_API1' for external send.
6. For sending PDF as an attachment always use 'RAW' and 'PDF' document type together.
7. To get acknowledgement for Faxing with lotus note use format 'FX, REF="------------"'
8. Other approach is using SAPCONNECT directly by passing sender and receiver
data to form with SCOT setting.
*Set the print Parameters
IF nast-nacha = '1' . "[+]PA20110715
PERFORM set_print_param USING ls_addr_key
CHANGING ls_control_param
ls_composer_param
ls_recipient
ls_sender
ent_retco.
ENDIF.*code added by +PAHIRE on 28.10.2010
*ECDK900640
DATA: lwa_ekko TYPE ekko.
DATA: lv_adrnr TYPE ad_addrnum, "vendor_addressnumber
lv_syucomm TYPE syucomm,
lv_smtp_addr TYPE ad_smtpadr, "email address fo vendor
lv_name1 TYPE name1_gp, "vendor name1
lv_str TYPE so_obj_des,
lv_str1 TYPE so_obj_des,
lv_str2 TYPE so_obj_nam,
lv_str4 TYPE so_obj_des.
DATA: lv_mail_rec_obj TYPE swotobjid,
lv_mail_sen_obj TYPE swotobjid,
lv_mail_app_obj TYPE swotobjid,
lv_cont_par TYPE ssfctrlop,
lv_output TYPE ssfcompop.
CONSTANTS: lc_printer TYPE char10 VALUE 'PRINTER',
lc_telefax TYPE char10 VALUE 'TELEFAX',
lc_email TYPE char04 VALUE 'MAIL',
lc_x TYPE char01 VALUE 'X',
lc_a TYPE char01 VALUE 'A'.*BOC BY PA20110728
DATA: lit_otf_data TYPE ssfcrescl,
lit_otf_final TYPE STANDARD TABLE OF itcoo,
bin_filesize TYPE i,
lv_binfile TYPE xstring,
lit_pdfdata TYPE TABLE OF tline,
lit_pdf TYPE soli_tab,
lit_pdf1 TYPE solix_tab,
lv_pdflines TYPE i,
lit_attachments TYPE TABLE OF solisti1,
lit_packing_list TYPE TABLE OF sopcklsti1,
lwa_packing_list TYPE sopcklsti1,
lwa_doc_attr TYPE sodocchgi1,
lit_message TYPE TABLE OF solisti1,
lwa_message TYPE solisti1,
lit_recipients TYPE TABLE OF somlreci1,
lwa_recipient TYPE somlreci1,
f_line TYPE i,
lwa_sf_rec TYPE swotobjid,
lwa_sender TYPE swotobjid.
CONSTANTS: gc_docty_pdf TYPE so_obj_tp VALUE 'PDF',
gc_docty_raw TYPE so_obj_tp VALUE 'RAW',
gc_flag_set TYPE char1 VALUE 'X',
lc_objname TYPE char12 VALUE 'PO_Mail'.*EOC BY PA20110728
*Get Vendor email id
CLEAR: lv_adrnr,lv_smtp_addr.
SELECT SINGLE adrnr
FROM lfa1
INTO lv_adrnr
WHERE lifnr EQ nast-parnr.
IF sy-subrc EQ 0.
SELECT SINGLE smtp_addr
FROM adr6
INTO lv_smtp_addr
WHERE addrnumber EQ lv_adrnr.
ENDIF.* Get vendor name
*[+]PA20110720
SELECT SINGLE name1
FROM lfa1
INTO lv_name1
WHERE lifnr = l_doc-xekko-lifnr.*Get the Smart Form name.
IF NOT tnapr-sform IS INITIAL.
lf_formname = tnapr-sform.
ELSE.
MESSAGE e001(/smba0/aa_ssfcompose).
ENDIF.* Determine smartform function module for purchase document
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = lf_formname
IMPORTING
fm_name = lf_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
* error handling
ent_retco = sy-subrc.
IF sy-subrc = 1.
MESSAGE e001(/smba0/aa_ssfcompose).
ENDIF.
IF sy-subrc = 2.
MESSAGE e002(/smba0/aa_ssfcompose) WITH tnapr-sform.
ENDIF.
PERFORM protocol_update_i.
ENDIF.* IF lv_smtp_addr IS NOT INITIAL.
* Prepare the output & Container parameters according to Medium type
IF nast-nacha = '1'. "If Output Medium is Printer
lv_cont_par-device = lc_printer.
lv_cont_par-no_dialog = lc_x.
lv_cont_par-preview = lc_x.
lv_output-tddest = nast-ldest. "Spool: Output device
lv_output-tdimmed = lc_x. "Print parameters, print immediately
lv_output-tdnewid = lc_x. "Print parameters, new spool request
ELSEIF nast-nacha = '2'. "If Output Medium is Fax
lv_cont_par-device = lc_telefax.
ELSEIF nast-nacha = '5'. "If Output Medium is External Mail
lv_output-tddest = nast-ldest. "Spool: Output device
* lv_output-tdimmed = lc_x. "Print parameters, print immediately "[-]PA20110715
* lv_output-tdnewid = lc_x. "Print parameters, new spool request "[-]PA20110728
lv_cont_par-no_dialog = lc_x.
lv_cont_par-preview = lc_x.
lv_cont_par-getotf = lc_x.
CONCATENATE l_doc-xekko-ebeln l_doc-xekko-ekgrp lv_name1 "[+]PA20110720
INTO lv_str SEPARATED BY space.
CONCATENATE 'FX,REF="' lv_str '"' INTO lv_str1. "[+]PA20110720
CONCATENATE 'PO_' l_doc-xekko-ebeln INTO lv_str4.
CONDENSE lv_str4.
lv_str2 = l_doc-xekko-ebeln.* lv_cont_par-device = lc_email.
IF sy-ucomm EQ 'PREVOUTPUT'.
lv_cont_par-device = lc_printer.
lv_output-tdnewid = lc_x.
lv_cont_par-getotf = ''.
CALL FUNCTION lf_fm_name
EXPORTING
archive_index = toa_dara
archive_parameters = arc_params
control_parameters = lv_cont_par "ls_control_param
mail_recipient = lwa_sf_rec "ls_recipient
mail_sender = lwa_sender "ls_sender
output_options = lv_output "ls_composer_param
is_ekko = l_doc-xekko
user_settings = ' ' "Disable User Printer
is_pekko = l_doc-xpekko
is_nast = nast
iv_from_mem = l_from_memory
iv_druvo = iv_druvo
iv_xfz = iv_xfz
TABLES
it_ekpo = l_doc-xekpo[]
it_ekpa = l_doc-xekpa[]
it_pekpo = l_doc-xpekpo[]
it_eket = l_doc-xeket[]
it_tkomv = l_doc-xtkomv[]
it_ekkn = l_doc-xekkn[]
it_ekek = l_doc-xekek[]
it_komk = l_xkomk[]
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
ent_retco = sy-subrc.
PERFORM protocol_update_i.* get SmartForm protocoll and store it in the NAST protocoll
PERFORM add_smfrm_prot.
ENDIF.
ENDIF.* lv_output-bcs_commit = lc_x.
* lv_output-bcs_status = lc_a.
* lv_output-tdiexit = lc_x.
ENDIF.*ECDK900640
*End of addition by +PAHIRE
IF sy-ucomm eq ''.*>>>>> Change of Parameters <<<<<<<<<<<<<<<<<<<<<<<
CALL FUNCTION lf_fm_name
EXPORTING
archive_index = toa_dara
archive_parameters = arc_params
control_parameters = lv_cont_par "ls_control_param
mail_recipient = lwa_sf_rec "ls_recipient
mail_sender = lwa_sender "ls_sender
output_options = lv_output "ls_composer_param
is_ekko = l_doc-xekko
user_settings = ' ' "Disable User Printer
is_pekko = l_doc-xpekko
is_nast = nast
iv_from_mem = l_from_memory
iv_druvo = iv_druvo
iv_xfz = iv_xfz
IMPORTING
job_output_info = lit_otf_data
TABLES
it_ekpo = l_doc-xekpo[]
it_ekpa = l_doc-xekpa[]
it_pekpo = l_doc-xpekpo[]
it_eket = l_doc-xeket[]
it_tkomv = l_doc-xtkomv[]
it_ekkn = l_doc-xekkn[]
it_ekek = l_doc-xekek[]
it_komk = l_xkomk[]
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
ent_retco = sy-subrc.
PERFORM protocol_update_i.* get SmartForm protocoll and store it in the NAST protocoll
PERFORM add_smfrm_prot.
ELSE.
lit_otf_final[] = lit_otf_data-otfdata[].
" Converting OTF data into bin_file we dont need it_otf_final
" and it_pdfdata[] we just need lv_binfile.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = gc_docty_pdf
IMPORTING
bin_filesize = bin_filesize
bin_file = lv_binfile
TABLES
otf = lit_otf_final
lines = lit_pdfdata[]
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
OTHERS = 5.
" Converting the bin_file to PDF to solix type.
CALL METHOD cl_bcs_convert=>xstring_to_solix
EXPORTING
iv_xstring = lv_binfile
RECEIVING
et_solix = lit_pdf1[].
" Changing the contents into solist1 since this is supported
" for Email function module.
CALL FUNCTION 'SO_SOLIXTAB_TO_SOLITAB'
EXPORTING
ip_solixtab = lit_pdf1[]
IMPORTING
ep_solitab = lit_pdf[].
DESCRIBE TABLE lit_pdf LINES lv_pdflines.
APPEND LINES OF lit_pdf TO lit_attachments.
REFRESH: lit_pdf1[],lit_pdf[].*Body of mail
lwa_message = text-002.
APPEND lwa_message TO lit_message.*Packing list for RAW(for different subject and attachment name)
CLEAR lwa_packing_list.
lwa_packing_list-head_start = 1.
lwa_packing_list-head_num = 1.
lwa_packing_list-body_start = 1.
lwa_packing_list-body_num = 1.
lwa_packing_list-doc_type = gc_docty_raw.
APPEND lwa_packing_list TO lit_packing_list.*Packing list for PDF
CLEAR lwa_packing_list.
lwa_packing_list-transf_bin = gc_flag_set.
lwa_packing_list-head_start = 1.
lwa_packing_list-head_num = 1.
lwa_packing_list-body_start = 1.
lwa_packing_list-body_num = lv_pdflines.
lwa_packing_list-doc_type = gc_docty_pdf.
lwa_packing_list-obj_descr = lv_str4.
lwa_packing_list-obj_name = lv_str2.
lwa_packing_list-obj_langu = sy-langu.
lwa_packing_list-doc_size = lwa_packing_list-body_num * 255.
APPEND lwa_packing_list TO lit_packing_list.
f_line = lwa_packing_list-body_start + lwa_packing_list-body_num.
CLEAR lwa_packing_list.*Document attributes
lwa_doc_attr-obj_name = lc_objname.
lwa_doc_attr-obj_descr = lv_str1.
lwa_doc_attr-obj_langu = sy-langu.
lwa_doc_attr-sensitivty = 'F'. "functional message
*Get receiver list
lwa_recipient-rec_type = 'U'.
lwa_recipient-receiver = lv_smtp_addr.
lwa_recipient-com_type = 'INT'.
APPEND lwa_recipient TO lit_recipients.*FM to send external mail
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = lwa_doc_attr
put_in_outbox = gc_flag_set* commit_work = 'X'
TABLES
packing_list = lit_packing_list
contents_bin = lit_attachments
contents_txt = lit_message
receivers = lit_recipients
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 NE 0.
PERFORM protocol_update_i.* get SmartForm protocoll and store it in the NAST protocoll
PERFORM add_smfrm_prot.
ELSEIF sy-subrc = 0.
ENDIF.
ENDIF.
CLEAR it_otf_data.
ENDIF.