ABAP——SmartForms转pdf后发送邮件
效果:
代码:(参考SAP系统程序BCS_EXAMPLE_8案例)
PARAMETERS: p_mail TYPE ad_smtpadr OBLIGATORY. DATA: go_send_request TYPE REF TO cl_bcs, "请求 go_document TYPE REF TO cl_document_bcs, "文档 go_recipient TYPE REF TO if_recipient_bcs, "收件人 go_bcs_exception TYPE REF TO cx_bcs. "异常 DATA: gt_main_text TYPE bcsy_text, "主要内容 gt_pdf_content TYPE solix_tab, gv_pdf_size TYPE so_obj_len, gv_pdf_xstring TYPE xstring, gv_sent_to_all TYPE os_boolean. START-OF-SELECTION. "Smartforms转换pdf PERFORM convert_sf_to_pdf. "邮件发送pdf PERFORM send_mail. END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form CONVERT_SF_TO_PDF *&---------------------------------------------------------------------* * Smartforms转换pdf * 1) smartforms假脱机打印 * 2) 获取假脱机请求的属性 * 3) 根据文档类型将假脱机请求转换为PDF *----------------------------------------------------------------------* FORM convert_sf_to_pdf . DATA: ls_ssfctrlop TYPE ssfctrlop, ls_ssfcrescl TYPE ssfcrescl, ls_sscompop TYPE ssfcompop, ls_spoolid TYPE rspoid, lv_fnam TYPE rs38l_fnam, lv_spoolid TYPE rqident. DATA: lt_attr TYPE TABLE OF rspoattr, ls_rq TYPE tsp01, lv_bin_size TYPE i. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = 'ZPPS999' IMPORTING fm_name = lv_fnam EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ls_ssfctrlop-no_dialog = 'X'. ls_ssfctrlop-langu = sy-langu. ls_sscompop-tddest = 'FPW1'. ls_sscompop-tdnewid = 'X'. CALL FUNCTION lv_fnam EXPORTING control_parameters = ls_ssfctrlop output_options = ls_sscompop user_settings = ' ' IMPORTING job_output_info = ls_ssfcrescl EXCEPTIONS formatting_error = 1 internal_error = 2 send_error = 3 user_canceled = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. LOOP AT ls_ssfcrescl-spoolids INTO ls_spoolid. "获取假脱机请求的属性 CALL FUNCTION 'RSPO_GET_ATTRIBUTES_SPOOLJOB' EXPORTING rqident = ls_spoolid IMPORTING rq = ls_rq TABLES attributes = lt_attr EXCEPTIONS no_such_job = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE e126(po) WITH ls_spoolid. ELSE. "根据文档类型将假脱机请求转换为PDF IF ls_rq-rqdoctype = 'OTF' OR ls_rq-rqdoctype = 'SMART'. CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF' EXPORTING src_spoolid = ls_spoolid no_dialog = 'X' pdf_destination = 'X' no_background = 'X' IMPORTING pdf_bytecount = lv_bin_size bin_file = gv_pdf_xstring 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. IF sy-subrc <> 0. MESSAGE e712(po) WITH sy-subrc 'CONVERT_OTFSPOOLJOB_2_PDF'. ENDIF. ELSEIF ls_rq-rqdoctype = 'LIST'. CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF' EXPORTING src_spoolid = ls_spoolid no_dialog = 'X' pdf_destination = 'X' no_background = 'X' IMPORTING pdf_bytecount = lv_bin_size bin_file = gv_pdf_xstring 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. IF sy-subrc <> 0. MESSAGE e712(po) WITH sy-subrc 'CONVERT_ABAPSPOOLJOB_2_PDF'. ENDIF. ELSE. MESSAGE e789(po) WITH ls_rq-rqdoctype. ENDIF. ENDIF. gv_pdf_size = lv_bin_size. "列印ID lv_spoolid = ls_spoolid. lv_spoolid = |{ lv_spoolid ALPHA = IN }|. "删除列印请求 CALL FUNCTION 'RSPO_R_RDELETE_SPOOLREQ' EXPORTING spoolid = lv_spoolid. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form SEND_MAIL *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM send_mail . TRY. * -------- CREATE persistent send request ------------------------ go_send_request = cl_bcs=>create_persistent( ). * -------- create and set document ------------------------------- gt_pdf_content = cl_document_bcs=>xstring_to_solix( gv_pdf_xstring ). * append 'Hello world!' to main_text. "#EC NOTEXT * 邮件内容 APPEND 'Dear Mr and Miss:' TO gt_main_text. APPEND '' TO gt_main_text. APPEND ' 这是一封测试邮件,请勿回复.' TO gt_main_text. APPEND '' TO gt_main_text. APPEND 'Thanks.' TO gt_main_text. go_document = cl_document_bcs=>create_document( i_type = 'RAW' i_text = gt_main_text i_subject = '这是一封pdf测试邮件' ). go_document->add_attachment( i_attachment_type = 'PDF' i_attachment_subject = 'XX合同' i_attachment_size = gv_pdf_size i_att_content_hex = gt_pdf_content ). * add document object to send request go_send_request->set_document( go_document ). * --------- add recipient (e-mail address) ----------------------- * create recipient object go_recipient = cl_cam_address_bcs=>create_internet_address( p_mail ). * add recipient object to send request go_send_request->add_recipient( go_recipient ). * ---------- send document --------------------------------------- gv_sent_to_all = go_send_request->send( i_with_error_screen = 'X' ). COMMIT WORK. IF gv_sent_to_all IS INITIAL. MESSAGE i500(sbcoms) WITH p_mail. ELSE. MESSAGE s022(so). ENDIF. * ------------ exception handling ---------------------------------- * replace this rudimentary exception handling with your own one !!! CATCH cx_bcs INTO go_bcs_exception. MESSAGE i865(so) WITH go_bcs_exception->error_type. ENDTRY. ENDFORM.
木叶飞舞之处,火亦生生不息