SU01 SCOT
report zsendemail.
"控制变量
data fm_name type rs38l_fnam.
data:control_parameters type ssfctrlop,
l_output_options type ssfcompop.
data job_output_info type ssfcrescl.
data job_output_options type ssfcresop.
*--------------------------------------------------------------------*
"转OTF
data: gt_otf like table of itcoo with header line,
gt_pdf_line like table of tline with header line,
gt_record like table of solisti1 with header line.
data: g_len_in type i, "OTF 文件大小(邮件附件大小)
g_lines_txt type i, "邮件文本行数
g_lines_bin type i. "邮件附件行数
data: g_benfile type xstring. "二进制格式的邮件
data: g_object(50) type c. "邮件主题
data pdf_name type string. "附件名称
data: gt_objpack like table of sopcklsti1 with header line, "邮件内容 正文+附件
gt_objtxt like table of solisti1 with header line, "正文内容
gt_objbin like table of solisti1 with header line, "附件内容
gt_reclist like table of somlreci1 with header line, "收件人
wa_doc_chng type sodocchgi1. "邮件属性
*--------------------------------------------------------------------*
"选择屏幕
parameters:p_email type so_recname obligatory default 'Xiaozhang@…….com'.
*--------------------------------------------------------------------*
start-of-selection.
clear:job_output_options,
job_output_info,
g_len_in,
g_lines_txt,
g_lines_bin,
g_benfile.
clear:gt_otf[], gt_pdf_line[],gt_record[].
"控制变量赋值
control_parameters-getotf = 'X'. "此参数必须,否则不会导出PDF而直接显示smartform
control_parameters-no_close = ''.
control_parameters-no_dialog = 'X'. "不显示打印对话框
"输出参数设置
l_output_options-tddest = 'ZPDF'. "选择打印设备,可选
l_output_options-xsfoutdev = 'ZPDF'. "选择打印设备,可选
l_output_options-tdprinter = 'CNSAPWIN'.
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = 'ZPDF'
importing
fm_name = fm_name
exceptions
no_form = 1
no_function_module = 2
others = 3.
check: sy-subrc = 0.
call function fm_name
exporting
control_parameters = control_parameters
output_options = l_output_options "默认打印选项设置传输
* user_settings = 'X' "是否从用户主记录中获取信息
i_acct_head = l_acct_head "form header data
importing
job_output_info = job_output_info
job_output_options = job_output_options
tables
it_acct_item = lt_acct_item "form item data
exceptions
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
others = 5.
check: sy-subrc = 0.
* convert smartforms to pdf
"将SMARTFOMR转换成PDF格式
call function 'CONVERT_OTF'
exporting
format = 'PDF'
importing
bin_filesize = g_len_in "文件大小
bin_file = g_benfile "16进制的文件数据
tables
otf = job_output_info-otfdata "由SMARTFORM生成的OTF格式的数据
lines = gt_pdf_line "生成的PDF格式的数据
exceptions
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 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.
if g_benfile is not initial.
"将16进制的字符串转换成二进制数据
call function 'SCMS_XSTRING_TO_BINARY'
exporting
buffer = g_benfile
importing
output_length = g_len_in "邮件附件大小
tables
binary_tab = gt_record. "二进制文件数据
endif.
refresh:gt_reclist,gt_objtxt,gt_objbin,gt_objpack.
clear: wa_doc_chng.
"将转换后的文件添加到邮件附件
append lines of gt_record to gt_objbin.
"添加邮件正文
gt_objtxt = ' '.
append gt_objtxt.
gt_objtxt = ' 本邮件由系统自动发出,请勿直接回复!'.
append gt_objtxt.
"邮件正文行数
describe table gt_objtxt lines g_lines_txt.
g_object = '测试邮件!'. "邮件主题
pdf_name = '测试.pdf'. "附件名称
**** Mail Attribute
wa_doc_chng-obj_langu = sy-langu.
wa_doc_chng-obj_name = 'Email'.
wa_doc_chng-expiry_dat = sy-datum + 10.
wa_doc_chng-obj_descr = g_object . " 邮件主题
wa_doc_chng-sensitivty = 'F'.
wa_doc_chng-doc_size = g_lines_txt * 255 + g_len_in. "邮件大小
wa_doc_chng-priority = '1'.
* Main Text
clear gt_objpack-transf_bin.
gt_objpack-head_start = 1.
gt_objpack-head_num = 0.
gt_objpack-body_start = 1.
gt_objpack-body_num = g_lines_txt.
gt_objpack-doc_type = 'RAW'.
append gt_objpack.
* Attachment (pdf-Attachment)
clear :g_lines_bin.
gt_objpack-transf_bin = 'X'.
gt_objpack-head_start = 1.
gt_objpack-head_num = 1.
gt_objpack-body_start = 1.
describe table gt_record lines g_lines_bin.
"此处附件大小应该按照SCMS_XSTRING_TO_BINARY返回值赋值,如果按照g_lines_bin*225计算,可能出现文件损坏情况
gt_objpack-doc_size = g_len_in .
gt_objpack-body_num = g_lines_bin.
gt_objpack-doc_type = 'PDF'.
gt_objpack-obj_name = 'PO'.
gt_objpack-obj_descr = pdf_name. "附件名称
append gt_objpack.
"收件人邮箱
gt_reclist-receiver = p_email.
gt_reclist-rec_type = 'U'.
append gt_reclist.
" 发送邮件
call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'
exporting
document_data = wa_doc_chng " 邮件属性
put_in_outbox = ''
commit_work = 'X'
tables
packing_list = gt_objpack " 邮件内容
contents_bin = gt_objbin " 附件内容(二进制)
contents_txt = gt_objtxt " 邮件内容(直接填入)
receivers = gt_reclist " 收件箱地址
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.
* 考虑系统时延,等待两秒
wait up to 2 seconds.
* 执行邮件立即发送程序
submit rsconn01 with mode = 'INT'
with output = '' " 不显示发送结果
and return.
message 'send mail successful!' type 'S'.
else.
message 'send mail failed!' type 'S'.
endif.