5

次のコードを使用して、ローカルファイル(つまりラップトップ上)にテキストを書き込もうとしています。

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作業ディレクトリにありません)。

追加情報

汎用モジュールを使用してこれを機能させましたが、バックグラウンドプログラム(を使用してBSPによって呼び出される)でこれを記述しているため、OPENDATASETステートメントとTRANSFERステートメント使用するGUI_DOWNLOAD必要があります。SUBMIT

4

3 に答える 3

7

バックグラウンド処理の性質上、クライアントマシンをWASに接続する必要がないため、バックグラウンド処理中にクライアントに書き込むことはできません。デフォルトでは、すべてのファイルがサーバーディレクトリに保存されますDIR_HOME

解決策: 通常、データのダウンロードは、適切なHTTPヘッダーフィールドを設定し、の助けを借りてバイナリデータをhttp応答にプッシュすることによって実現されますcl_bsp_utility=>download

このクラスは、応答に適切なコンテンツヘッダーを設定します。XSTRINGフォームでデータを指定し、またはなど 、必要なデータを指定する必要がContent-TypeありContent-Dispositionます。application/vnd.ms-excelapplication/octetstream

使用するデフォルトのファイル名をブラウザに指示するためにもContent-Disposition使用できます。を参照してください。

attachment; filename=filexyz.xls`

PS ABAPでのファイルの操作に関する一般的な情報については、このヘルプファイルhttp://wiki.sdn.sap.com/wiki/display/ABAP/Working+with+filesを参照してください。

于 2012-01-19T14:28:50.993 に答える
5

OPEN DATASETおよび関連するキーワードは、サーバー上のファイルに対してのみ機能します。バックグラウンドプロセスからターゲットマシンにファイルを取り込むには、他にもさまざまなオプションがあります。

  1. サーバーとクライアントマシンがWindowsで実行されている場合は、AL11でWindowsパスをマップし、そこにファイルを保存できます。(このトラフィックを許可するには、ターゲットのWindowsマシンファイアウォールを開く必要があることに注意してください)。

  2. ターゲットマシンでFTPサーバーを実行し、そこでファイルをFTPで転送できます。SAPには、これに対処するための汎用モジュールがあります。関数グループSFTPを見てください。

  3. 両方のマシンがUNIXのバージョンを実行している場合は、ファイルをターゲットマシンにSCPすることもできます(ほとんどのUnixにはsshが含まれているため、scpが含まれています)。SM49で外部コマンドを作成してから、サーバーからターゲットマシンへの公開鍵認証を設定する必要があります。これは、SAPサーバーの管理者権限がない場合は少し注意が必要ですが、それを回避する方法があります。それも。

于 2012-01-19T15:53:50.077 に答える
0

Turismoが書いたように:バックグラウンド処理では、PCに書き込むことはできません。PCへの書き込みには、接続されたSAPGui(=クライアント)が必要です。

OPEN DATASETデータをサーバーにTRANSFER書き込みます。

于 2012-01-19T15:54:53.963 に答える