При разработке программ в ABAP иногда требуется организовать взаимодействие с операционной системой рабочей станции пользователя. Это может быть работа с файлами, каталогами, программами, установленными на рабочей станции и т.д. Для всех этих действий в системе SAP ERP предусмотрен класс для работы с сервером представления, называется он: CL_GUI_FRONTEND_SERVICES.
Просмотреть свойства класса, его атрибуты и методы можно при помощи транзакции SE24 «Построитель классов» либо в транзакции SE80 «Навигатор бизнес объектов», выбрав в раскрывающемся списке объектов тип «Класс/интерфейс».
Рассмотрим применение основных методов.
Так как версии GUI клиента постоянно обновляются, и существуют разные версии GUI: под MacOS, Web, Windows необходимо проверять поддерживает ли текущая версия возможности GUI, для этого был создан метод: CHECK_GUI_SUPPORT. Пример использования данного метода:
Следующими идут методы экспорта, импорта из буфера обмена ОС: CLIPBOARD_EXPORT, CLIPBOARD_IMPORT. Пример использования метода:
где: data_block - внутренняя таблица, rc - код возврата ошибки.
Просмотреть свойства класса, его атрибуты и методы можно при помощи транзакции SE24 «Построитель классов» либо в транзакции SE80 «Навигатор бизнес объектов», выбрав в раскрывающемся списке объектов тип «Класс/интерфейс».
Рассмотрим применение основных методов.
Так как версии GUI клиента постоянно обновляются, и существуют разные версии GUI: под MacOS, Web, Windows необходимо проверять поддерживает ли текущая версия возможности GUI, для этого был создан метод: CHECK_GUI_SUPPORT. Пример использования данного метода:
CALL METHOD cl_gui_frontend_services=>check_gui_supportEXPORTINGcomponent = 'abapeditor'feature_name = 'exists'RECEIVINGRESULT = g_guisupp_abap_editEXCEPTIONScntl_error = 1error_no_gui = 2wrong_parameter = 3not_supported_by_gui = 4unknown_error = 5OTHERS = 6
Следующими идут методы экспорта, импорта из буфера обмена ОС: CLIPBOARD_EXPORT, CLIPBOARD_IMPORT. Пример использования метода:
CALL METHOD cl_gui_frontend_services=>clipboard_export IMPORTING DATA = data_block CHANGING rc = rc EXCEPTIONS OTHERS = 1.
где: data_block - внутренняя таблица, rc - код возврата ошибки.
Далее идет группа методов для работы с директориями на сервере представления. Метод DIRECTORY_BROWSE. Служит для отображения диалога выбора директории. Пример использования:
CALL METHOD cl_gui_frontend_services=>directory_browseEXPORTINGwindow_title = 'Select a folder'initial_folder = 'C:'CHANGINGselected_folder = tofolder_string " Возвращает выбранную директориюEXCEPTIONScntl_error = 1error_no_gui = 2not_supported_by_gui = 3OTHERS = 4.
Метод DIRECTORY_CREATE создает папку в указанном месте. Пример использования:
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_CREATEEXPORTINGDIRECTORY = 'C:1'CHANGINGRC = l_rcEXCEPTIONSDIRECTORY_CREATE_FAILED = 1CNTL_ERROR = 2ERROR_NO_GUI = 3DIRECTORY_ACCESS_DENIED = 4DIRECTORY_ALREADY_EXISTS = 5PATH_NOT_FOUND = 6UNKNOWN_ERROR = 7NOT_SUPPORTED_BY_GUI = 8WRONG_PARAMETER = 9OTHERS = 10.
Метод DIRECTORY_DELETE как понятно из названия удаляет указанную директорию, в случае ошибки код возврата RC будет не пустой. Часто приходится проверять существование директории на компьютере пользователя, для этого служит метод DIRECTORY_EXIST. Пример его использования:
IF cl_gui_frontend_services=>directory_exist( tmpstring ) = ''.MESSAGE 'Указанной вами директории не существует' TYPE 'E'.ENDIF.
Для получения текущей директории (той что используется 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_filesEXPORTINGdirectory = file_pathFILTER = '*.*'files_only = 'X'CHANGINGfile_table = filetableCOUNT = COUNTEXCEPTIONScntl_error = 1directory_list_files_failed = 2wrong_parameter = 3error_no_gui = 4not_supported_by_gui = 5OTHERS = 6.
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=>executeEXPORTINGdocument = 'C:1.txt'* APPLICATION = 'NOTEPAD.EXE'* PARAMETER =* DEFAULT_DIRECTORY =* MAXIMIZED =* MINIMIZED =synchronous = 'X'EXCEPTIONSOTHERS = 1.
Далее идет группа методов для работы с файлами. 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_dialogEXPORTINGwindow_title = 'File'default_extension = '*.txt'file_filter = 'Text file (*.txt)|*.txt|File with delimiter ";" (*.csv)|*.csv|Excel (*.xls)|*.xls|All (*.*)|*.*'CHANGINGfile_table = _it_file_table "initial_directory = 'C:'rc = _rc.
Метод 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
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
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_DOWNLOAD - для загрузки содержимого файла..
Материал взят с ресурса http://abap-blog.ru/abap/frontend/frontend
Комментариев нет:
Отправить комментарий