Как записать текст в локальный файл

Я пытаюсь записать текст в локальный файл (т.е. на свой ноутбук), используя следующий код:

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'.

Программа работает нормально, и после выполнения появляется надпись «Готово». Однако я не могу найти текстовый файл «myfile.txt» на своем ПК (его нет в рабочем каталоге SAP).

Дополнительная информация

У меня это работает с помощью функционального модуля GUI_DOWNLOAD, однако мне приходится использовать ОТКРЫТЫЙ НАБОР ДАННЫХ и TRANSFER, поскольку я пишу это в фоновой программе (для вызова BSP с использованием SUBMIT).


person B. Bowles    schedule 19.01.2012    source источник


Ответы (3)


Невозможно писать клиенту во время фоновой обработки, поскольку характер фоновой обработки заключается в том, что ни одна клиентская машина не должна быть подключена к WAS. По умолчанию все файлы сохраняются в папку сервера DIR_HOME.

РЕШЕНИЕ. Как правило, загрузка данных достигается путем установки правильных полей заголовка HTTP и отправки двоичных данных в ответ http с помощью cl_bsp_utility=>download.

Этот класс устанавливает правильные заголовки содержимого в вашем ответе. Вы должны указать свои данные в форме XSTRING и указать, какие Content-Type и Content-Disposition вы хотите, например application/vnd.ms-excel или application/octetstream.

Также Content-Disposition можно использовать, чтобы указать браузеру имя файла по умолчанию для использования, см.

attachment; filename=filexyz.xls`

P.S. Для получения общей информации о работе с файлами в ABAP вы можете обратиться к этому файлу справки http://wiki.sdn.sap.com/wiki/display/ABAP/Working+with+files

person Turismo    schedule 19.01.2012
comment
Большое спасибо за ваш ответ. Создание файла на сервере и предложение возможности загрузки кажется лучшей идеей. Программа в том, что если я пишу программу для сохранения afile.txt на сервер, я не могу найти ее на сервере. Знаете ли вы место по умолчанию, в котором сохраняются файлы из программ, или как найти это место? - person B. Bowles; 20.01.2012
comment
Большое спасибо за эту информацию. Я был в этом в течение нескольких часов и не могу понять, как загрузить файл с сервера в мою коробку. Я нашел текстовый файл myfile.txt с помощью AL11. Таким образом, его путь ./myfile.txt. Я пытался использовать FM, например «ARCHIVFILE_SERVER_TO_SERVER», но это только для копирования на AS. Я также пробовал ряд методов «cl_gui_frontend_services» без удовольствия. Делали ли вы это раньше и у вас есть пример кода. Я бы подумал, что скачать файл через BSP проще, чем это оказалось! Спасибо за вашу помощь! - person B. Bowles; 20.01.2012
comment
@B.Bowles У меня нет настоящего примера кода, которым я мог бы поделиться в данный момент, но я обновил свой ответ основной идеей. - person Turismo; 25.01.2012

ОТКРЫТЫЙ НАБОР ДАННЫХ и связанные с ним ключевые слова работают только с файлами на сервере. Существуют различные другие варианты передачи файла на целевую машину из фонового процесса.

  1. Если ваш сервер и клиентские машины работают в Windows, вы можете сопоставить путь Windows в AL11 и сохранить файл там. (Обратите внимание, что вам придется открыть брандмауэр целевой машины Windows, чтобы разрешить этот трафик).

  2. Вы можете запустить FTP-сервер на целевой машине и передать туда файлы по ftp. SAP имеет функциональные модули для решения этой проблемы. Посмотрите на функциональную группу SFTP.

  3. Если обе машины работают под управлением какой-либо версии UNIX, вы даже можете SCP перенести файлы на целевую машину ( поскольку большинство Unix включают ssh и, следовательно, scp). Вам нужно будет создать внешнюю команду в SM49, а затем настроить аутентификацию с открытым ключом с сервера на целевую машину, что немного сложнее, если у вас нет прав администратора на сервере SAP, но есть способы обойти это. слишком.

person mydoghasworms    schedule 19.01.2012

Как пишет Turismo: В фоновой обработке нельзя писать на ПК. Для записи на ПК требуется подключенный SAPGui (= клиент).

OPEN DATASET и TRANSFER записывает данные на сервер.

person knut    schedule 19.01.2012