pdf附件损坏。 从邮件中检索...?

2020-08-22 08:57发布

         点击此处--->   EasySAP.com群内免费提供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编辑-删除了真实的电子邮件地址

         点击此处--->   EasySAP.com群内免费提供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编辑-删除了真实的电子邮件地址

付费偷看设置
发送
6条回答
悠然的二货
1楼-- · 2020-08-22 09:28

您好Deepak,

像这样尝试

* -------------------------- ------------------------------------------ *
*变量* < 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 *
* ----------- -------------------------------------------------- ------- *

字段符号:类型tline。" PDF格式的字段符号

* ------------- -------------------------------------------------- ----- *
*选择屏幕*
* ---------------------------------- ---------------------------------- *
选择屏幕: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 放入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。

* ------------------------------------ -------------------------------- *
*结束-选择-*
* --- -------------------------------------------------- --------------- *

南山jay
2楼-- · 2020-08-22 09:50

我也遇到了使用" SO_DOCUMENT_SEND_ATT_API1"的类似问题。 当我删除电子邮件正文的代码时,附件很好。 另外,请尝试使用cl_bcs类发送电子邮件,而不要使用此FM。

检查SAP示例程序:" bcs_example_1"到" bcs_example_7"。

DafaDDDa
3楼-- · 2020-08-22 09:46

此消息已被审核。

spaceman01
4楼-- · 2020-08-22 09:32

嗨Deepak,

请检查T.code SCOT中的设置

INT-> SMTP,这将打开一个对话框。

在那儿,点击设置,如下所示。

它将打开另一个对话框。

在这种情况下,检查设置是否正确。 主要检查ABAP列表是否为PDF。

希望这对您有所帮助。

谨此问候

Gurulakshmi

槿木_熙
5楼-- · 2020-08-22 09:41

您好Deepak

您不必计算doc_size,它将在内部完成。

注释1430123在系统中也很重要。

最好的问候

Jozsef

愤怒的猪头君
6楼-- · 2020-08-22 09:27

一周热门 更多>