通过FM SAP_WAPI_ATTACHMENT_ADD附加的文件已损坏

2020-08-13 18:36发布

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

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


大家好,

我创建了一个程序,用于读取文档并将其插入工作流程中。 文件已正确插入,但是当我尝试打开文件时,会显示一条消息,指出文件已损坏或格式无法识别。

知道这是什么吗?谢谢。这是将文件插入到文件中的程序 工作流程:

数据:srgbtbrel的ta_srgbtbrel类型标准表,
wa_srgbtbrel类型srgbtbrel,
V_DOCUMENT_ID像SOFOLENTI1-DOC_ID,
T_OBJECT_CONTENT类型表SOLISTI1的表头带有标题行的SODOCTI1 LINE,
ZSWR_ATT_ID像SWR_ATT_ID,
ZSWR_ATT_HEADER的类型SWR_ATT_HEADER,
ZXSTRING的类型XSTRING,
ZVAR1的类型WSRM_ERROR-WSRM_DIRECTION,
V_RETCODE的SY-SUBRC的ESS-SUBRC,


从srgbtbrel
中选择*
到表ta_srgbtbrel
中,其中instid_a eq V_BANFN
和typeid_a eq'BUS2105'
和catid_a eq'BO'。

>在ta_srgbtbrel处循环进入wa_srgbtbrel。
v_document_id = wa_srgbtbrel-instid_b。

调用功能'SO_DOCUMENT_READ_API1'
导出
DOCUMENT_ID = V_DOCUMENT_ID
*
DOCUMENT_DATA = T_DOCUMENTDATA

* OBJECT_HEADER =
OBJECT_CONTENT = T_OBJECT_CONTENT
* OBJECT_PARA =
* OBJECT_PARB =
*附件列表=
* RECEIVER_LIST =
* CONTENTS_HEX =
例外情况
DOCUMENT_ID_NOT_EXIST = 1
OPERATION_NO_AUTHORIZATION = 2
X_ERROR = 3
其他=4。

ZVAR1 = T_DOCUMENTDATA-DOC_SIZE。
* ZXSTRING [] = T_OBJECT_CONTENT []。

呼叫功能'SCMS_BINARY_TO_XSTRING'
导出
INPUT_LENGTH = ZVAR1
* FIRST_LINE = 0
* LAST_LINE = 0
导入
缓冲区= ZXSTRING
表格
BINARY_TAB = T_OBJECT_CONTENT
*例外情况
*失败= 1
*其他= 2

如果SY-SUBRC <> 0 。
*在此处实施适当的错误处理
ENDIF。




ZSWR_ATT_HEADER-FILE_TYPE ='B'。
ZSWR_ATT_HEADER-FILE_NAME = T_DOCUMENTDATA-OBJ_DESCR。< br>将T_DOCUMENTDATA-OBJ_TYPE转换为小写。
ZSWR_ATT_HEADER-FILE_EXTENSION = T_DOCUMENTDATA-OBJ_TYPE。
ZSWR_ATT_HEADER-LANGUAGE = T_DOCUMENTDATA-OBJ_LANGUAGE。

呼叫功能'SAP WORKITEM_ID = V_WI_ID
ATT_HEADER = ZSWR_ATT_HEADER
* ATT_TXT = ZXSTRING
ATT_BIN = ZX STRING
DOCUMENT_OWNER = SY-UNAME
语言= SY-LANGU
DO_COMMIT ='X'
* COMMENT_SEMANTIC =''
CHECK_INBOX_RESTRICTION ='X'
导入
RETURN_CODE = V_RETCODE
ATT_ID = ZSWR_ATT_ID
* DOC_SIZE =
表格
MESSAGE_LINES = T_MESSAGE。
* MESSAGE_STRUCT =

ENDLOOP。

(50.9 kB)

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

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


大家好,

我创建了一个程序,用于读取文档并将其插入工作流程中。 文件已正确插入,但是当我尝试打开文件时,会显示一条消息,指出文件已损坏或格式无法识别。

知道这是什么吗?谢谢。这是将文件插入到文件中的程序 工作流程:

数据:srgbtbrel的ta_srgbtbrel类型标准表,
wa_srgbtbrel类型srgbtbrel,
V_DOCUMENT_ID像SOFOLENTI1-DOC_ID,
T_OBJECT_CONTENT类型表SOLISTI1的表头带有标题行的SODOCTI1 LINE,
ZSWR_ATT_ID像SWR_ATT_ID,
ZSWR_ATT_HEADER的类型SWR_ATT_HEADER,
ZXSTRING的类型XSTRING,
ZVAR1的类型WSRM_ERROR-WSRM_DIRECTION,
V_RETCODE的SY-SUBRC的ESS-SUBRC,


从srgbtbrel
中选择*
到表ta_srgbtbrel
中,其中instid_a eq V_BANFN
和typeid_a eq'BUS2105'
和catid_a eq'BO'。

>在ta_srgbtbrel处循环进入wa_srgbtbrel。
v_document_id = wa_srgbtbrel-instid_b。

调用功能'SO_DOCUMENT_READ_API1'
导出
DOCUMENT_ID = V_DOCUMENT_ID
*
DOCUMENT_DATA = T_DOCUMENTDATA

* OBJECT_HEADER =
OBJECT_CONTENT = T_OBJECT_CONTENT
* OBJECT_PARA =
* OBJECT_PARB =
*附件列表=
* RECEIVER_LIST =
* CONTENTS_HEX =
例外情况
DOCUMENT_ID_NOT_EXIST = 1
OPERATION_NO_AUTHORIZATION = 2
X_ERROR = 3
其他=4。

ZVAR1 = T_DOCUMENTDATA-DOC_SIZE。
* ZXSTRING [] = T_OBJECT_CONTENT []。

呼叫功能'SCMS_BINARY_TO_XSTRING'
导出
INPUT_LENGTH = ZVAR1
* FIRST_LINE = 0
* LAST_LINE = 0
导入
缓冲区= ZXSTRING
表格
BINARY_TAB = T_OBJECT_CONTENT
*例外情况
*失败= 1
*其他= 2

如果SY-SUBRC <> 0 。
*在此处实施适当的错误处理
ENDIF。




ZSWR_ATT_HEADER-FILE_TYPE ='B'。
ZSWR_ATT_HEADER-FILE_NAME = T_DOCUMENTDATA-OBJ_DESCR。< br>将T_DOCUMENTDATA-OBJ_TYPE转换为小写。
ZSWR_ATT_HEADER-FILE_EXTENSION = T_DOCUMENTDATA-OBJ_TYPE。
ZSWR_ATT_HEADER-LANGUAGE = T_DOCUMENTDATA-OBJ_LANGUAGE。

呼叫功能'SAP WORKITEM_ID = V_WI_ID
ATT_HEADER = ZSWR_ATT_HEADER
* ATT_TXT = ZXSTRING
ATT_BIN = ZX STRING
DOCUMENT_OWNER = SY-UNAME
语言= SY-LANGU
DO_COMMIT ='X'
* COMMENT_SEMANTIC =''
CHECK_INBOX_RESTRICTION ='X'
导入
RETURN_CODE = V_RETCODE
ATT_ID = ZSWR_ATT_ID
* DOC_SIZE =
表格
MESSAGE_LINES = T_MESSAGE。
* MESSAGE_STRUCT =

ENDLOOP。

(50.9 kB)
付费偷看设置
发送
6条回答
huskylover
1楼 · 2020-08-13 19:11.采纳回答

OBJECT_CONTENT是一个带有255个字符的行的参数。 对于二进制文档(您可以通过查看OBJECT_HEADER的值"&SO_FORMAT"的ASC或BIN或DOCUMENT_DATA-OBJ_TYPE来确定它是否是二进制文件),只有127个第一个字符用2个字节填充(在Unicode系统中),并且 第128个字节仅填充第一个字节。

您应该使用功能模块SO_SOLITAB_TO_SOLIXTAB简化将字符标准化为字节的操作,并调用CL_BCS_CONVERT => SOLIX_TO_XSTRING以获得字节作为XSTRING变量。

但是最简单的解决方案是使用参数CONTENTS_HEX代替OBJECT_CONTENT,该参数是SAP添加的,用于简化二进制文档的检索(+ CL_BCS_CONVERT => SOLIX_TO_XSTRING)。

太Q了
2楼-- · 2020-08-13 19:06

请 使用"代码"按钮设置代码格式,以便以更加用户友好的格式(彩色)显示代码。

Nir深蓝
3楼-- · 2020-08-13 19:06

嗨,亚历山大,

我想我会尝试使用contents_hex导出参数来获取二进制文件(在此处找到一些示例代码 /img/answers/10696530/view.html )。

通常对此主题有一些类似的问题。 请按" SO_DOCUMENT_READ_API1"进行搜索

PS。 对于超过3个字符的扩展名(例如XSLX),此行可能会出现问题:

 ZSWR_ATT_HEADER-FILE_EXTENSION = T_DOCUMENTDATA-OBJ_TYPE。

请参阅此帖子: https://answers.sap.com/questions/10370026/fm-sodocumentreadapi1-truncates-xlsx-to-xls.html

绿领巾童鞋
4楼-- · 2020-08-13 19:14
问题已解决。 谢谢你桑德拉。 谢谢大家。
粗暴的香蕉
5楼-- · 2020-08-13 19:17

Egor,

我将功能模块SCMS_BINARY_TO_XSTRING更改为您指定的类(cl_bcs_convert => solix_to_xstring)。 对于Word文档,它可以工作,但是对于xls和pdf,它仍然有问题。

致谢。

SAP小菜
6楼-- · 2020-08-13 19:18

嗨,托马斯,谢谢你的帖子。

是的,我尝试过。

致谢。

一周热门 更多>