Взаимодействие с фронтендом

В SAP предусмотрен один замечательный класс для работы с сервером представления, называется он: CL_GUI_FRONTEND_SERVICES. Далее я опишу применение его основных методов, которые зачастую могут пригодится в написании ABAP отчётов.

Так как версии GUI клиента постоянно обновляются, и существуют разные версии GUI: под MacOS, Web, Windows необходимо проверять поддерживает ли текущая версия возможности GUI, для этого был создан метод: CHECK_GUI_SUPPORT. Пример использования данного метода:

CALL METHOD cl_gui_frontend_services=>check_gui_support
EXPORTING
component = 'abapeditor'
feature_name = 'exists'
RECEIVING
RESULT = g_guisupp_abap_edit
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
unknown_error = 5
OTHERS = 6.
view raw .abap hosted with ❤ by GitHub

Следующими идут методы экспорта, импорта из буфера обмена ОС: CLIPBOARD_EXPORT, CLIPBOARD_IMPORT. Пример использования метода:

CALL METHOD cl_gui_frontend_services=>clipboard_export
IMPORTING
DATA = data_block
CHANGING
rc = rc
EXCEPTIONS
OTHERS = 1.
view raw .abap hosted with ❤ by GitHub

Где data_block внутренняя таблица, rc — код возврата ошибки.

Далее идет группа методов для работы с директориями на сервере представления. Метод DIRECTORY_BROWSE. Служит для отображения диалога выбора директории. Пример использования:

CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = 'Select a folder'
initial_folder = 'C:'
CHANGING
selected_folder = tofolder_string " Возвращает выбранную директорию
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
view raw .abap hosted with ❤ by GitHub

Метод DIRECTORY_CREATE создает папку в указанном месте. Пример использования:

CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_CREATE
EXPORTING
DIRECTORY = 'C:1'
CHANGING
RC = l_rc
EXCEPTIONS
DIRECTORY_CREATE_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
DIRECTORY_ACCESS_DENIED = 4
DIRECTORY_ALREADY_EXISTS = 5
PATH_NOT_FOUND = 6
UNKNOWN_ERROR = 7
NOT_SUPPORTED_BY_GUI = 8
WRONG_PARAMETER = 9
OTHERS = 10.
view raw .abap hosted with ❤ by GitHub

Метод DIRECTORY_DELETE как понятно из названия удаляет указанную директорию, в случае ошибки код возврата RC будет не пустой.  Часто приходится проверять существование директории на компьютере пользователя, для этого служит метод DIRECTORY_EXIST. Пример его использования:

IF cl_gui_frontend_services=>directory_exist( tmpstring ) = ''.
MESSAGE 'Указанной вами директории не существует' TYPE 'E'.
ENDIF.
view raw .abap hosted with ❤ by GitHub

Для получения текущей директории (той что используется GUI для выгрузки отчётов и пр.)  используется метод: DIRECTORY_GET_CURRENT. Для получения списка файлов в указанной директории используется метод: DIRECTORY_LIST_FILES. Метод позволяет получить список файлов и директорий в указанной вами директории, причем с заданием фильтра — параметр FILTER, вы можете определить нужно ли вам получить только директории параметр DIRECTORIES_ONLY = ‘X’, или только файлы — параметр FILES_ONLY = ‘X’. Пример использования:

DATA: filetable TYPE STANDARD TABLE OF char255,
COUNT TYPE I.
CALL METHOD cl_gui_frontend_services=>directory_list_files
EXPORTING
directory = file_path
FILTER = '*.*'
files_only = 'X'
CHANGING
file_table = filetable
COUNT = COUNT
EXCEPTIONS
cntl_error = 1
directory_list_files_failed = 2
wrong_parameter = 3
error_no_gui = 4
not_supported_by_gui = 5
OTHERS = 6.
view raw .abap hosted with ❤ by GitHub

DIRECTORY_SET_CURRENT необходим для установки текущей директории (см. выше).

DISABLEHISTORYFORFIELD используется когда надо запретить сохранение в истории значений указанного поля, например на экране выбора.

ENVIRONMENT_GET_VARIABLE используется для получения значения переменной окружения на компьютере пользователя.  Противоположный ему метод, для установки значений переменных окружения — ENVIRONMENT_SET_VARIABLE.

Метод EXECUTE запускает на сервере представления документ, директорию, приложение. (В Windows это обёртка над WinApi — ShellExecute, ShellExecuteEx).  Параметр DOCUMENT определяет путь к документу который необходимо запустить в приложении APPLICATION, в случае если приложение не указано будет запущено ассоциируемое приложение к данному типу файлов. DEFAULT_DIRECTORY определяет директорию из которой будет происходить файла, в случае если не указан полный путь к файлу в параметре DOCUMENT. OPERATION — Может принимать одно из следующих значений: FIND, EXPLORE, EDIT, OPEN или PRINT, по умолчанию OPEN. MAXIMIZED, MINIMIZED — определяет будет ли запущенное приложение развернутым или свернутым. PARAMETER — список параметров передаваемых запускаемому приложению. SYNCHRONOUS — определяет будет ли запуск синхронным, т.е. GUI будет ждать завершения операции или нет. Пример использования метода:

CALL METHOD cl_gui_frontend_services=>execute
EXPORTING
document = 'C:1.txt'
* APPLICATION = 'NOTEPAD.EXE'
* PARAMETER =
* DEFAULT_DIRECTORY =
* MAXIMIZED =
* MINIMIZED =
synchronous = 'X'
EXCEPTIONS
OTHERS = 1.
view raw .abap hosted with ❤ by GitHub

Далее идет группа методов для работы с файлами. FILE_COPY — копирует файл указанный в параметре — SOURCE, в файл в параметре — DESTINATION, в случае если нет создает, если есть и указан параметр — OVERWRITE перезаписывает.

FILE_DELETE удаляет указанный в параметре — FILENAME файл, в случае ошибки значение параметра RC не 0.

FILE_EXIST — проверяет файл на существование, в случае если файл существует параметр RESULT не пустой.

Для проверки атрибутов файла служит метод FILE_GET_ATTRIBUTES, с помощью него можно определить является ли файл: архивным, только для чтения, скрытым, или нормальным, без вышеупомянутых атрибутов. Для установки атрибутов к файлу служит метод FILE_SET_ATTRIBUTES.

FILE_GET_SIZE судя по названию должен определять размер файла в байтах, но на моей системе данный метод отказывался работать, возможно на более новой версии базиса это было исправлено.

FILE_GET_VERSION получает текущую версию файла.

FILE_OPEN_DIALOG отображает диалог выбора файлов. WINDOW_TITLE — заголовок диалога, DEFAULT_EXTENSION — расширение для файлов, DEFAULT_FILENAME — имя файлов по умолчанию, FILE_FILTER — фильтр для выбора файлов, WITH_ENCODING — возможность выбора кодировки, INITIAL_DIRECTORY — директория в которой открывается диалог, MULTISELECTION — если ‘Х’ позволяет выбирать несколько файлов, FILE_TABLE — список выбранных файлов. USER_ACTION может принимать либо ACTION_OK либо ACTION_CANCEL в зависимости на какую кнопку диалога нажал пользователь. FILE_ENCODING — принимает значение кодировки файла. Пример использования метода:

CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'File'
default_extension = '*.txt'
file_filter = 'Text file (*.txt)|*.txt|File with delimiter ";" (*.csv)|*.csv|Excel (*.xls)|*.xls|All (*.*)|*.*'
CHANGING
file_table = _it_file_table "initial_directory = 'C:'
rc = _rc.
view raw .abap hosted with ❤ by GitHub

Метод FILE_SAVE_DIALOG необходим для вызова диалога сохранения файлов, его параметры идентичны предыдущему за исключением: PROMPT_ON_OVERWRITE — запрашивать ли пользователя перезаписать файл, PATH — имя выбранного файла, FULLPATH — полный адрес выбранного файла.

Далее идет группа методов для получения информации о сервере представления.

GET_COMPUTER_NAME — получение имени компьютера.

GET_DESKTOP_DIRECTORY — получение пути к рабочему столу.

GET_DRIVE_FREE_SPACE_MEGABYTE — получение свободного пространства на диске в MB, где DRIVE — буква необходимого диска.

GET_DRIVE_TYPE — определение типа диска, возвращает: FIXED, REMOTE, REMOVABLE, » — в случае если не удалось определить.

GET_FILE_SEPARATOR — определение разделителя в файлах, зависит от платформы. Windows  — \.

GET_GUI_VERSION — получение полной версии GUI.

GET_IP_ADDRESS — получение IP адреса на котором запущен GUI.

GET_LF_FOR_DESTINATION_GUI — получение разделителя линий в зависимости от платформы. В случае если возвращает ошибку (sy-subrc <>0) — CL_ABAP_CHAR_UTILITIES=>CR_LF.

GET_PLATFORM — получение платформы сервера представления. Возвращает один из атрибутов класса:

PLATFORM_UNKNOWN
PLATFORM_WINDOWS95
PLATFORM_WINDOWS98
PLATFORM_NT351
PLATFORM_NT40
PLATFORM_NT50
PLATFORM_MAC
PLATFORM_OS2
PLATFORM_LINUX
PLATFORM_HPUX
PLATFORM_TRU64
PLATFORM_AIX
PLATFORM_SOLARIS
PLATFORM_MACOSX

GET_SAPGUI_DIRECTORY — директория в которой лежит SAP GUI.

GET_SAPGUI_WORKDIR — рабочая директория GUI клиента, как правило в документах пользователя.

GET_SAPLOGON_ENCODING — кодировка которая используется в GUI.

GET_SYSTEM_DIRECTORY — получение системной директории (С:\Windows\system32\)

GET_TEMP_DIRECTORY — получение директории для временных файлов.

GET_UPLOAD_DOWNLOAD_PATH — рабочая папка для GUI, тоже что и GET_SAPGUI_WORKDIR.

GET_USER_NAME — имя пользователя на сервере представления.

GET_WINDOWS_DIRECTORY — как видно из названия директория в которой лежит Windows.

IS_TERMINAL_SERVER — Запущен ли GUI на терминальном клиенте.

Далее идут методы для работы с реестром Windows.

REGISTRY_DELETE_KEY — удаляет ключ указанный в KEY, для всех методов по взаимодействию с реестром необходимо указывать корневой узел реестра ( CL_GUI_FRONTEND_SERVICES=>HKEY_CLASSES_ROOT, CL_GUI_FRONTEND_SERVICES=>HKEY_CURRENT_USER, CL_GUI_FRONTEND_SERVICES=>HKEY_LOCAL_MACHINE, CL_GUI_FRONTEND_SERVICES=>HKEY_USERS).

REGISTRY_DELETE_VALUE — чистит значение указанного ключа реестра.

REGISTRY_GET_DWORD_VALUE — получение значения ключа реестра с видом DWORD.

REGISTRY_SET_DWORD_VALUE — установка значения ключа с видом DWORD.

REGISTRY_GET_VALUE — получение значения ключа.

REGISTRY_SET_VALUE — установка значения ключа.

Теперь еще немного об атрибутах данного класса. В тех методах где необходимо указать маску файлов (диалоги открытия, сохранения) можно воспользоваться готовыми атрибутами:

FILETYPE_ALL Все файлы (*.*) *.*
FILETYPE_TEXT Текст. файлы (*.TXT) *.TXT
FILETYPE_XML XML (*.XML) *.XML
FILETYPE_HTML HTML-файлы (*.HTML, *.HTM) *.HTML;*.HTM
FILETYPE_EXCEL Excel-файлы (*.XLS;*.XLSX;*.XLSM) *.XLS;*.XLSX;*.XLSM
FILETYPE_RTF RTF-файлы (*.RTF) *.RTF
FILETYPE_WORD Word-файлы (*.DOC;*.DOCX;*.DOCM) *.DOC;*.DOCX;*.DOCM
FILETYPE_POWERPOINT Файлы Powerpoint (*PPT;*.PPTX;*.PPTM) *PPT;*.PPTX;*.PPTM

Ну и наконец два пожалуй самых часто используемых метода данного класса GUI_DOWNLOAD — служит для выгрузки данных в файл на сервере представления. GUI_UPLOADдля загрузки содержимого файла.  Описание данных методов достаточно большое и будет опубликовано в виде отдельной заметки.

Добавить комментарий

Ваш адрес email не будет опубликован.