Помимо хранения данных на уровне базы данных, вы можете сохранять данные в постоянной форме на уровнях приложения и представления. В этих слоях данные хранятся в виде последовательных файлов, например, в виде электронных таблиц. В здесь вы узнаете о работе с файлами в слоях приложения презентации.
Работа с файлами на сервере приложений
Мы используем различные операторы ABAP для передачи данных в файл, хранящийся в каталоге сервера приложений. Обычно мы выполняем два вида операций с файлами, хранящимися в каталоге сервера приложений:
1.Считайте файл из каталога сервера приложений в программу ABAP (входящий интерфейс).
2.Перенесите файл из программы ABAP в каталог сервера приложений (исходящий интерфейс).
Во входящем интерфейсе данные считываются из файла и передаются во внутреннюю таблицу для дальнейшей обработки в программе ABAP. И наоборот, в исходящем интерфейсе данные из внутренней таблицы в программе ABAP передаются в файл на сервере приложений.
Следующие операторы ABAP используются для чтения и записи файлов на сервере приложений:
OPEN DATASET
Открывает файл для доступа. Система выполняет определенные неявные проверки авторизации, чтобы убедиться, что у пользователя есть необходимые разрешения для доступа к файлу. За один внутренний сеанс можно открыть до ста файлов. Этот оператор приведет к перехватываемому исключению, если файл уже открыт в программе. Должен быть указан тип доступа, для которого файл должен быть открыт. Файл может быть открыт для следующего:
-For Input: открывает файл для чтения.
-For Output: открывает файл для записи.
-Appending: открывает файл для добавления данных. Если файл существует, он открывается, и курсор указывает на конец строки для добавления новых строк. Если файл не существует, создается новый файл.
-Update: открывает файл для изменения существующего содержимого.
Файл можно открыть в текстовом или двоичном режиме, при этом необходимо указать кодировку. Файл всегда следует открывать с помощью этого оператора, прежде чем можно будет выполнить какие-либо другие операции.
Следующий оператор показывает пример использования оператора OPEN DATASET для открытия файла для записи:
OPEN DATASET lv_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
Здесь lv_file содержит путь к файлу на сервере приложений. каталог.
TRANSFER
Если файл не открыт для ВВОДА(INPUT), данные из объекта данных могут быть переданы в файл с помощью этого оператора. Перед использованием этого оператора файл следует открыть с помощью оператора OPEN DATASET. Если файл не открыт, это приведет к перехватываемому исключению.
Пример кода для передачи записей в файл на сервере приложений.
OPEN DATASET lv_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT. LOOP AT lt_tab INTO ls. TRANSFER ls TO lv_file. ENDLOOP. CLOSE DATASET lv_file.
Если файл открывается в текстовом режиме, объект данных должен быть символьного типа. Если файл открывается в бинарном режиме, должны передаваться только бинарные данные.
READ DATASET
Этот оператор передает данные из файла в объект данных программы по одной строке за раз. Файл должен быть открыт для ввода перед использованием инструкции READ DATASET. Этот оператор используется в цикле DO для чтения всех строк файла.
Пример кода с использованием инструкции READ DATASET.
OPEN DATASET lv_file FOR INPUT IN TEXT MODE ENCODING DEFAULT. DO. READ DATASET lv_file INTO ls_makt. IF sy-subrc IS NOT INITIAL. EXIT. ELSE. APPEND ls_makt TO lt_tab. ENDIF. ENDDO. CLOSE DATASET lv_file.
GET DATASET
Получает текущую позицию курсора в файле.
SET DATASET
Устанавливает курсор в файл. Позиция указывается явно или может быть установлена как конец файла.
TRUNCATE DATASET
Устанавливает конец файла.
CLOSE DATASET
Закрывает файл. Если файл не закрыт явно с помощью этого оператора, он автоматически закрывается при закрытии программы.
DELETE DATASET
Удаляет файл. Система выполняет неявные проверки, чтобы убедиться, что у пользователя есть необходимые полномочия для удаления файла.
Имена файлов зависят от операционной системы, поскольку они являются физическими именами. Мы рекомендуем использовать имена файлов, не зависящие от платформы, чтобы сделать ваши программы переносимыми.
Чтобы сделать ваши имена файлов независимыми от платформы, используйте логические имена файлов и пути. Эти логические имена файлов и пути связаны с физическими именами файлов и путями с использованием специальных таблиц в настройке, которые можно поддерживать с помощью транзакции FILE. Имя физического файла из логического имени файла генерируется с помощью функционального модуля FILE_GET_NAME.
Использование логических имен файлов и путей также повышает безопасность.
Работа с файлами на уровне представления
Иногда пользователям может потребоваться сохранить данные локально на своих рабочих станциях или загрузить данные в программу для обработки. Например, пользователь может захотеть загрузить вывод отчета в виде файла PDF или загрузить электронную таблицу с данными материала для размещения в базе данных. В таких сценариях мы можем использовать глобальный класс CL_GUI_FRONTEND_SERVICES для работы с файлами на уровне представления.
Среди других методов класс предоставляет статические методы GUI_UPLOAD и GUI_DOWNLOAD для загрузки или выгрузки данных с рабочей станции пользователя или на нее. Документация класса, доступная для этих методов в Class Builder, ясно объясняет их использование.
Чтобы загрузить файл на уровень представления, путь к файлу, тип файла (двоичный или ASCII) и внутренняя таблица, содержащая данные, передаются методу GUI_DOWNLOAD.
Для загрузки файла определяется внутренняя таблица с количеством полей, соответствующим количеству столбцов в файле. Затем эта таблица передается методу GUI_UPLOAD вместе с путем к файлу. Данные будут загружены из файла в предоставленную внутреннюю таблицу.
Пример кода с использованием метода GUI_UPLOAD.
TYPES :BEGIN OF gty_s_file, field1 TYPE char20, field2 TYPE char30, field3 TYPE char10, END OF gty_s_file. DATA :gt_file TYPE STANDARD TABLE OF gty_s_file. PARAMETERS p_file TYPE string. CALL METHOD cl_gui_frontend_services=>gui_upload EXPORTING filename = p_file filetype = 'ASC' has_field_separator = space CHANGING data_tab = gt_file EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 not_supported_by_gui = 17 error_no_gui = 18 OTHERS = 19. IF sy-subrc IS NOT INITIAL. *Реализуйте подходящую обработку ошибок ENDIF
Комментарии
Отправить комментарий