SAP_ABAP学习实例讲解part3.docx

上传人:牧羊曲112 文档编号:1663636 上传时间:2022-12-13 格式:DOCX 页数:56 大小:1.61MB
返回 下载 相关 举报
SAP_ABAP学习实例讲解part3.docx_第1页
第1页 / 共56页
SAP_ABAP学习实例讲解part3.docx_第2页
第2页 / 共56页
SAP_ABAP学习实例讲解part3.docx_第3页
第3页 / 共56页
SAP_ABAP学习实例讲解part3.docx_第4页
第4页 / 共56页
SAP_ABAP学习实例讲解part3.docx_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《SAP_ABAP学习实例讲解part3.docx》由会员分享,可在线阅读,更多相关《SAP_ABAP学习实例讲解part3.docx(56页珍藏版)》请在三一办公上搜索。

1、第八章 ALV控件的使用 ALV(SAP List Viewer)控件是SAP业务中最常用的控件之一,本章先用一个简单的例子介绍用ALV控件显示数据,再以实例方式介绍ALV的强大功能,示例程序可以直接使用。 本章主要内容有: ()简单的ALV控件实例; ()自定义输出字段的ALV控件实例; ()在屏幕上建立ALV控件; ()自定义ALV控件的工具条按钮; ()处理ALV控件双击事件; ()通过ALV控件编辑内表和数据库更新; ()ALV Tree的使用。 8.1 简单的ALV控件实例 以航班表(SPFLI)为例,使用数据字典定义结构,通过ALV控件显示数据。 【例8.1】 REPORT YTE

2、ST26. *定义内表 DATA WA_SPFLI LIKE TABLE OF SPFLI WITH HEADER LINE. *内表赋值 SELECT * INTO TABLE WA_SPFLI FROM SPFLI. *通过数据字典结构显示ALV CALL FUNCTION REUSE_ALV_LIST_DISPLAY EXPORTING I_STRUCTURE_NAME = SPFLI TABLES T_OUTTAB = WA_SPFLI EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC 0. * MESSAGE ID SY-MSG

3、ID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. 输出结果如图8-1所示。 图8-1 8.2 自定义输出字段的ALV控件实例 【例8.2】 REPORT YTEST27. *ALV使用到的类库 TYPE-POOLS: SLIS. *一列描述 DATA WA_ALV_FIELD TYPE SLIS_FIELDCAT_ALV. *列描述内表,列清单 DATA WA_ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV. *定义内表 DATA WA_SPFLI

4、LIKE TABLE OF SPFLI WITH HEADER LINE. *内表赋值 SELECT * INTO TABLE WA_SPFLI FROM SPFLI. *定义第一到第四个字段 WA_ALV_FIELD-COL_POS = 1. WA_ALV_FIELD-FIELDNAME = CARRID. WA_ALV_FIELD-SELTEXT_M = 航线承运人. APPEND WA_ALV_FIELD TO WA_ALV_FIELDCAT. WA_ALV_FIELD-COL_POS = 2. WA_ALV_FIELD-FIELDNAME = CONNID. WA_ALV_FIELD-

5、SELTEXT_M = 航班连接. APPEND WA_ALV_FIELD TO WA_ALV_FIELDCAT. WA_ALV_FIELD-COL_POS = 3. WA_ALV_FIELD-FIELDNAME = CITYFROM. WA_ALV_FIELD-SELTEXT_M = 起飞城市. APPEND WA_ALV_FIELD TO WA_ALV_FIELDCAT. WA_ALV_FIELD-COL_POS = 4. WA_ALV_FIELD-FIELDNAME = CITYTO. WA_ALV_FIELD-SELTEXT_M = 目标城市. APPEND WA_ALV_FIELD

6、TO WA_ALV_FIELDCAT. *调用ALV显示表单数据 CALL FUNCTION REUSE_ALV_LIST_DISPLAY EXPORTING * I_INTERFACE_CHECK = * I_BYPASSING_BUFFER = * I_BUFFER_ACTIVE = * I_CALLBACK_PROGRAM = * I_CALLBACK_PF_STATUS_SET = * I_CALLBACK_USER_COMMAND = * I_STRUCTURE_NAME = * IS_LAYOUT = IT_FIELDCAT = WA_ALV_FIELDCAT * IT_EXCLU

7、DING = * IT_SPECIAL_GROUPS = * IT_SORT = * IT_FILTER = * IS_SEL_HIDE = * I_DEFAULT = X * I_SAVE = * IS_VARIANT = * IT_EVENTS = * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = * I_SCREEN_START_COLUMN = 0 * I_SCREEN_START_LINE = 0 * I_SCREEN_END_COLUMN = 0 * I_SCREEN_END_LINE = 0 * IMPORTING * E_EXIT_

8、CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES T_OUTTAB = WA_SPFLI * EXCEPTIONS * PROGRAM_ERROR = 1 * OTHERS = 2 . IF SY-SUBRC 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. 输出结果如图8-2所示。 图8-2 8.3 在屏幕上建立ALV控件 8.3.1 定义SCREEN窗口 如图8-3所示,在屏

9、幕上创建两个文本元素控件、一个退出按钮控件、一个定制控制控件。 图8-3 8.3.2 定义逻辑流 逻辑流程序: *逻辑流 *PBO显示屏幕前的处理 PROCESS BEFORE OUTPUT. MODULE STATUS_0100. *PAI用户输入后的处理 PROCESS AFTER INPUT. MODULE USER_COMMAND_0100. 主程序: REPORT YTEST28. *功能码返回值 DATA: OK_CODE TYPE SY-UCOMM, SAVE_OK TYPE SY-UCOMM. *定义内表,变量需要传递,不加HEADER LINE DATA WA_SPFLI T

10、YPE TABLE OF SPFLI . *内表赋值 SELECT * INTO TABLE WA_SPFLI FROM SPFLI. * ALVDATA 是屏幕100中定义控制控件的名称 DATA: WA_CONTAINER TYPE SCRFNAME VALUE ALVDATA, ALV_GRID TYPE REF TO CL_GUI_ALV_GRID, WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER. *直接调用窗口 CALL SCREEN 100. *&-* *& Module STATUS_0100 OUTPUT *&-

11、* * text *-* MODULE STATUS_0100 OUTPUT. SET PF-STATUS STATUS1. *如果窗口还没有创建ALV对象则创建它 IF WA_CUSTOM_CONTAINER IS INITIAL. CREATE OBJECT WA_CUSTOM_CONTAINER EXPORTING CONTAINER_NAME = WA_CONTAINER. CREATE OBJECT ALV_GRID EXPORTING I_PARENT = WA_CUSTOM_CONTAINER. CALL METHOD ALV_GRID-SET_TABLE_FOR_FIRST_D

12、ISPLAY EXPORTING I_STRUCTURE_NAME = SPFLI CHANGING IT_OUTTAB = WA_SPFLI. ENDIF. ENDMODULE. STATUS_0100 OUTPUT *&-* *& Module USER_COMMAND_0100 INPUT *&-* * text *-* MODULE USER_COMMAND_0100 INPUT. SAVE_OK = OK_CODE. CLEAR OK_CODE. CASE SAVE_OK. WHEN EXIT. LEAVE PROGRAM. ENDCASE. ENDMODULE. USER_COMM

13、AND_0100 INPUT 输出结果如图8-4所示。 图8-4 8.4 自定义ALV控件的工具条按钮 在ALV的工具条上增加一个自定义的按钮,单击它弹出窗口提示选择行数据内容。执行结果如图8-5所示。 图8-5 单击自定义按钮后输出如图8-6所示。 图8-6 程序处理流程的说明: 定义ALV控件相关事件、接口和实现方法等,主要定义以下事件。 (1)ALV控件的工具条处理事件,定义了新按钮和功能码; (2)ALV控件的功能码处理事件,定义用户单击按钮产生的功能码事件。 主程序: REPORT YTEST29. INCLUDE . CLASS LCL_EVENT_RECEIVER DEFINIT

14、ION DEFERRED. DATA: OK_CODE TYPE SY-UCOMM, SAVE_OK TYPE SY-UCOMM. DATA EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER. DATA: WA_SPFLI TYPE TABLE OF SPFLI, A_SPFLI LIKE SPFLI. SELECT * INTO TABLE WA_SPFLI FROM SPFLI. DATA: WA_CONTAINER TYPE SCRFNAME VALUE ALVDATA, ALV_GRID TYPE REF TO CL_GUI_ALV_GRID,

15、 WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER. CALL SCREEN 100. *-* * CLASS lcl_event_receiver DEFINITION *-* * *-* CLASS LCL_EVENT_RECEIVER DEFINITION. PUBLIC SECTION. METHODS: HANDLE_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID IMPORTING E_OBJECT E_INTERACTIVE, HANDLE_USER_COMMAND FOR E

16、VENT USER_COMMAND OF CL_GUI_ALV_GRID IMPORTING E_UCOMM. ENDCLASS. lcl_event_receiver DEFINITION *-* * CLASS lcl_event_receiver IMPLEMENTATION *-* * *-* CLASS LCL_EVENT_RECEIVER IMPLEMENTATION. METHOD HANDLE_TOOLBAR. DATA: LS_TOOLBAR TYPE STB_BUTTON. CLEAR LS_TOOLBAR-BUTN_TYPE. APPEND LS_TOOLBAR TO E

17、_OBJECT-MT_TOOLBAR. CLEAR LS_TOOLBAR. MOVE SHOW_DETA TO LS_TOOLBAR-FUNCTION. MOVE ICON_PPE_VNODE TO LS_TOOLBAR-ICON. MOVE 航班明细显示 TO LS_TOOLBAR-QUICKINFO. MOVE 航班明细显示(112) TO LS_TOOLBAR-TEXT. MOVE TO LS_TOOLBAR-DISABLED. APPEND LS_TOOLBAR TO E_OBJECT-MT_TOOLBAR. ENDMETHOD. handle_toolbar METHOD HANDL

18、E_USER_COMMAND. DATA: LT_ROWS TYPE LVC_T_ROW. CASE E_UCOMM. WHEN SHOW_DETA. CALL METHOD ALV_GRID-GET_SELECTED_ROWS IMPORTING ET_INDEX_ROWS = LT_ROWS. CALL METHOD CL_GUI_CFW=FLUSH. IF SY-SUBRC = 0. MESSAGE S005(YMESS) WITH 已选择行!. PERFORM MESSDETA TABLES LT_ROWS. ENDIF. ENDCASE. ENDMETHOD. HANDLE_USER

19、_COMMAND ENDCLASS. LCL_EVENT_RECEIVER IMPLEMENTATION *&-* *& Module STATUS_0100 OUTPUT *&-* * text *-* MODULE STATUS_0100 OUTPUT. SET PF-STATUS STATUS1. IF WA_CUSTOM_CONTAINER IS INITIAL. CREATE OBJECT WA_CUSTOM_CONTAINER EXPORTING CONTAINER_NAME = WA_CONTAINER. CREATE OBJECT ALV_GRID EXPORTING I_PA

20、RENT = WA_CUSTOM_CONTAINER. CALL METHOD ALV_GRID-SET_TABLE_FOR_FIRST_DISPLAY EXPORTING I_STRUCTURE_NAME = SPFLI CHANGING IT_OUTTAB = WA_SPFLI. CREATE OBJECT EVENT_RECEIVER. SET HANDLER EVENT_RECEIVER-HANDLE_USER_COMMAND FOR ALV_GRID. SET HANDLER EVENT_RECEIVER-HANDLE_TOOLBAR FOR ALV_GRID. CALL METHO

21、D ALV_GRID-SET_TOOLBAR_INTERACTIVE. ENDIF. ENDMODULE. STATUS_0100 OUTPUT *&-* *& Module USER_COMMAND_0100 INPUT *&-* * text *-* MODULE USER_COMMAND_0100 INPUT. SAVE_OK = OK_CODE. CLEAR OK_CODE. CASE SAVE_OK. WHEN EXIT. LEAVE PROGRAM. ENDCASE. ENDMODULE. USER_COMMAND_0100 INPUT *&-* *& Form MESSDETA

22、*&-* * text *-* * -P_LT_ROWS text *-* FORM MESSDETA TABLES P_ET_INDEX_ROWS STRUCTURE LVC_S_ROW. Insert correct name for . DATA: LS_SELECTED_LINE LIKE LVC_S_ROW, LF_ROW_INDEX TYPE LVC_INDEX. DATA: S1(200) TYPE C, S2(3) TYPE C. S2 = -. LOOP AT P_ET_INDEX_ROWS INTO LS_SELECTED_LINE. LF_ROW_INDEX = LS_S

23、ELECTED_LINE-INDEX. READ TABLE WA_SPFLI INDEX LF_ROW_INDEX INTO A_SPFLI. S1 = 选择行内容. CONCATENATE S1 A_SPFLI-CONNID A_SPFLI-CARRID A_SPFLI-CITYFROM INTO S1 SEPARATED BY S2. MESSAGE I005(YMESS) WITH S1. ENDLOOP. ENDFORM. MESSDETA 8.5 处理ALV双击事件 【例8.3】 主程序: REPORT YTEST30. *功能码返回值 DATA: OK_CODE TYPE SY-

24、UCOMM, SAVE_OK TYPE SY-UCOMM. *定义内表,变量需要传递,不加HEADER LINE DATA WA_SPFLI TYPE TABLE OF SPFLI. *内表赋值 SELECT * INTO TABLE WA_SPFLI FROM SPFLI. *定义窗口定制控制,定义ALV对象 DATA: WA_CONTAINER TYPE SCRFNAME VALUE ALVDATA, ALV_GRID TYPE REF TO CL_GUI_ALV_GRID, WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

25、*定义事件类型 CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED. *定义事件 DATA EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER. *直接调用窗口 CALL SCREEN 100. *-* * CLASS lcl_event_receiver DEFINITION *-* * 定义事件的属性和方法 *-* CLASS LCL_EVENT_RECEIVER DEFINITION. PUBLIC SECTION. METHODS: HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_C

26、LICK OF CL_GUI_ALV_GRID IMPORTING E_ROW E_COLUMN. ENDCLASS. lcl_event_receiver DEFINITION *-* * CLASS lcl_event_receiver IMPLENTATION *-* * 双击方法实现 *-* CLASS LCL_EVENT_RECEIVER IMPLEMENTATION. METHOD HANDLE_DOUBLE_CLICK. DATA: LI_SPFLI LIKE LINE OF WA_SPFLI. READ TABLE WA_SPFLI INDEX E_ROW-INDEX INTO

27、 LI_SPFLI. *将行列等信息合并到字符串 DATA: S1(100) TYPE C. CONCATENATE 行: E_ROW-INDEX 列名: E_COLUMN-FIELDNAME INTO S1. CONCATENATE S1 connid: LI_SPFLI-CONNID INTO S1. CONCATENATE S1 carrid: LI_SPFLI-CARRID INTO S1. *在状态条显示单击的行与列信息 MESSAGE S208(00) WITH S1. ENDMETHOD. handle_double_click ENDCLASS. lcl_event_recei

28、ver IMPLENTATION *&-* *& Module STATUS_0100 OUTPUT *&-* * 定义状态条、包括菜单、工具条按钮、系统按钮等 *-* MODULE STATUS_0100 OUTPUT. SET PF-STATUS STATUS1. *如果窗口还没有创建ALV对象则创建它 IF WA_CUSTOM_CONTAINER IS INITIAL. CREATE OBJECT WA_CUSTOM_CONTAINER EXPORTING CONTAINER_NAME = WA_CONTAINER. CREATE OBJECT ALV_GRID EXPORTING I_

29、PARENT = WA_CUSTOM_CONTAINER. CALL METHOD ALV_GRID-SET_TABLE_FOR_FIRST_DISPLAY EXPORTING I_STRUCTURE_NAME = SPFLI CHANGING IT_OUTTAB = WA_SPFLI. *ALV对象分配双击事件 CREATE OBJECT EVENT_RECEIVER. SET HANDLER EVENT_RECEIVER-HANDLE_DOUBLE_CLICK FOR ALV_GRID. ENDIF. ENDMODULE. STATUS_0100 OUTPUT *&-* *& Module

30、 USER_COMMAND_0100 INPUT *&-* * 用户交互 *-* MODULE USER_COMMAND_0100 INPUT. SAVE_OK = OK_CODE. CLEAR OK_CODE. CASE SAVE_OK. WHEN EXIT. LEAVE PROGRAM. ENDCASE. ENDMODULE. USER_COMMAND_0100 INPUT 输出界面如图8-7所示。双击时,注意状态条显示的信息:行号、选中列名、航班表中的CONNID和CARRID的值。 图8-7 8.6 通过ALV控件编辑内表和数据库更新 处理过程如下: (1)设定ALV控件可以编辑; (

31、2)退出屏幕时将数据更新到内表; (3)捕捉ALV控件的数据更改信息,将ALV控件的删除行信息保存到内表中; (4)在输出时,比较删除行和最后的内表,删除重复的行; (5)将数据更新到数据表。 【例8.4】 主程序: REPORT YTEST31. DATA: OK_CODE TYPE SY-UCOMM, SAVE_OK TYPE SY-UCOMM. TABLES SPFLI. DATA LS_SPFLI TYPE SPFLI. DATA WA_SPFLI TYPE TABLE OF SPFLI. DATA WADEL_SPFLI TYPE TABLE OF SPFLI. SELECT * I

32、NTO TABLE WA_SPFLI FROM SPFLI. DATA: WA_CONTAINER TYPE SCRFNAME VALUE ALVDATA, ALV_GRID TYPE REF TO CL_GUI_ALV_GRID, WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER. DATA WA_LAYOUT TYPE LVC_S_LAYO. WA_LAYOUT-EDIT = X. CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED. DATA EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER. *-* * CLASS lcl_event_receiver DEFINITION *-* * *-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号