点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
专家们,
我有这种情况。 我有一个通过FTP连接到URL的报告,那里有一些与销售发票相对应的文件(XML或pdf)。
对于PDF文件(对于XML,现在可以正常使用),我得到了文件,解析了结果,然后填写了一些自定义表格。 用户还需要将文件上传到应用程序服务器(我可以在AL11中检查它)。
上传到应用程序服务器时遇到问题。 这就是我的工作。例如使用XML文件:
HTTP_SCRAMBLE
FTP_CONNECT
[在这里我通过FTP_COMMAND设置被动关闭,ASCII,CD DIR,目录]
FTP_SERVER_TO_R3->我在表g_t_xml_tab中获取文件(g_t_xml_tab类型ty_xml初始大小为0)
我使用
转换文件
数据:g_xmldata TYPE xstring,
g_str TYPE字符串。
合并g_t_xml_tab的行
放入g_str,按空格分隔。
调用功能'SCMS_STRING_TO_XSTRING'
导出
文本= g_str
导入
缓冲区= g_xmldata
异常
失败= 1
其他= 2。
然后将文件移动到服务器:
数据:fichero_out类似于rlgrap文件名
resto TYPE i,
n_veces TYPE i,
size TYPE i。
数据:开始于tab_bin的位置为0。
导出
缓冲区= g_xmldata
导入
output_length =大小
表
Binary_tab = tab_bin。
清除手迹 'zfe_fracab-cif zfe_fracab-num_fra'.pdf'INTO fichero_out。
在二进制模式下输出数据集fichero_out。
如果sy-subrc = 0.
清除:n_veces,resto。
n_veces =大小DIV 1022.
resto =大小MOD 1022.
LOOP AT tab_bin。 tabix <= n_veces。
将tab_bin-line传输到fichero_out。
ELSE。
退出。
ENDIF。
ENDLOOP。
如果resto>0。
传输tab_bin-line (还原)到fichero_out。
ENDIF。
关闭数据集fichero_out。
ENDIF。
我现在可以在AL11中看到该文件,但是创建错误。 也许我想念什么?
提前谢谢!
玛丽亚
嗨,
我自己解决了。
通过在Xstring字节模式转换之前添加强制转换。
感谢上面的帖子,非常有帮助。
干杯
Kishore
您怎么知道"创建错误"? 也许它是正确创建的,但是您不正确地阅读/使用它...
您太复杂了。 以二进制形式进行所有操作,因为据说PDF是"二进制"文件:
我想我做了您告诉我的事情(下面的代码),我可以在AL11中看到文件,但是当我打开文件时会遇到错误的文件错误。
谢谢
玛丽亚
我尝试过这样(在新程序中只是做一些测试..),但是它不起作用
类型:文本的开始,
第c行,(400)类型c,
文本结尾。
类型:ty_xml的开始,
raw(4000)c类型,
结束字符 ty_xml。
数据:用户(30)类型c,
pwd(30)类型c,
主机(64)类型c,
slen类型i,
键类型i 值26101957,
hdl TYPE i,
dest TYPE rfcdes-rfcdest,
g_str TYPE字符串,
g_xmldata TYPE xstring,
l_lin(2048),
扩展名(100)。 br>数据:具有标题行的blob的bindata类型表,
结果具有标题行的文本类型表,
chardata具有标题行的文本类型表,
g_t_xml_tab ty_xml的类型表INITIAL SIZE 0,< br>带标题行的epsfili的i_fich类型表,
blob_length类型i,
l_xstring类型xstring,
fichero_out类似于rlgrap文件名,"(255),
carpeta类似于user_dir-dirname。 >
选择开始。
pwd = xxxxxxxxxxx。
用户= xxxxxxxxxxxxxxx。
主机= xxxxxx。
slen = strlen(pwd)。
* SAP应用程序服务器-> FTP服务器
dest ='SAPFTPA'。
* La contr aseñahay que formatearla
呼叫功能'HTTP_SCRAMBLE'
导出
源= pwd
sourcelen = slen
键=键
导入
目标= pwd。
>调用功能'SAPGUI_PROGRESS_INDICATOR'
导出
文本='连接到FTP服务器'。
*控制台FTP
连接功能调用功能'FTP_CONNECT'
导出
用户= 用户
密码= pwd
主机=主机
rfc_destination = dest
导入
句柄= hdl
例外情况
not_connected = 1
其他=2。
< br> IF sy-subrc =0。
* Ponemos modo pasivo
调用功能'FTP_COMMAND'
导出
句柄= hdl
命令='设置被动关闭'
表
数据=结果
异常
其他=1。
调用功能'SAPGUI_PROGRESS_INDICATOR'
导出
文本='在FTP服务器上创建文件'。
调用 功能'FTP_COMMAND'
导出
句柄= hdl
命令='ascii'
表格
数据=结果
例外情况
tcpip_error = 1
command_error = 2 < br> data_error =3。
*否movemos a la carpeta下载
调用功能'FTP_COMMAND'
EXPORTING
句柄= hdl
命令='cd下载'
表格
数据=结果
例外情况
tcpip_error = 1
命令错误= 2
data_error =3。
呼叫功能'FTP_COMMAND'
导出
句柄= hdl
命令='dir'
表
数据=结果
例外情况
tcpip_error = 1
命令错误= 2
data_error =3。
循环AT结果 。
IF结果CS'pdf'。
i_fich-name = result + 62(50)。
APPEND i_fich。
ENDIF。
ENDLOOP。
LOOP AT i_fich。
*服务器档案
呼叫功能'FTP_SERVER_TO_R3'
导出
句柄= hdl
fname = i_fich-name
* character_mode ='X'
character_mode = abap_false < br>导入
blob_length = blob_length
表格
blob = bindata
文本= g_t_xml_tab
例外情况
tcpip_error = 1
command_error = 2
data_error = 3
其他=4。
LOOP AT绑定 ata。
CONCATENATE bindata-content l_xstring
INTO l_xstring IN BYTE模式。
ENDLOOP。
从user_dir
中选择单个目录名INTO carpeta。别名='EFACTURASPROV'。 >地毯'\''XXXX''.pdf'进入fichero_out。
在二进制模式下输出数据集fichero_out。
将l_xstring转移到fichero_out。
关闭数据集fichero_out。
> ENDLOOP。
ENDIF。
托马斯·布里亚尼克(Tomas Buryanek)
即使完成了这两个步骤,它也无法工作...您还有其他解决方案吗?
如果您可以共享
一周热门 更多>