04-02-2008 1:03 PM
Can you guide me to write Object oriented ALV grid reports
Thanks In advance
04-02-2008 1:07 PM
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
04-02-2008 1:09 PM
04-02-2008 1:09 PM
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
04-02-2008 1:12 PM
Hi,
In se38 there are standard oalv reports which starts with Bcalv*.
Try with these reports,
Regards,
Sindhu
04-02-2008 1:14 PM
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
04-02-2008 1:22 PM
Hi,
Please refer to the SAP standard demo programs BCALV*.
Thanks,
Sriram Ponna.
04-02-2008 1:27 PM
Hi,
Go to SE38 in the menu bar go to Environment->examples->control examples.
Or
In SE38 try BCALV*
Thanks,
Suman