点击此处---> 群内免费提供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。
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)
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)。
请 使用"代码"按钮设置代码格式,以便以更加用户友好的格式(彩色)显示代码。
嗨,亚历山大,
我想我会尝试使用contents_hex导出参数来获取二进制文件(在此处找到一些示例代码 /img/answers/10696530/view.html )。
通常对此主题有一些类似的问题。 请按" SO_DOCUMENT_READ_API1"进行搜索
PS。 对于超过3个字符的扩展名(例如XSLX),此行可能会出现问题:
请参阅此帖子: https://answers.sap.com/questions/10370026/fm-sodocumentreadapi1-truncates-xlsx-to-xls.html
Egor,
我将功能模块SCMS_BINARY_TO_XSTRING更改为您指定的类(cl_bcs_convert => solix_to_xstring)。 对于Word文档,它可以工作,但是对于xls和pdf,它仍然有问题。
致谢。
嗨,托马斯,谢谢你的帖子。
是的,我尝试过。
致谢。
一周热门 更多>