2012-01-19 59 views
4

我試着寫文本使用下面的代碼在本地文件:ABAP:HOWTO寫文本到本地文件

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得到這方面的工作 ,但是我不得不使用打開的數據集,轉移法作爲即時通訊在後臺程序寫這(通過使用提交BSP調用)。

回答

6

在後臺處理過程中無法寫入客戶端。
後臺處理的性質是沒有客戶端機器必須連接到WAS。

如果文件的創建非常耗時,可以在WAS上觸發創建文件,然後提供一個文件列表以供下載到您的BSP應用程序的某個位置。

更新:
如果只指定文件放入由輪廓參數DIR_HOME指定的目錄下的文件名。您可以檢查/編輯RZ11中的配置文件參數或查看AL11中的目錄。

有關在ABAP文件,則可以參考http://wiki.sdn.sap.com/wiki/display/ABAP/Working+with+files一般信息

第二次更新:
一般下載的數據是通過設置合適的HTTP報頭字段,推動二進制數據轉換成HTTP響應實現。
你應該看看cl_bsp_utility=>download
這會在響應中設置正確的內容標題。您必須指定您的數據(作爲XSTRING)並指定您需要的Content-TypeContent-Disposition
Content-Type是該文件的MIME類型。因此,對於可能爲application/vnd.ms-excel的Excel文件,或者您可以使用像application/octetstream這樣的通用文件。
Content-Disposition可用於告訴瀏覽器使用默認文件名。示例值可以是attachment; filename=filexyz.xls

請注意,基於Content-TypeContent-Disposition(即提供「另存爲...」對話框而不是內聯顯示)的組合,瀏覽器可能會有稍微不同的行爲。

+0

非常感謝您的回覆。在服務器上創建文件並提供下載選項似乎是最好的主意。該程序是如果我編寫一個程序來保存「afile.txt」到服務器,我似乎無法在服務器上找到它。你知道保存程序文件的默認位置,或者如何找到位置? –

+0

@ B.Bowles我更新了我的答案。 – Turismo

+0

非常感謝您的信息。我一直在這幾個小時,並不知道如何將文件從服務器下載到我的盒子。我用AL11找到了文本文件「myfile.txt」。所以它的路徑是「./myfile.txt」。我曾嘗試使用類似'ARCHIVFILE_SERVER_TO_SERVER'的FM,但這僅適用於在AS上進行復制。我也嘗試了'cl_gui_frontend_services'方法的範圍,沒有任何喜悅。你以前做過這個,並有示例代碼。我原以爲通過BSP下載文件比實際上更容易!感謝您一直以來的幫助! –

4

OPEN DATASET和相關關鍵字僅對服務器上的文件進行操作。還有其他各種選項可用於將文件從後臺進程獲取到目標機器上。

  1. 如果您的服務器和客戶端計算機在Windows上運行,則可以在AL11中映射Windows路徑並將文件保存在那裏。 (請注意,您必須打開目標Windows機器防火牆才能允許此流量)。

  2. 您可以在目標計算機上運行FTP服務器並在其中ftp文件。 SAP具有處理這個問題的功能模塊。看功能組SFTP。

  3. 如果兩臺機器都運行某個版本的UNIX,那麼甚至可以將SCP這些文件放到目標機器上(因爲大多數Unix將包含ssh,因此也包含scp)。您必須在SM49中創建一個外部命令,然後設置從服務器到目標機器的公共密鑰認證,如果您沒有SAP服務器上的管理權限,這會更棘手一些,但是有辦法太。

0

由於Turismo寫道:在後臺處理,你不能在PC上寫。 寫入PC需要連接SAPGui(=客戶端)。

OPEN DATASETTRANSFER將數據寫入服務器。