Multiple ALVs on Single Screen Using ABAP Objects
来源:互联网 发布:linux lvs 负载均衡 编辑:程序博客网 时间:2024/04/28 08:08
Keywords
ABAP, ALV, Splitter, Custom Controller,Double click event of ALV
Introduction
There aremany situations in which one needs to display multiple ALV’s in a single Report.In such a situation there are two solutions i.e. we can go for eitherProcedural Programming or ABAP Objects Concept to cater to our need.
When wedecide to go for Procedural Programming concept, we have to make use of thefunction modules:
REUSE_ALV_BLOCK_LIST_INIT toinitialize the block before appending ALV’s,REUSE_ALV_FIELDCATALOG_MERGE to build a field catalogautomatically,REUSE_ALV_BLOCK_LIST_APPENDto append ALV’s; and finally REUSE_ALV_BLOCK_LIST_DISPLAYto display the ALV.
Aproblem with this approach is in order to create a field catalog automaticallywe will use the FM,REUSE_ALV_FIELDCATALOG_MERGEbut it does not work if the internal table is created usingLIKE instead ofTYPE and hence we might have to create a field catalog manually.
Alsothe ALV list is full-screen size and cannot be moved whereas when created usingABAB Objects it can be easily resized and moved.
The secondoption that we have is to go for ABAP Objects. In ABAP Objects again we havetwo options. We can either go for a single Container and split it using Splitters or we can go for multiple Containers.
1 Single Container
In this method we create a single container and then split it to rows and columns. We can then use these splitted portions as containers.
Steps:
1. Create aScreen and place aCustom Control in it.
1. Create the internal tableswhose data is required to be displayed.
2. Create an object each ofCL_GUI_CUSTOM_CONTAINER andCL_GUI_ALV_GRID.
3. Create splitter objects oftypeCL_GUI_SPLITTER_CONTAINER.
4. Write the Flow Logic for thescreen.
Code:
*&---------------------------------------------------------------------**& Report YIRIS_ALV_MULTIPLE_ALV*&*&---------------------------------------------------------------------*REPORT yiris_alv_multiple_alv.DATA: splitter TYPE REF TO cl_gui_splitter_container, c_container TYPE REF TO cl_gui_custom_container, container_1 TYPE REF TO cl_gui_container, container_2 TYPE REF TO cl_gui_container, g_container TYPE scrfname VALUE 'CONTAINER', grid_1 TYPE REF TO cl_gui_alv_grid, grid_2 TYPE REF TO cl_gui_alv_grid.DATA: ok_code TYPE sy-ucomm.DATA: it_vbak TYPE TABLE OF vbak, it_vbap TYPE TABLE OF vbap, gs_vbak TYPE vbak.CLASS lcl_event_receiver DEFINITION DEFERRED."for ALV double click eventDATA: event_receiver TYPE REF TO lcl_event_receiver..*fetch the Sales Order data into internal tableSELECT * INTO TABLE it_vbak FROM vbak up to 5 rows where vbeln >= '0000000016'.CALL SCREEN 900.*----------------------------------------------------------------------** CLASS lcl_event_receiver DEFINITION*----------------------------------------------------------------------***----------------------------------------------------------------------*CLASS lcl_event_receiver DEFINITION. PUBLIC SECTION. METHODS catch_doubleclick FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row e_column es_row_no.ENDCLASS. "lcl_event_receiver DEFINITION*----------------------------------------------------------------------** CLASS lcl_event_receiver IMPLEMENTATION*----------------------------------------------------------------------***----------------------------------------------------------------------*CLASS lcl_event_receiver IMPLEMENTATION. METHOD catch_doubleclick. DATA: lt_row TYPE lvc_t_row, ls_row LIKE LINE OF lt_row, lv_index TYPE i. CLEAR: lt_row,ls_row,gs_vbak. REFRESH: lt_row. CALL METHOD grid_1->get_selected_rows IMPORTING et_index_rows = lt_row. READ TABLE lt_row INTO ls_row INDEX 1. READ TABLE it_vbak INTO gs_vbak INDEX ls_row-index. CLEAR: it_vbap. REFRESH: it_vbap. SELECT * INTO TABLE it_vbap FROM vbap WHERE vbeln = gs_vbak-vbeln. CALL METHOD grid_2->set_table_for_first_display EXPORTING i_structure_name = 'VBAP' CHANGING it_outtab = it_vbap. CALL METHOD grid_2->refresh_table_display. ENDMETHOD. "catch_doubleclickENDCLASS. "lcl_event_receiver IMPLEMENTATION*&---------------------------------------------------------------------**& Module pbo_0900 OUTPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE pbo_0900 OUTPUT. IF c_container IS INITIAL.*create object reference for the container CREATE OBJECT c_container EXPORTING container_name = 'CONTAINER'.*split the container into two container CREATE OBJECT splitter EXPORTING parent = c_container rows = 2 columns = 1.*get the refernce for the splitted containers CALL METHOD splitter->get_container EXPORTING row = 1 column = 1 RECEIVING container = container_1. CALL METHOD splitter->get_container EXPORTING row = 2 column = 1 RECEIVING container = container_2.*put the internal table data into the container IF grid_1 IS NOT BOUND. CREATE OBJECT grid_1 EXPORTING i_parent = container_1. ENDIF.*handle double click event of grid_1 CREATE OBJECT event_receiver. SET HANDLER event_receiver->catch_doubleclick FOR grid_1. CALL METHOD grid_1->set_table_for_first_display EXPORTING i_structure_name = 'VBAK' CHANGING it_outtab = it_vbak. IF grid_2 IS NOT BOUND. CREATE OBJECT grid_2 EXPORTING i_parent = container_2. ENDIF. CLEAR: gs_vbak, it_vbap. REFRESH: it_vbap. READ TABLE it_vbak INTO gs_vbak INDEX 1. SELECT * INTO TABLE it_vbap FROM vbap WHERE vbeln = gs_vbak-vbeln.*Display Sales Order Items of the first Sales order in defact CALL METHOD grid_2->set_table_for_first_display EXPORTING i_structure_name = 'VBAP' CHANGING it_outtab = it_vbap. CALL METHOD grid_2->refresh_table_display. ENDIF.ENDMODULE. " pbo_0900 OUTPUT*&---------------------------------------------------------------------**& Module STATUS_0900 OUTPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE status_0900 OUTPUT. SET PF-STATUS 'STA_0900'.ENDMODULE. " STATUS_0900 OUTPUT*&---------------------------------------------------------------------**& Module USER_COMMAND_0900 INPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*module USER_COMMAND_0900 input. CASE ok_code. WHEN 'BACK'. LEAVE TO SCREEN 0. WHEN 'EXIT'. LEAVE PROGRAM. ENDCASE.endmodule. " USER_COMMAND_0900 INPUT
Output:
The ALV report generated is given below.
Different Sales Order Itemswill be dispalyed when we double click the second record of the first ALV
2 Multiple Containers
In this method we create multiplecontainers and put the data into these containers. As we create multiplecontainers in the same screen they give us multiple ALV’s in the same screen.
Steps:
1. Create aScreen and place more than oneCustom Controls in it.
1. Create the internal tableswhose data is required to be displayed.
2. Create an object each ofCL_GUI_CUSTOM_CONTAINER andCL_GUI_ALV_GRID.
3. Write the Flow Logic for theScreen.
Code:
*&---------------------------------------------------------------------**& Report YIRIS_ALV_MULTIPLE_ALV_2*&*&---------------------------------------------------------------------*REPORT yiris_alv_multiple_alv_2.DATA: c_container_1 TYPE REF TO cl_gui_custom_container, c_container_2 TYPE REF TO cl_gui_custom_container, g_container_1 TYPE scrfname VALUE 'CONTAINER1', g_container_2 TYPE scrfname VALUE 'CONTAINER2', grid_1 TYPE REF TO cl_gui_alv_grid, grid_2 TYPE REF TO cl_gui_alv_grid.DATA: ok_code TYPE sy-ucomm.DATA: it_vbak TYPE TABLE OF vbak, it_vbap TYPE TABLE OF vbap, gs_vbak TYPE vbak.CLASS lcl_event_receiver DEFINITION DEFERRED."for ALV double click eventDATA: event_receiver TYPE REF TO lcl_event_receiver.*fetch the Sales Order data into internal tableSELECT * INTO TABLE it_vbak FROM vbak UP TO 5 ROWS WHERE vbeln >= '0000000016'.CALL SCREEN 0900.*----------------------------------------------------------------------** CLASS lcl_event_receiver DEFINITION*----------------------------------------------------------------------***----------------------------------------------------------------------*CLASS lcl_event_receiver DEFINITION. PUBLIC SECTION. METHODS catch_doubleclick FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row e_column es_row_no.ENDCLASS. "lcl_event_receiver DEFINITION*----------------------------------------------------------------------** CLASS lcl_event_receiver IMPLEMENTATION*----------------------------------------------------------------------***----------------------------------------------------------------------*CLASS lcl_event_receiver IMPLEMENTATION. METHOD catch_doubleclick. DATA: lt_row TYPE lvc_t_row, ls_row LIKE LINE OF lt_row, lv_index TYPE i. CLEAR: lt_row,ls_row,gs_vbak. REFRESH: lt_row. CALL METHOD grid_1->get_selected_rows IMPORTING et_index_rows = lt_row. READ TABLE lt_row INTO ls_row INDEX 1. READ TABLE it_vbak INTO gs_vbak INDEX ls_row-index. CLEAR: it_vbap. REFRESH: it_vbap. SELECT * INTO TABLE it_vbap FROM vbap WHERE vbeln = gs_vbak-vbeln. CALL METHOD grid_2->set_table_for_first_display EXPORTING i_structure_name = 'VBAP' CHANGING it_outtab = it_vbap. CALL METHOD grid_2->refresh_table_display. ENDMETHOD. "catch_doubleclickENDCLASS. "lcl_event_receiver IMPLEMENTATION*&---------------------------------------------------------------------**& Module PBO_0900 OUTPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE pbo_0900 OUTPUT. IF c_container_1 IS INITIAL. CREATE OBJECT c_container_1 EXPORTING container_name = g_container_1. ENDIF. IF grid_1 IS NOT BOUND. CREATE OBJECT grid_1 EXPORTING i_parent = c_container_1. ENDIF.*handle double click event of grid_1 CREATE OBJECT event_receiver. SET HANDLER event_receiver->catch_doubleclick FOR grid_1. CALL METHOD grid_1->set_table_for_first_display EXPORTING i_structure_name = 'VBAK' CHANGING it_outtab = it_vbak. IF c_container_2 IS NOT BOUND. CREATE OBJECT c_container_2 EXPORTING container_name = g_container_2. ENDIF. IF grid_2 IS INITIAL. CREATE OBJECT grid_2 EXPORTING i_parent = c_container_2. ENDIF. CLEAR: gs_vbak, it_vbap. REFRESH: it_vbap. READ TABLE it_vbak INTO gs_vbak INDEX 1. SELECT * INTO TABLE it_vbap FROM vbap WHERE vbeln = gs_vbak-vbeln.*Display Sales Order Items of the first Sales order in defact CALL METHOD grid_2->set_table_for_first_display EXPORTING i_structure_name = 'VBAP' CHANGING it_outtab = it_vbap. CALL METHOD grid_2->refresh_table_display.ENDMODULE. " PBO_0900 OUTPUT*&---------------------------------------------------------------------**& Module STATUS_0900 OUTPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE status_0900 OUTPUT. SET PF-STATUS 'STAS_0900'.*ENDMODULE. " STATUS_0900 OUTPUT*&---------------------------------------------------------------------**& Module USER_COMMAND_0900 INPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE user_command_0900 INPUT. CASE ok_code. WHEN 'EXIT'. LEAVE PROGRAM. WHEN 'BACK'. LEAVE TO SCREEN 0. ENDCASE.ENDMODULE. " USER_COMMAND_0900 INPUT
Output:
The ALVreport generated is given below.
Different Sales Order Itemswill be dispalyed when we double click the second record of the first ALV
- Multiple ALVs on Single Screen Using ABAP Objects
- abap alv multiple header using write
- Dropping multiple SQL Server objects with a single DROP statement
- Multiple DataNodes on a single machine
- Pattern matching on Java objects using Tom
- Using multiple CGLayer objects to draw a flag
- Single Sign-on Using Kerberos in Java
- Single Sign On using LDAP + Kerberos
- Single Sign-on Using Kerberos in Java
- Multiple Screen
- Using multiple LLVM versions on Ubuntu
- Easier Windows Event Multiplexing on Waiting for Multiple Objects
- Using Lua and C++ interchangably on C++ objects
- Running a function on multiple elements using Jquery .each()
- ABAP AT SELECTION-SCREEN ON VALUE-REQUEST / PROGRESS ON VALUE-REQUEST
- 运动相机检测无人机-- Detecting Flying Objects using a Single Moving Camera
- Using a modeless .NET dialog to display properties of multiple AutoCAD objects
- Using a palette from .NET to display properties of multiple AutoCAD objects
- linux 下查看系统资源和负载,以及性能监控
- Android Studio系列教程(一)
- 英文金曲大赛
- POJ 3083 Children of the Candy Corn(走迷宫)
- 五款可以取代 Slack 的开源工具
- Multiple ALVs on Single Screen Using ABAP Objects
- 如何获取 RadPivotFieldList 中的 Row / Column Labels 里面的 filter
- 移动前端手机输入法自带emoji表情字符处理
- android studio 新建工程一直显示resolve dependence
- HTML5离线篇收藏--- cache manifest
- Leetcode(1)-happy数
- oracle userenv函数 、sys_context(NLS)
- Freemarker 网页静态化(二) - 模板
- Ajax数据请求