点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我正在将我的智能表单作为pdf附件发送给特定人的电子邮件id。
带有pdf附件的邮件已成功发送
但是从邮件附件中检索pdf时我遇到了问题。
pdf文件无法打开,它已损坏.......?
我没有找到任何适当的原因,尽管我怀疑pdf附件的文件大小可能有错误,所以当我再次发送它时,我仍然更改了大小,但它以损坏的格式接收,无法打开。
我还检查了tcode'SOST'(SAP连接传输请求),当我选择显示文档时,我的pdf文件也损坏了
您能否提出一些有用的观点....
我正在使用以下代码...........
数据:v_language类型sflangu值'E',
v_e_devtype类型rspoptype。
数据:p_sender类型somlreci1-receiver VALUE 'an_email @ address.com '。
数据:w_sent_all(1)TYPE c。
数据:t_packing_list像sopcklsti1一样使用标题行占用了0,
ld_attfilename类型为so_obj_des。
数据:类似于solisti1的it_mess_att出现在标题行中的0,
t_attachment像solisti1一样发生在标题行中的0。
数据:t_receivers像somlreci1一样,发生了0行,带有标题行,
IT_MESS TYPE STRING,
w_doc_data类似于sodocchgi1,
W_CNT TYPE I。
数据:tb_pdf255类型so_text255发生0,
gd_subject类似于sodocchgi1-obj_descr。
数据:T_BUFFER类型STRING。
数据:t_otf数据类型为ssfcrescl。
数据:t_otf类型的itcoo在标题行出现0,
GD_BUFFER TYPE STRING,
it_mess_bod喜欢solisti1出现0行,且带有标题行。
数据:开始出现MESSTAB发生0,
MESS TYPE STRING,
标志TYPE c,
末了。
数据:带有标题行的MESSTAB的T_MESSTAB像表。
数据:NUMBER(4)个C型值1,
w_bin_filesize类型为i。
调用函数" CONVERT_OTF"
导出
格式='PDF'
max_linewidth = 132
* ARCHIVE_INDEX =''
导入
bin_filesize = w_bin_filesize
表格
otf = t_otf
线=线
例外
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
其他= 4
。
如果sy-subrc <> 0。
*消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
*带SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
endif。
在LINES循环。
使用'〜'来翻译行。
将gd_buffer的行并入gd_buffer。
结束循环。
使用'〜'转换gd_buffer。
做。
it_mess_att = gd_buffer。
附加it_mess_att。
移位gd_buffer保留255个位置。
如果gd_buffer是INITIAL。
退出。
ENDIF。
ENDDO。
** w_doc_data-doc_size = 1。
***填充主题/常规消息属性
** w_doc_data-obj_langu = sy-langu。
** w_doc_data-obj_name ='SAPRPT'。
** w_doc_data-obj_descr ='薪水单'。
** w_doc_data-sensitiveivty ='F'。
*填写文档数据并获取附件大小
清除w_doc_data。
**描述表IT_MESS_ATT LINES W_CNT。
读取表IT_MESS_ATT索引w_cnt。
*描述表it_mess_att线SY-TFILL。
w_doc_data-doc_size =
** SY-TFILL * 255 + 62。
(w_cnt-1)* 255 + STRLEN(IT_MESS_ATT)。
w_doc_data-obj_langu = sy-langu。
w_doc_data-obj_name ='SAPRPT'。
w_doc_data-obj_descr ='工资单'。
**将"发票" WA_VBRK2-VBELN合并到W_DOC_DATA-OBJ_DESCR中,并以空格分隔。 "主题文字
w_doc_data-sensitiveivty ='F'。
清除t_attachment。
刷新t_attachment。
t_attachment [] = IT_MESS_ATT []。
it_mess_bod ='嗨,'。 "邮件正文中的文本
附加it_mess_bod。
IT_MESS_BOD =''。
附加it_mess_bod。
IT_MESS_BOD ='请找到所附的工资单。'
附加it_mess_bod。
IT_MESS_BOD =''。
附加it_mess_bod。
IT_MESS_BOD ='问候'。
附加it_mess_bod。
IT_MESS_BOD ='ABC_LTD'。
附加it_mess_bod。
清除t_packing_list。
刷新t_packing_list。
t_packing_list-transf_bin =空格。 "邮件正文参数
t_packing_list-head_start = 1。
t_packing_list-head_num = 1。
t_packing_list-body_start = 1。
描述表it_mess_BOD LINES t_packing_list-body_num。
t_packing_list-doc_type ='RAW'。
APPEND t_packing_list。
t_packing_list-transf_bin ='X'。 "附件信息
t_packing_list-head_start = 1。
t_packing_list-head_num = 1。
t_packing_list-body_start = 1。
描述表t_attachment行t_packing_list-body_num。
t_packing_list-doc_type ='PDF'。
**将"发票" WA_VBRK2-VBELN合并到t_packing_list-obj_descr中,并以空格分隔。
t_packing_list-obj_descr ='工资单附件'。
t_packing_list-obj_name ='工资单邮件'。
t_packing_list-doc_size = t_packing_list-body_num * 255。
APPEND t_packing_list。
清除t_receivers。
更新t_receiver。
t_receivers-receiver = another_email @ address'。 "收件人的信息
t_receivers-rec_type ='U'。
t_receivers-com_type ='INT'。
t_receivers-notif_del ='X'。
t_receivers-notif_ndel ='X'。
追加t_receivers。
通话功能'SO_DOCUMENT_SEND_API1'
导出
DOCUMENT_DATA = W_DOC_DATA
PUT_IN_OUTBOX ='X'
SENDER_ADDRESS = p_sender
SENDER_ADDRESS_TYPE ='INT'
COMMIT_WORK ='X'
导入
SENT_TO_ALL = w_sent_all
表格
PACKING_LIST = T_PACKING_LIST
CONTENTS_BIN = t_attachment
CONTENTS_TXT = IT_MESS_BOD
RECEIVERS = t_receivers
例外情况
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
其他= 8。
IF SY-SUBRC EQ 0。
写:/'邮件发送成功'。
ELSE。
ENDIF。
使用模式='*'提交rsconn01
并返回。
ENDIF。
清除:WA_FINAL,WA_WPBP,WA_FIXEDCOMP,WA_DEDUCTIBLES,wa_rgdir,in_rgdir [],IT_MESS_BOD。
刷新:it_mess_bod。
ENDLOOP。
ENDIF。
ENDIF。
ENDLOOP。
ELSE。
消息"给定选择没有数据" TYPE" I"。
ENDIF。
ENDFORM。 " FETCH_DATA
消息由Matthew Billingham编辑-删除了真实的电子邮件地址
您好Deepak,
像这样尝试
* -------------------------- ------------------------------------------ *
类型tline。" PDF格式的字段符号
。放入w_str。
*变量* < br> * ----------------------------------------------- --------------------- *
数据:w_frm类型rs38l_fnam,"智能表格功能模块
w_binsize类型i," Binary Size < br> w_str类型字符串。 "字符串变量
* ---------------------------------------- ---------------------------- *
* INTERNALTABLEDECLARAT ION *
* ---------- -------------------------------------------------- -------- *
数据:sflight的it_final类型表,tline的"最终表
it_pdf类型表,PDF格式的内部表
solisti1的it_cbin类型表, " solisti1的字符二进制格式的内部表
it_ctxt类型表," sopcklsti1的字符文本格式的内部表
it_pack类型表," somlreci1的包装数据的内部表
it_rec类型表,"内部表 对于收件人列表
ymail_id的it_mail类型表。"邮件ID的内部表
* ------------------------- ----------------------------- -------------- *
* WORKAREADECLARATION *
* ------------------------- ------------------------------------------- **
数据:wa_final类型sflight,"最终存储区
wa_ctrl类型ssfctrlop,"控制数据的工作区,
wa_out类型ssfcompop,"输出数据的工作区
wa_otf类型ssfcrescl,"工作区 对于OTF数据
wa_cbin类型solisti1,"字符二进制数据的工作区
wa_ctxt类型solisti1,"字符文本数据的工作区
wa_doc type sodocchgi1,"对于文档
wa_pack类型的工作区,s swacklsti1 "打包数据的工作区
wa_rec类型somlreci1, "收件人数据的工作区域
wa_mail类型ymail。 "邮件ID的工作区
* ---------------------------------------- ---------------------------- *
* FIELDSYMBOLS *
* ----------- -------------------------------------------------- ------- *
字段符号:
* ------------- -------------------------------------------------- ----- *
*选择屏幕*
* ---------------------------------- ---------------------------------- *
选择屏幕:b1块的开头,带有框架标题文本 -001。
参数:p_date类型sy-datum。
选择屏幕:b1块的结尾。
* ----------------- -------------------------------------------------- -*
*开始-OF-选择*
* ---------------------------------- ---------------------------------- *
开始选择。
选择* fr om跳转到表it_final中,最多10行。
选择结束。
调用函数'SSF_FUNCTION_MODULE_NAME'
导出
formname ='YSMARTFORM_NAME'
导入
fm_name = w_frm
异常
no_form = 1 < br> no_function_module = 2
其他=3。
如果sy-subrc <>0。
消息ID sy-msgid类型sy-msgty编号sy-msgno
,其中sy-msgv1 sy-msgv2 sy -msgv3 sy-msgv4。
尾号。
wa_ctrl-no_dialog ='X'。 "没有属性对话框
wa_ctrl-preview =''。"没有打印预览
wa_ctrl-getotf ='X'。 "获取OTF格式
wa_out-tddest ='LP01'。"标准打印机格式
清除wa_otf。
调用函数w_frm
导出
control_parameters = wa_ctrl < br> output_options = wa_out
用户设置=''
导入
job_output_info = wa_otf
表
it_final = it_final
异常
formatting_error = 1
internal_error = 2
> send_error = 3
user_canceled = 4
其他=5。
如果sy-subrc <>0。
消息ID sy-msgid类型sy-msgty编号sy-msgno
,带有sy- msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
endif。
clear:w_binsize,
it_pdf,
w_str,
wa_cbin,
it_cbin,
wa_ctxt ,
it_ctxt。
调用函数'CONVERT_OTF'
导出
格式='PDF'
max_linewidth = 132
导入
bin_filesize = w_binsize
表
otf = wa_otf-otfdata []
行= it_pdf
异常< br> err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
其他=5。
如果sy-subrc <>0。
消息ID sy-msgid类型 sy-msgty编号sy-msgno
与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
endif。
在it_pdf循环上分配
并置 将w_str
端环。
做。
wa_cbin = w_str。
将wa_cbin附加到it_cbin。
清除wa_cbin。 255个位置。
如果w_str是初始值。
退出。
结束符。
enddo。
将'Sflight Details'(002)p_date连接到以空格分隔的wa_ctxt中。
将wa_ctxt添加到it_ctxt中。
清除wa_ctxt。
将wa_ctxt添加到it_ctxt中。
将'Regards'(003)''连接到wa_ctxt。
将wa_ctxt连接到it_ctxt。
将'ABAP Team'(004)''连接到wa_ctxt。
添加wa_ctxt
wa_doc-obj_name ='测试'(005)。
将'Testing'(006)p_date连接到wa_doc-obj_descr。
wa_doc-obj_langu ='E'。
wa_doc-sensitiveivty ='O'。 "标准
wa_doc-doc_size = w_binsize。
wa_pack-obj_name = text-005。
将'Testing'(006)p_date连接到wa_pack-obj_descr。
wa_pack-transf_bin =空间。
wa_pack-head_start =1。
wa_pack-head_num =1。
wa_pack-body_start = 1行(it_ctxt)。
wa_pack-doc_type ='RAW'。 " RAW类型数据
将wa_pack附加到它_pack。
wa_pack-doc_size = w_binsize。
wa_pack-transf_bin ='X'。
wa_pack-head_start =1。
wa_pack-head_num = 1.
wa_pack-body_start = 1.
wa_pack-body_num =行(it_cbin)。
wa_pack-doc_type ='PDF'。 " PDF类型数据
将wa_pack附加到it_pack。
在it_mail循环到wa_mail。
清除wa_rec。
wa_rec-rec_type ='U'。"收件人类型的规范-(至)
wa_rec-com_type ='INT'。 "传输方法(传真,电传,...)-(Internet)
wa_rec-receiver = wa_mail-email。
将wa_rec附加到it_rec。
endloop。
调用函数'SO_DOCUMENT_SEND_API1 '
导出
document_data = wa_doc
put_in_outbox ='X'
commit_work ='X'
表
包装清单= it_pack
contents_bin = it_cbin
contents_txt = it_ctxt < br>接收者= it_rec
异常
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
个其他=8。
如果sy-subrc <>0。
消息ID sy-msgid类型sy- msgty编号sy-msgno
与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
else。
消息'邮件已成功发送'(008)键入'I'。 br>
endif。
* ------------------------------------ -------------------------------- *
*结束-选择-*
* --- -------------------------------------------------- --------------- *
我也遇到了使用" SO_DOCUMENT_SEND_ATT_API1"的类似问题。 当我删除电子邮件正文的代码时,附件很好。 另外,请尝试使用cl_bcs类发送电子邮件,而不要使用此FM。
检查SAP示例程序:" bcs_example_1"到" bcs_example_7"。
此消息已被审核。
嗨Deepak, >
请检查T.code SCOT中的设置
INT-> SMTP,这将打开一个对话框。
在那儿,点击设置,如下所示。
它将打开另一个对话框。
在这种情况下,检查设置是否正确。 主要检查ABAP列表是否为PDF。
希望这对您有所帮助。
谨此问候
Gurulakshmi
您好Deepak
您不必计算doc_size,它将在内部完成。
注释1430123在系统中也很重要。
最好的问候
Jozsef
查看本文,这对我有帮助< br>
https://mysapnuts。 blogspot.com/2016/09/send-adobe-form-as-email-attachment.html
一周热门 更多>