使用FTP将PDF发送到应用程序服务器

2020-09-22 14:14发布

         点击此处--->   EasySAP.com群内免费提供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中看到该文件,但是创建错误。 也许我想念什么?

提前谢谢!

玛丽亚

         点击此处--->   EasySAP.com群内免费提供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中看到该文件,但是创建错误。 也许我想念什么?

提前谢谢!

玛丽亚

付费偷看设置
发送
7条回答
昵称总是被占用
1楼-- · 2020-09-22 14:49

嗨,

我自己解决了。

通过在Xstring字节模式转换之前添加强制转换。

感谢上面的帖子,非常有帮助。

干杯

Kishore

小熊yu生菜
2楼-- · 2020-09-22 14:49

您怎么知道"创建错误"? 也许它是正确创建的,但是您不正确地阅读/使用它...

SKY徐
3楼-- · 2020-09-22 14:37

您太复杂了。 以二进制形式进行所有操作,因为据说PDF是"二进制"文件:

  • FTP_COMMAND:请勿ascii
  • FTP_SERVER_TO_R3:使用二进制文件(字符模式= abap_false,并将BLOB参数放入变量TABLE OF x255(255字节)中)
  • 以字节模式将blob的行连接为xstring
  • xstring = xstring(长度)
  • 在BINARY模式下打开数据集后,仅执行一个TRANSFER xstring,然后执行CLOSE DATASET
N-Moskvin
4楼-- · 2020-09-22 14:36

我想我做了您告诉我的事情(下面的代码),我可以在AL11中看到文件,但是当我打开文件时会遇到错误的文件错误。

谢谢

玛丽亚

xfwsx85
5楼-- · 2020-09-22 14:50

我尝试过这样(在新程序中只是做一些测试..),但是它不起作用

类型:文本的开始,
第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。

6楼-- · 2020-09-22 14:38

托马斯·布里亚尼克(Tomas Buryanek)

即使完成了这两个步骤,它也无法工作...您还有其他解决方案吗?

如果您可以共享

一周热门 更多>