通过电子邮件发送PPM附件,DOCX图像已损坏

2020-08-31 20:51发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我正在通过工作流程为我的客户的PPM清单项目构建离线批准解决方案。 对于每个批准请求,邮件都通过cl_bcs类被发送到用户的电子邮件收件箱。 要求之一是将所有上传的文件附加到特定的PPM决策点,供用户参考。

经过大量研究,我可以通过访问文件的物理ID来使用SCMS_DOC_READ获取文件内容。 数据在原始1022二进制表中返回。 在进一步头痛之后,我使用代码页4103将SLS_BINARY_TO_XSTRING的二进制内容转换为XSTRING,然后将XSTRING转换为STRING,然后将STRING转换为SOLIX,代码页为4103。XLSX附件似乎运行良好。

对于DOCX,我使用了相同的技术,但代码页为1100/1160。 该文件可以正常运行,但其中的图像已损坏。 有趣的是,只有部分图像被损坏。 这告诉我在某些时候存在一些转换错误或数据丢失。 如果有人可以帮忙解决这个问题或为我指明正确的方向,那我将永远负债累累。

下面是一个代码段:

IF文件2 EQ'DOC'.DESCRIBE表lt_bin行lv_lines。 binary_tab = lt_bin [] *例外情况*失败= 1 *其他= 2.IF sy-subrc <> 0. *在此处实施适当的错误处理ENDIF。

cl_bcs_convert => xstring_to_string(EXPORTING
iv_xstr = fi_xstring < br> iv_cp ='1160'
接收
rv_string = fi_string)。

cl_bcs_convert => string_to_solix(EXPORTING
iv_string = fi_string
iv_codepage ='1160'IMPORTING
et_solix = lt_xls_out
ev_size = size)。
CONCATENATE file1'.docx'INTO lv_file.CONCATENATE'&SO_FILENAME ='lv_file INTO att_line.APPEND att_line到att_head。 'TXT'
i_attachment_subject = lv_sub
i_attachment_size = size
i_att_content_hex = lt_xls_out
i_attachment_header = att_head)。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我正在通过工作流程为我的客户的PPM清单项目构建离线批准解决方案。 对于每个批准请求,邮件都通过cl_bcs类被发送到用户的电子邮件收件箱。 要求之一是将所有上传的文件附加到特定的PPM决策点,供用户参考。

经过大量研究,我可以通过访问文件的物理ID来使用SCMS_DOC_READ获取文件内容。 数据在原始1022二进制表中返回。 在进一步头痛之后,我使用代码页4103将SLS_BINARY_TO_XSTRING的二进制内容转换为XSTRING,然后将XSTRING转换为STRING,然后将STRING转换为SOLIX,代码页为4103。XLSX附件似乎运行良好。

对于DOCX,我使用了相同的技术,但代码页为1100/1160。 该文件可以正常运行,但其中的图像已损坏。 有趣的是,只有部分图像被损坏。 这告诉我在某些时候存在一些转换错误或数据丢失。 如果有人可以帮忙解决这个问题或为我指明正确的方向,那我将永远负债累累。

下面是一个代码段:

IF文件2 EQ'DOC'.DESCRIBE表lt_bin行lv_lines。 binary_tab = lt_bin [] *例外情况*失败= 1 *其他= 2.IF sy-subrc <> 0. *在此处实施适当的错误处理ENDIF。

cl_bcs_convert => xstring_to_string(EXPORTING
iv_xstr = fi_xstring < br> iv_cp ='1160'
接收
rv_string = fi_string)。

cl_bcs_convert => string_to_solix(EXPORTING
iv_string = fi_string
iv_codepage ='1160'IMPORTING
et_solix = lt_xls_out
ev_size = size)。
CONCATENATE file1'.docx'INTO lv_file.CONCATENATE'&SO_FILENAME ='lv_file INTO att_line.APPEND att_line到att_head。 'TXT'
i_attachment_subject = lv_sub
i_attachment_size = size
i_att_content_hex = lt_xls_out
i_attachment_header = att_head)。

付费偷看设置
发送
4条回答
野沐沐
1楼-- · 2020-08-31 21:01

你好

我们通过从PPM FPM门户代码中借用了一些代码来解决了该问题。 如果其他人遇到同样的问题,我们将尽快分享详细的解决方案。

最好的问候

Soumyajit

亦是此间程序员
2楼-- · 2020-08-31 21:01

我从来没有(不必担心)处理SAP中的Word文件,更不用说处理其中的嵌入式图像了。 但是,由于没有其他答复-您可以尝试缩小问题范围。 例如。 如果不指定代码页,是否可以正常工作? 如果没有图像,是否可以正常工作? 如果您只是从文件中读取数据而不是从FM中获取数据怎么办?

通常,我发现操作越少越好。 我用于Excel和PDF的程序从应用程序服务器读取文件并通过电子邮件发送出去,该程序只使用OPEN DATASET ... BINARY,然后使用cl_document_bcs => xstring_to_solix,然后进入带有RAW类型的电子邮件附件。

悻福寶寶
3楼-- · 2020-08-31 21:22

谢谢,耶琳娜。 不幸的是,文件在DMS中,而不在AL11中。 而且操作似乎是必要的。 由于配置方式的不同,文件条目不在DRAW表中处理,而SCMS_DOC_READ是我能够读取RAW 1022中文件数据的唯一方法。因此,为了将其转换为solix,我必须执行 很多跳舞。

更好的转换方法需要代码页。 我尝试了很多代码页。 没有图像,它仅适用于非常基本的WORD,Excel等。对于包含大量表,数据和其他Word/Excel功能的沉重文件,文件直接损坏。 在浏览所有可能的SCN文档并注意到它的情况下,我已经不知所措了。

最好的问候

Soumyajit

SAP小菜
4楼-- · 2020-08-31 21:18

嗨Soumyajit,

回头分享您的解决方案真是太好了! 而且,请当然也要解决问题。


谢谢

起诉

一周热门 更多>