我尝试使用以下代码将文本写入本地文件:
data: fname(60), text type string value 'la la la'.
fname = 'myfile.txt'.
OPEN DATASET fname FOR OUTPUT IN TEXT MODE encoding default.
transfer text to fname.
close dataset fname.
write 'done'.
程序运行正常,执行后出现“完成”。但是我在PC上找不到文本文件“myfile.txt”(它不在SAP工作目录中)。
其他信息 我已经完成了这项工作 使用FM GUI_DOWNLOAD,但我必须使用OPEN DATASET,TRANSFER方法,因为我在后台程序中写这个(由BSP使用SUBMIT调用)。
答案 0 :(得分:6)
在后台处理过程中无法写入客户端 后台处理的本质是不必将客户机连接到WAS。
如果创建文件非常耗时,您可以触发在WAS上创建文件,然后提供要在BSP应用程序中的某个位置下载的文件列表。
<强>更新强>
如果只指定文件名,则将文件放入profile参数DIR_HOME
指定的目录中。您可以在RZ11中检查/编辑配置文件参数,或在AL11中查看目录。
有关在ABAP中处理文件的一般信息,请参阅http://wiki.sdn.sap.com/wiki/display/ABAP/Working+with+files
第二次更新:
通常,通过设置正确的http头字段并将二进制数据推送到http响应来实现下载数据
你应该看一下cl_bsp_utility=>download
这会在您的响应中设置正确的内容标头。您必须指定数据(XSTRING
)并指定所需的Content-Type
和Content-Disposition
。
Content-Type
是文件的mime类型。因此,对于可能为application/vnd.ms-excel
的Excel文件,或者您可以使用类似application/octetstream
的常规内容
Content-Disposition
可用于告诉浏览器使用的默认文件名。示例值可以是attachment; filename=filexyz.xls
。
请注意,基于Content-Type
和Content-Disposition
的组合,浏览器可能会略有不同的行为(即提供“另存为...”对话框,而不是将其显示为内嵌)。
答案 1 :(得分:4)
OPEN DATASET及相关关键字仅对服务器上的文件进行操作。还有其他各种选项可以从后台进程将文件传输到目标计算机。
如果您的服务器和客户端计算机在Windows上运行,则可以在AL11中映射Windows路径并将文件保存在那里。 (请注意,您必须打开目标Windows计算机防火墙才能允许此流量。)
您可以在目标计算机上运行FTP服务器并在那里ftp文件。 SAP有功能模块来处理这个问题。查看功能组SFTP。
如果两台机器都运行某个版本的UNIX,你甚至可以SCP到目标机器上的文件(因为大多数Unix都包含ssh,因此也包括scp)。您必须在SM49中创建一个外部命令,然后设置从服务器到目标机器的公钥认证,如果您没有SAP服务器上的管理员权限,这有点棘手,但有办法解决这个问题。太
答案 2 :(得分:0)
正如Turismo所写:在后台处理中,你无法在PC上书写。 写入PC需要连接的SAPGui(=客户端)。
OPEN DATASET
和TRANSFER
将数据写入服务器。