Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Object oriented ALV grid reports?

Former Member
0 Kudos

Can you guide me to write Object oriented ALV grid reports

Thanks In advance

7 REPLIES 7

Former Member
0 Kudos

Hi

see this link

http://www.sapdev.co.uk/reporting/alv/alvtree/alvtree_basic.htm

REPORT Z_ALV_GRID_CONTROLS_DRAG_DROP .

  • ======================================================

  • This program is an example of two ALV Grid controls

  • with Drag and Drop effects between them

  • ======================================================

  • -------------------------------------------------

  • FOR THIS EXAMPLE A CUSTOMER DEFINED TABLE HAS

  • BEEN BUILT IN TRANSACTION SE11,

  • NAMED ZTRANSACTIONS WITH THE FOLLOWING STRUCTURE

  • -------------------------------------------------

  • FIELD NAME | DATA ELEMENT | KEY

  • -------------------------------------------------

  • MANDT | MANDT | yes

  • KUNNR | KUNNR | yes

  • BELNR | MBLNR | yes

  • BLDAT | BLDAT |

  • DMBTR | DMBTR |

  • WAERS | WAERS |

  • -------------------------------------------------

DAta : i_ztransactions type table of zstud

WITH HEADER LINE.

DAta : i_ztransactions2 type table of zstud

WITH HEADER LINE.

DATA : OK_CODE LIKE SY-UCOMM .

DATA : MCONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER .

DATA : MCONTLEFT TYPE REF TO CL_GUI_CONTAINER .

DATA : MCONTRIGHT TYPE REF TO CL_GUI_CONTAINER .

DATA : MSPLITCONT TYPE REF TO

CL_GUI_EASY_SPLITTER_CONTAINER .

DATA : MALV_LEFT TYPE REF TO CL_GUI_ALV_GRID .

DATA : MALV_RIGHT TYPE REF TO CL_GUI_ALV_GRID .

DATA : MROW TYPE LVC_S_ROW .

Data: gs_layout type lvc_s_layo ,

g_behaviour_alv TYPE REF TO CL_DRAGDROP .

DATA : MLINES TYPE I .

----


  • CLASS lcl_dragdropobj DEFINITION

----


  • This is the Class of Drag Drop Object .

  • This Object is used as a temporary storage means

  • of the information extracted with drag

----


CLASS lcl_dragdropobj DEFINITION.

PUBLIC SECTION.

DATA: I_ZTRANSACTIONS TYPE zstud ,

index TYPE i ,

ORIGINAL_TABLE(5) TYPE C ,

PROCEED_TRANS(1) TYPE C .

ENDCLASS.

DATA : MDATA TYPE REF TO LCL_DRAGDROPOBJ .

----


  • CLASS DND_TOOLS DEFINITION

----


  • This class contains the methods responding to the

  • events ONDRAG , ONDROP , ONDROPCOMPLETE

  • of the ALV Grid Controls

----


CLASS DND_TOOLS DEFINITION .

PUBLIC SECTION .

METHODS : HANDLE_DRAG_FROM_LEFT

FOR EVENT ONDRAG OF

CL_GUI_ALV_GRID

IMPORTING

E_ROW

E_DRAGDROPOBJ .

METHODS : HANDLE_DROPCOMPLETE_FROM_LEFT

FOR EVENT ONDROPCOMPLETE OF

CL_GUI_ALV_GRID

IMPORTING

E_ROW

E_DRAGDROPOBJ .

METHODS : HANDLE_DRAG_FROM_RIGHT

FOR EVENT ONDRAG OF

CL_GUI_ALV_GRID

IMPORTING

E_ROW

E_DRAGDROPOBJ .

METHODS : HANDLE_DROPCOMPLETE_FROM_RIGHT

FOR EVENT ONDROPCOMPLETE OF

CL_GUI_ALV_GRID

IMPORTING

E_ROW

E_DRAGDROPOBJ .

METHODS : HANDLE_DROP_TO_LEFT

FOR EVENT ONDROP OF

CL_GUI_ALV_GRID

IMPORTING

E_DRAGDROPOBJ .

METHODS : HANDLE_DROP_TO_RIGHT

FOR EVENT ONDROP OF

CL_GUI_ALV_GRID

IMPORTING

E_DRAGDROPOBJ .

ENDCLASS .

----


  • CLASS DND_TOOLS IMPLEMENTATION

----


CLASS DND_TOOLS IMPLEMENTATION .

  • ----------------------------------------------------

METHOD HANDLE_DRAG_FROM_LEFT .

MROW = E_ROW-INDEX .

READ TABLE I_ZTRANSACTIONS INDEX MROW INTO

I_ZTRANSACTIONS .

CREATE OBJECT MDATA .

MOVE I_ZTRANSACTIONS TO MDATA->I_ZTRANSACTIONS .

MOVE MROW TO MDATA->INDEX .

MOVE 'LEFT' TO MDATA->ORIGINAL_TABLE .

E_DRAGDROPOBJ->OBJECT = MDATA .

ENDMETHOD .

  • ----------------------------------------------------

METHOD HANDLE_DROPCOMPLETE_FROM_LEFT .

  • NB : the following data object MDATA is local to

  • the method and contains the information from the

  • import parameter of the method E_DRAGDROPOBJ

DATA : MDATA TYPE REF TO LCL_DRAGDROPOBJ .

MDATA ?= E_DRAGDROPOBJ->OBJECT .

CHECK MDATA->PROCEED_TRANS = 'X' .

MROW = mdata->INDEX .

DELETE I_ZTRANSACTIONS INDEX MROW .

APPEND MDATA->I_ZTRANSACTIONS TO I_ZTRANSACTIONS2 .

SORT I_ZTRANSACTIONS2 BY ROLLNO.

  • delete i_ztransactions2 where kunnr is initial .

DESCRIBE TABLE i_ztransactions LINES MLINES .

IF MLINES EQ 0 .

CLEAR i_ztransactions .

APPEND i_ztransactions TO i_ztransactions .

ENDIF .

CALL METHOD Malv_LEFT->refresh_table_display.

CALL METHOD Malv_RIGHT->refresh_table_display.

ENDMETHOD .

  • ----------------------------------------------------

METHOD HANDLE_DRAG_FROM_RIGHT.

MROW = E_ROW-INDEX .

READ TABLE I_ZTRANSACTIONS2 INDEX MROW INTO

I_ZTRANSACTIONS2 .

CREATE OBJECT MDATA .

MOVE I_ZTRANSACTIONS2 TO MDATA->I_ZTRANSACTIONS .

MOVE MROW TO MDATA->INDEX .

MOVE 'RIGHT' TO MDATA->ORIGINAL_TABLE .

E_DRAGDROPOBJ->OBJECT = MDATA .

ENDMETHOD .

  • ----------------------------------------------------

METHOD HANDLE_DROPCOMPLETE_FROM_RIGHT .

DATA : MDATA TYPE REF TO LCL_DRAGDROPOBJ .

MDATA ?= E_DRAGDROPOBJ->OBJECT .

CHECK MDATA->PROCEED_TRANS = 'X' .

MROW = mdata->INDEX .

DELETE I_ZTRANSACTIONS2 INDEX MROW .

APPEND MDATA->I_ZTRANSACTIONS TO I_ZTRANSACTIONS .

SORT I_ZTRANSACTIONS BY ROLLNO.

  • delete i_ztransactions where kunnr is initial .

DESCRIBE TABLE i_ztransactions2 LINES MLINES .

IF MLINES EQ 0 .

CLEAR i_ztransactions2 .

APPEND i_ztransactions2 TO i_ztransactions2 .

ENDIF .

CALL METHOD Malv_LEFT->refresh_table_display.

CALL METHOD Malv_RIGHT->refresh_table_display.

ENDMETHOD .

  • ----------------------------------------------------

METHOD HANDLE_DROP_TO_LEFT .

DATA : MDATA TYPE REF TO LCL_DRAGDROPOBJ .

MDATA ?= E_DRAGDROPOBJ->OBJECT .

IF MDATA->ORIGINAL_TABLE = 'RIGHT' .

MDATA->PROCEED_TRANS = 'X' .

ELSE .

MDATA->PROCEED_TRANS = ' ' .

ENDIF .

E_DRAGDROPOBJ->OBJECT = MDATA .

ENDMETHOD .

  • ----------------------------------------------------

METHOD HANDLE_DROP_TO_RIGHT .

DATA : MDATA TYPE REF TO LCL_DRAGDROPOBJ .

MDATA ?= E_DRAGDROPOBJ->OBJECT .

IF MDATA->ORIGINAL_TABLE = 'LEFT' .

MDATA->PROCEED_TRANS = 'X' .

ELSE .

MDATA->PROCEED_TRANS = ' ' .

ENDIF .

E_DRAGDROPOBJ->OBJECT = MDATA .

ENDMETHOD .

ENDCLASS .

data : mlistener type ref to dnd_tools .

  • ======================================================

  • START OF SELECTION

  • ======================================================

START-OF-SELECTION .

PERFORM GET_DATA .

CALL SCREEN 100 .

  • ----------------------------------------------------

  • The screen 100 has the custom control MCONTAINER and

  • on the flow logic has the following modules :

*

  • PROCESS BEFORE OUTPUT.

*

  • MODULE STATUS_0100.

*

  • MODULE PREPARE_SCREEN .

*

  • PROCESS AFTER INPUT.

*

  • MODULE USER_COMMAND_0100.

*

  • ----------------------------------------------------

  • (Off course not commented out in the real flow logic)

  • ----------------------------------------------------

----


  • FORM GET_DATA *

----


  • FOR THIS EXAMPLE THE DATA SELECTION IS HARD CODED

  • ----------------------------------------------------*

FORM GET_DATA .

SELECT * FROM ZSTUD

INTO TABLE I_ZTRANSACTIONS.

CLEAR : i_ztransactions2,

i_ztransactions2[] .

APPEND i_ztransactions2 .

ENDFORM .

&----


*& Module STATUS_0100 OUTPUT

&----


  • -----------------------------------------------------

  • The PF STATUS STATUS100 called from the module below,

  • has on the Standard toolbar the buttons

  • BACK , EXIT and CANCEL .

  • These buttons are provided with function code = 'EXIT'

  • -----------------------------------------------------

MODULE STATUS_0100 OUTPUT.

set titlebar 'TITLEDRAGDROP' WITH SY-REPID 'BY' SY-UNAME.

SET PF-STATUS 'STATUS100'.

ENDMODULE. " STATUS_0100 OUTPUT

  • -----------------------------------------------------*

  • Module USER_COMMAND_0100 INPUT

  • -----------------------------------------------------*

  • The following module checks the User Command and ends

  • the program

  • ------------------------------------------------------

MODULE USER_COMMAND_0100 INPUT.

IF OK_CODE = 'EXIT' .

CLEAR : MCONTAINER ,

MCONTLEFT ,

MCONTRIGHT ,

MSPLITCONT ,

MALV_LEFT ,

MALV_RIGHT .

LEAVE TO SCREEN 0 .

ENDIF .

ENDMODULE. " USER_COMMAND_0100 INPUT

&----


*& Module PREPARE_SCREEN OUTPUT

&----


MODULE PREPARE_SCREEN OUTPUT.

IF MCONTAINER IS INITIAL .

CREATE OBJECT MCONTAINER

EXPORTING

CONTAINER_NAME = 'MCONTAINER' .

CREATE OBJECT MSPLITCONT

EXPORTING

PARENT = MCONTAINER

ORIENTATION = 1 .

MCONTLEFT = MSPLITCONT->TOP_LEFT_CONTAINER .

MCONTRIGHT = MSPLITCONT->BOTTOM_RIGHT_CONTAINER .

CREATE OBJECT MALV_LEFT

EXPORTING I_PARENT = MCONTLEFT .

CREATE OBJECT MALV_RIGHT

EXPORTING I_PARENT = MCONTRIGHT .

perform set_layout_capable_of_drag_dro

USING 'X' 'X' .

CALL METHOD MALV_LEFT->SET_TABLE_FOR_FIRST_DISPLAY

EXPORTING

I_STRUCTURE_NAME = 'ZSTUD'

IS_LAYOUT = gS_LAYOUT

CHANGING

IT_OUTTAB = I_ZTRANSACTIONS[] .

CALL METHOD MALV_RIGHT->SET_TABLE_FOR_FIRST_DISPLAY

EXPORTING

I_STRUCTURE_NAME = 'ZSTUD'

IS_LAYOUT = gs_layout

CHANGING

IT_OUTTAB = I_ZTRANSACTIONS2[] .

create object mlistener .

SET HANDLER mlistener->HANDLE_DRAG_FROM_LEFT

FOR MALV_LEFT .

SET HANDLER mlistener->HANDLE_dROPcomplete_FROM_LEFT

FOR MALV_LEFT .

SET HANDLER mlistener->HANDLE_DRAG_FROM_RIGHT

FOR MALV_RIGHT.

SET HANDLER mlistener->HANDLE_dROPcomplete_FROM_RIGHT

FOR MALV_RIGHT .

SET HANDLER mlistener->HANDLE_DROP_TO_RIGHT

FOR MALV_RIGHT .

SET HANDLER mlistener->HANDLE_DROP_TO_LEFT

FOR MALV_LEFT .

ENDIF .

ENDMODULE. " PREPARE_SCREEN OUTPUT

  • -----------------------------------------------------*

  • Form SET_LAYOUT_CAPABLE_OF_DRAG_DRO

  • -----------------------------------------------------*

  • Definition of a Drag & Drop behaviour for the ALV

  • grid

  • ------------------------------------------------------

FORM SET_LAYOUT_CAPABLE_OF_DRAG_DRO USING DRAG DROP.

data : effect type i ,

handle_alv TYPE i .

CREATE OBJECT g_behaviour_alv.

effect = cl_dragdrop=>move + cl_dragdrop=>copy .

CALL METHOD g_behaviour_alv->add

EXPORTING

flavor = 'Line'

dragsrc = DRAG

droptarget = DROP

effect = effect.

CALL METHOD g_behaviour_alv->get_handle

IMPORTING

handle = handle_alv.

gs_layout-s_dragdrop-row_ddid = handle_alv.

ENDFORM. " SET_LAYOUT_CAPABLE_OF_DRAG_DRO

Former Member
0 Kudos

Hi,

Check the following link:

http://sapdev.co.uk/index.htm

Regards,

Bhaskar

ak_upadhyay
Contributor
0 Kudos

Hi,

Here are a few classes used in ALV, just read through their documentation or look at how they've been implemented in your system and you'll get a good idea on how to use them:

CL_ALV_EVENT_DATA (Changing Data Container for Events)

CL_ALV_EVENT_TOOLBAR_SET (ALV Context menu)

CL_ALV_TABLE_CREATE (Dynamic Creation of ALV Data Table)

CL_ALV_TREE_BASE (Basis Class ALV Tree Control)

CL_CK_ALVTREE_NKEY_2_OBJECT (Converter Node Key Object)

CL_COST_COSTINGVERSION_ALV (Display Costing Versions)

CL_GUI_ALV_GRID (List Viewer)

CL_GUI_ALV_GRID_BASE (Basis Class for ALV grid)

CL_GUI_ALV_TREE (ALV Tree Control)

CL_GUI_ALV_TREE_SIMPLE (Simple ALV Tree)

Sample:


DATA: lcl_alv TYPE REF TO cl_gui_alv_grid,
      t_flights TYPE STANDARD TABLE OF FLIGHTS.
 
SELECT * FROM flights INTO TABLE t_flights.
 
CREATE OBJECT lcl_alv
    EXPORTING I_PARENT = cl_gui_container=>screen0.
 
CALL METHOD lcl_alv->set_table_for_first_display
    EXPORTING
       I_STRUCTURE_NAME = 'FLIGHTS'
    CHANGING
       IT_OUTTAB = t_flights.
 
CALL SCREEN 100.
 

Reward points if useful....

Regards

AK

Former Member
0 Kudos

Hi,

In se38 there are standard oalv reports which starts with Bcalv*.

Try with these reports,

Regards,

Sindhu

Former Member
0 Kudos

Hi,

Using two classes you can do it.

first create a custom container on which you will place your grid.

This source code will help you.

DATA: r_container type ref to cl_gui_custom_container,

r_alv_grid type ref to cl_gui_alv_grid.

then create object of the container class

CREATE OBJECT r_container

EXPORTING

i_parent = r_container

EXCEPTIONS

**Handle them

call the method

CALL METHOD r_alv_grid->set_table_for_first_display

EXPORTING

i_structure_name = ' Mention the name of the structure

CHANGING

it_outtab = ' final internal table u want to pass to grid

.

you can also create a filedcatalogue using

DATA: it_fieldcat type lvc_t_fcat,

wa_fieldcat like line of it_fieldcat .

then mention all the fields of the struture like this

wa_fieldcat-fieldname = 'PHONE'

wa_fieldcat-ref_field = 'TELEPHONE'.

wa_fieldcat-ref_table = 'SCUSTOM'.

wa_fieldcat-col_pos = 4.

append wa_fieldcat to it_fieldcat.

and pass this in the parameter of table set_table_for_first_table

it_fieldcatalogue = it_fieldcat.

Just try this.

Regards

Khushboo

Former Member
0 Kudos

Hi,

Please refer to the SAP standard demo programs BCALV*.

Thanks,

Sriram Ponna.

Former Member
0 Kudos

Hi,

Go to SE38 in the menu bar go to Environment->examples->control examples.

Or

In SE38 try BCALV*

Thanks,

Suman