探秘 CL_GUI_FRONTEND_SERVICES:强大的 SAP 客户端操作利器

文摘   2024-11-07 06:00   上海  

SAP 中 CL_GUI_CFW 方法深度解析

ALV 可编辑性

将 ALV 报告输出作为 CSV 格式的电子邮件附件发送。

ABAP SALV-颜色(列、行、单元格)

3478472 - ALV 全屏 - 无选择列的显示

SAP ABAP 面向对象编程:实现选择屏幕和 ALV 结果同屏显示


一、CL_GUI_FRONTEND_SERVICES 概述   

         

 

介绍 CL_GUI_FRONTEND_SERVICES 主要操作对象为客户端本地环境,包含众多静态方法可进行各种操作。

CL_GUI_FRONTEND_SERVICES 是一个在 SAP 系统中非常实用的类,它能够对客户端本地环境进行多种操作。这个类主要针对客户端的本地 IP、文件夹、磁盘等进行操作。其中多数方法为静态方法,可以直接用 “=>” 来引用。

例如,DIRECTORY_BROWSE 方法可以浏览文件夹,DIRECTORY_CREATE 用于创建文件夹,DIRECTORY_DELETE 则可以删除文件夹。如果想要检查文件夹是否存在,可以使用 DIRECTORY_EXIST 方法。此外,DIRECTORY_LIST_FILES 能够列出文件夹内的文件列表。

在文件操作方面,FILE_COPY 可复制文件,FILE_DELETE 能删除文件,FILE_EXIST 用于判断文件是否存在。FILE_GET_ATTRIBUTES 可以获取文件属性,FILE_GET_SIZE 能够获取文件大小。而 FILE_OPEN_DIALOG 和 FILE_SAVE_DIALOG 分别可以选择打开文件浏览器和选择保存文件浏览器。    

该类还能获取一些重要的客户端信息,如 GET_IP_ADDRESS 可以获取 IP 地址,GET_USER_NAME 能够获取用户名。

总的来说,CL_GUI_FRONTEND_SERVICES 为 SAP 系统与客户端本地环境的交互提供了强大的工具,使得在 SAP 开发和应用中能够更加灵活地处理本地资源。

二、常见操作案例展示  

         

 

   

(一)文件上传与下载  

在 SAP 系统中,可以使用 CL_GUI_FRONTEND_SERVICES 类进行文件的上传与下载操作。例如,在 REPORT ZHAO00001 中,可以通过调用 cl_gui_frontend_services=>file_open_dialog 方法选择要上传的文件,然后进行数据处理。对于文件下载,可以使用 cl_gui_frontend_services=>file_save_dialog 方法选择保存文件的路径,再进行下载操作。

(二)文件夹操作    

使用 cl_gui_frontend_services=>DIRECTORY_CREATE 方法可以创建文件夹。例如,以下代码可以创建一个名为 'E:\TESTDIR' 的文件夹:

         

 

CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_CREATE

EXPORTING

DIRECTORY = 'E:\\TESTDIR'

CHANGING

RC = RC.

而使用 cl_gui_frontend_services=>DIRECTORY_DELETE 方法可以删除文件夹。如要删除 'E:\TESTDIR' 文件夹,可以这样写:

         

 

CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_DELETE

EXPORTING

DIRECTORY = 'E:\\TESTDIR'

CHANGING

RC = RC.

(三)文件操作  

通过 cl_gui_frontend_services=>FILE_EXIST 方法可以判断文件是否存在。例如:

         

 

DATA:filename TYPE string,rc TYPE i,rc2 TYPE c.

filename = 'c:/test.txt'.

CALL METHOD cl_gui_frontend_services=>file_exist

EXPORTING

file   = filename

RECEIVING

result = rc2.

IF sy-subrc =0 AND rc2 = 'X'.

CALL METHOD cl_gui_frontend_services=>file_delete        

EXPORTING

filename = filename

CHANGING

rc       = rc.

WRITE sy-subrc.

WRITE rc.

else.

write 'the file is not exists!'.

ENDIF.

(四)获取客户端信息  

使用 cl_gui_frontend_services=>GET_IP_ADDRESS 方法可以获取客户端 IP 地址。例如:

         

 

data: myip type.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_IP_ADDRESS

RECEIVING

IP_ADDRESS           = myIP

EXCEPTIONS

CNTL_ERROR           = 1

ERROR_NO_GUI         = 2

NOT_SUPPORTED_BY_GUI = 3

OTHERS               =4.

使用 cl_gui_frontend_services=>GET_USER_NAME 方法可以获取用户名。

(五)复制粘贴操作  

CL_GUI_FRONTEND_SERVICES 类中的 CLIPBOARD_EXPORTCLIPBOARD_IMPORT 方法可以实现内表与剪贴板内容的导入导出。例如,以下代码将内表内容复制到剪贴板:

         

 

DATA rc TYPE i.        

DATA:BEGIN OF itab OCCURS 0,

line(200) TYPE c,

END OF itab.

itab-line = '好吧,你已经把我复制了……'.

APPEND itab.

CALL METHOD cl_gui_frontend_services=>clipboard_export

IMPORTING

data                    = itab[]

CHANGING

rc                      = rc.

IF sy-subrc <>0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

而以下代码将剪贴板内容导入到内表中:

         

 

DATA rc TYPE i.

DATA:BEGIN OF itab OCCURS 0,

line(200) TYPE c,

END OF itab.

CALL METHOD cl_gui_frontend_services=>clipboard_import

IMPORTING

DATA                    = itab[]

LENGTH                   = rc

EXCEPTIONS

CNTL_ERROR           = 1

ERROR_NO_GUI         = 2

NOT_SUPPORTED_BY_GUI = 3

others                = 4.

IF sy-subrc <>0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO        

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

三、平台使用优势与应用场景  

         

 

(一)平台使用优势  

CL_GUI_FRONTEND_SERVICES 在不同平台上具有显著的使用优势。首先,其提供的众多静态方法使得在各种开发环境中都能快速、高效地与客户端本地环境进行交互。例如,在 ABAP 开发中,开发人员可以直接使用 “=>” 引用这些方法,无需复杂的对象实例化过程,大大提高了开发效率。

在跨平台性方面,CL_GUI_FRONTEND_SERVICES 的方法在不同的操作系统上表现出较好的稳定性和兼容性。无论是在 Windows 还是 Linux 等操作系统下,开发人员都可以使用相同的方法来操作客户端本地资源,降低了开发过程中因平台差异而带来的复杂性。

此外,该类提供的方法涵盖了文件、文件夹和客户端信息等多个方面的操作,为开发人员提供了一站式的解决方案。开发人员无需再寻找其他工具或方法来实现这些功能,节省了开发时间和成本。

(二)应用场景  

1.文件管理

在实际业务中,CL_GUI_FRONTEND_SERVICES 可用于文件管理场景。例如,企业内部的文档管理系统可以利用该类的文件操作方法实现文件的上传、下载、复制、删除等功能。开发人员可以通过调用 FILE_COPYFILE_DELETE 等方法,轻松实现文件的管理操作,提高企业文档管理的效率。    

2.数据导入与导出

在数据导入与导出方面,该类也发挥着重要作用。例如,在 ABAP 开发中,可以使用 GUI_UPLOADGUI_DOWNLOAD 方法将文本文件或 Excel 文件读取到内表中,或者将内表中的数据导出为文件。这在数据迁移、报表生成等场景中非常实用。

以读取文本文件并用 ALV 显示为例,首先通过 CL_GUI_FRONTEND_SERVICES 的静态方法 FILE_OPEN_DIALOG 打开文件对话框,选择要上传的文本文件。然后使用 GUI_UPLOAD 方法将文本文件读取到内表中。最后,将内表中的数据在 ALV 中列出,方便用户查看和分析。

3.系统配置与个性化设置

CL_GUI_FRONTEND_SERVICES 还可以用于系统配置和个性化设置场景。例如,通过获取客户端 IP 地址和用户名,可以实现基于用户身份和位置的个性化配置。开发人员可以根据用户的 IP 地址或用户名,为用户提供特定的服务或设置特定的权限,提高系统的安全性和用户体验。

总之,CL_GUI_FRONTEND_SERVICES 在 SAP 系统开发中具有广泛的应用场景,为开发人员提供了强大的工具,帮助他们更加高效地实现各种业务需求。

         

 

   


FILETYPE_ALL = 'All Files (*.*)|*.*|'FILETYPE_EXCEL = 'Microsoft Excel Files (*.XLS;*.XLSX;*.XLSM)|*.XLS;*.XLSX;*.XLSM|'FILETYPE_WORD = 'Microsoft Word Files (*.DOC;*.DOCX;*.DOCM)|*.DOC;*.DOCX;*.DOCM|'FILETYPE_TEXT = 'Text Files (*.TXT)|*.TXT|'FILETYPE_HTML = 'HTML files (*.HTML, *.HTM)|*.HTML;*.HTM|'FILETYPE_RTF = 'RTF Files (*.RTF)|*.RTF|'FILETYPE_XML = 'XML (*.XML)|*.XML|'FILETYPE_POWERPOINT = 'Microsoft PowerPoint Files (*PPT;*.PPTX;*.PPTM)|*PPT;*.PPTX;*.PPTM|'
FORM frm_f4_file_path  CHANGING i_fullpath TYPE localfile.   DATA:    lit_file_table TYPE STANDARD TABLE OF file_table,          "File table    lwa_file       TYPE file_table,                            "file table work area    l_filename     TYPE string,                                "file name    l_path         TYPE string,                                "path    l_fullpath     TYPE string.                                "full file path   DATA:    lo_frontend_services TYPE REF TO cl_gui_frontend_services, "frontend services    l_return_code        TYPE i,                               "return code    l_user_action        TYPE i,                               "user action    l_default_name       TYPE string.                          "default name * File name filter and default name for the upload file  l_default_name = 'tempalte.xlsx'.   CREATE OBJECT lo_frontend_services.   cl_gui_frontend_services=>file_open_dialog(    EXPORTING      default_filename    = l_default_name      file_filter         = cl_gui_frontend_services=>filetype_excel    CHANGING      file_table          = lit_file_table[]      rc                  = l_return_code      user_action         = l_user_action    EXCEPTIONS      OTHERS              = 4 ).   CALL METHOD lo_frontend_services->free.   IF l_user_action <> lo_frontend_services->action_cancel.    READ TABLE lit_file_table INTO lwa_file INDEX 1.    IF sy-subrc = 0.      MOVE lwa_file-filename TO  i_fullpath.    ENDIF.  ENDIF. ENDFORM.


 Description
During download, the data can be transferred in different formats, depending on the value of the FILETYPE parameter.
Value range
'ASC' :
ASCII format. The table is transferred as text. Conversion exits are performed. The output format additionally depends on the parameters CODEPAGE, TRUNC_TRAILING_BLANKS, and TRUNC_TRAILING_BLANKS_EOL.
'IBM' :
ASCII format with IBM codepage conversion (DOS). This format corresponds to the 'ASC' format when using target codepage 1103. This codepage is frequently used for data exchange via floppy disk.
'DAT' :
Column-by-column transfer. With this format, the data is transferred as text as with ASC. However, no conversion exits are performed and the columns are separated by tab characters. This format generates files than can be uploaded again using gui_upload or ws_upload.
'DBF' :
Data is downloaded in dBase format. Since in this format the data types of the individual columns are stored as well, you can often avoid import problems, for example, into Microsoft Excel, especially when interpreting numeric values.
'WK1' :
Data is downloaded in Lotus 1-2-3 format.
'BIN' :
Binary format. Data is transferred binarily. There is no formatting and no codepage conversion. The data is interpreted row by row; it is not formatted by columns. Specify the data length in parameter BIN_FILESIZE. The table should consist of a column of type X, because especially in Unicode systems, the conversion of structured into binary data causes errors.
Default
'ASC'

下面的类可以对文件夹和文件进行操作:

CL_GUI_FRONTEND_SERVICES

这个类下面的方法均为静态方法,引用的时候以=>来引用方法


1:创建文件夹

参数说明:RC为返回码类型为sy-subrc。

CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_CREATE

EXPORTING

DIRECTORY = 'E:\TESTDIR'

CHANGING

RC = RC.


2.文件夹的删除

下面方法删除E盘下TESTDIR文件夹

CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_DELETE

EXPORTING

DIRECTORY = 'E:\TESTDIR'

CHANGING

RC = RC.


3.目录选择框

CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE

EXPORTING

WINDOW_TITLE = '选择目录'

INITIAL_FOLDER = 'D:\'

CHANGING

SELECTED_FOLDER = DIRPATH."该参数为string类型

其中exporting下面的参数均为可选。可以注释掉。


以下对该类下的方法不做详细举例,只做剪短说明。


DIRECTORY_EXIST 检查指定的目录文件夹是否存在

DIRECTORY_GET_CURRENT 返回当前所在路径(个人感觉不好用)

DIRECTORY_LIST_FILES 枚举指定目录下的文件及其文件夹。其中FILE_TABLE参数为FILE_INFO类型的标准表,无表头

DIRECTORY_SET_CURRENT 设置当前活动目录(不建议使用)

EXECUTE 执行windows程序或打开windows下文件夹

FILE_COPY 文件的复制

FILE_DELETE 删除一个文件

FILE_EXIST 判断指定文件是否存在

FILE_GET_ATTRIBUTES 取得指定文件的属性(只读,隐藏,Normal,active)

FILE_GET_SIZE 返回文件大小(不好用啊)

FILE_SET_ATTRIBUTES 设置文件的属性

GET_COMPUTER_NAME 获取计算机名称

GET_DESKTOP_DIRECTORY 获取桌面所在目录

GET_DRIVE_FREE_SPACE_MEGABYTE 获取磁盘可用空间单位MB

GET_DRIVE_TYPE 获得磁盘类型(不好用)

GET_GUI_VERSION  获得gui的版本

GET_IP_ADDRESS 获取当前主机的IP地址

GET_PLATFORM 返回操作系统版本

GET_SAPGUI_WORKDIR 返回SAP GUI工作目录

GET_SAPLOGON_ENCODING 获取SAP登陆的代码页

GET_SYSTEM_DIRECTORY 获得系统目录

GET_TEMP_DIRECTORY 获取TEMP目录

GET_UPLOAD_DOWNLOAD_PATH 获得上传和下载文件的路径

GET_USER_NAME 获得用户名

GET_WINDOWS_DIRECTORY 取得windows目录路径

IS_TERMINAL_SERVER 检查GUI是否在终端服务器上运行

REGISTRY_DELETE_KEY 删除注册KEY

REGISTRY_DELETE_VALUE 删除注册key值

cl_gui_frontend_services=>file_open_dialog文件类型过滤
使用cl_gui_frontend_services=>file_open_dialog打开文件选择框时,可以输入file_filter参数,来限定和过滤文件选择框内的文件类型。
常用的文件类型如下:
FILETYPE_ALL = 'All Files (*.*)|*.*|'FILETYPE_EXCEL = 'Microsoft Excel Files (*.XLS;*.XLSX;*.XLSM)|*.XLS;*.XLSX;*.XLSM|'FILETYPE_WORD = 'Microsoft Word Files (*.DOC;*.DOCX;*.DOCM)|*.DOC;*.DOCX;*.DOCM|'FILETYPE_TEXT = 'Text Files (*.TXT)|*.TXT|'FILETYPE_HTML = 'HTML files (*.HTML, *.HTM)|*.HTML;*.HTM|'FILETYPE_RTF = 'RTF Files (*.RTF)|*.RTF|'FILETYPE_XML = 'XML (*.XML)|*.XML|'FILETYPE_POWERPOINT = 'Microsoft PowerPoint Files (*PPT;*.PPTX;*.PPTM)|*PPT;*.PPTX;*.PPTM|'

可以在类cl_gui_frontend_services的属性中找到,

FORM open_file . "p_file DATA:lt_files TYPE filetable. DATA:wa_files TYPE file_table. DATA:lv_subrc TYPE i. DATA:lv_user_action TYPE i.
cl_gui_frontend_services=>file_open_dialog( EXPORTING file_filter = cl_gui_frontend_services=>filetype_excel multiselection = space CHANGING file_table = lt_files rc = lv_subrc user_action = lv_user_action EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 5 ).
IF lv_user_action EQ 0. READ TABLE lt_files INTO wa_files INDEX 1. IF sy-subrc EQ 0. p_file = wa_files-filename. ENDIF.
ENDIF.
ENDFORM. " OPEN_FILE

FORM frm_screen . DATA:result TYPE c. DATA:lv_answer TYPE c. DATA:rc TYPE i.
CALL METHOD cl_gui_frontend_services=>directory_exist EXPORTING directory = p_file RECEIVING result = result EXCEPTIONS cntl_error = 1 error_no_gui = 2 wrong_parameter = 3 not_supported_by_gui = 4 OTHERS = 5. IF result = ''."不存在路径是否创建
CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING text_question = '不存在文件是否创建?' text_button_1 = '是'(001) text_button_2 = '否'(002) IMPORTING answer = lv_answer EXCEPTIONS text_not_found = 1 OTHERS = 2. IF sy-subrc <> 0.
ENDIF.
CASE lv_answer. WHEN '1'."是
CALL METHOD cl_gui_frontend_services=>directory_create EXPORTING directory = p_file CHANGING rc = 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. IF sy-subrc <> 0. MESSAGE '文件夹创建失败请重新选择目录' TYPE 'E'. ENDIF.
WHEN 'A' OR '2'."取消 否 STOP. WHEN OTHERS. ENDCASE.
ENDIF.ENDFORM. " FRM_SCREEN


CALL METHOD cl_gui_frontend_services=>directory_browse EXPORTING window_title = '数据备份路径' initial_folder = p_file CHANGING selected_folder = p_file EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. IF sy-subrc <> 0.
ENDIF.

 *&---------------------------------------------------------------------**& Report ZHOUJH_GET_DESKTOP_DIRECTORY*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORT ZHOUJH_GET_DESKTOP_DIRECTORY.
"GET_DESKTOP_DIRECTORY
PARAMETERS:P_FILE TYPE LOCALFILE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE. PERFORM SUB_FILE_F4. "* To provide F4 help for the file
*&---------------------------------------------------------------------**& Form SUB_FILE_F4*&---------------------------------------------------------------------** F4 help for file path*----------------------------------------------------------------------*FORM SUB_FILE_F4 . DATA: L_DESKTOP TYPE STRING, L_I_FILES TYPE FILETABLE, L_WA_FILES TYPE FILE_TABLE, L_RCODE TYPE INT4.
* Finding desktop CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY CHANGING DESKTOP_DIRECTORY = L_DESKTOP EXCEPTIONS CNTL_ERROR = 1 ERROR_NO_GUI = 2 NOT_SUPPORTED_BY_GUI = 3 OTHERS = 4. IF SY-SUBRC <> 0. MESSAGE E001(00) WITH 'Desktop not found'. ENDIF.
* Update View CALL METHOD CL_GUI_CFW=>UPDATE_VIEW EXCEPTIONS CNTL_SYSTEM_ERROR = 1 CNTL_ERROR = 2 OTHERS = 3.
DATA: L_USERACTION TYPE I. CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG EXPORTING WINDOW_TITLE = 'Select Excel file' DEFAULT_EXTENSION = '.xls'* default_filename = FILE_FILTER = '.xls'* with_encoding = INITIAL_DIRECTORY = L_DESKTOP* multiselection = CHANGING FILE_TABLE = L_I_FILES RC = L_RCODE USER_ACTION = L_USERACTION* file_encoding = EXCEPTIONS FILE_OPEN_DIALOG_FAILED = 1 CNTL_ERROR = 2 ERROR_NO_GUI = 3 NOT_SUPPORTED_BY_GUI = 4 OTHERS = 5. IF SY-SUBRC <> 0. MESSAGE E001(00) WITH 'Error while opening file'. ENDIF.
READ TABLE L_I_FILES INDEX 1 INTO L_WA_FILES. IF SY-SUBRC = 0. P_FILE = L_WA_FILES-FILENAME. ELSE. EXIT. ENDIF.
ENDFORM. " SUB_FILE_F4

曰天曰地
我要到哪里去↔️ 灵台方寸山,斜月三星洞。假如有一天全人类不存在,怎么证明人类存在过。AI怎么考古?会怎么考古⚠️
 最新文章