10-08-2008 1:29 PM
Hi,
i want to use the "new" ALV object model. My question now ist whether this object model support drag and drop? I couldn´t find any examples for that.
I´ve found a class called CL_SALV_DRAG_DROP. But it seems that this class isn´t used...
Thanks in advance for your help.
Regards,
Andy
10-08-2008 2:04 PM
Check out this link it may be helpful,
http://help.sap.com/saphelp_47x200/helpdata/EN/87/1a4db7a3ad11d2bd69080009b4534c/frameset.htm
Regards,
Midhun Abraham
10-08-2008 2:17 PM
Hi,
> Check out this link it may be helpful,
>
> http://help.sap.com/saphelp_47x200/helpdata/EN/87/1a4db7a3ad11d2bd69080009b4534c/frameset.htm
>
thanks for the link.
As I said in my origin post I want to use the ALV object model (class CL_SALV_TABLE). There I couldn´t find a possibility to subscribe to the events ON_DRAG, ON_DROP, etc. Therefore I´m wondering whether the Drag & Drop functionality can be used in the ALV object model, at all...
Regards,
Andy
12-10-2009 10:45 AM
12-10-2009 9:39 AM
Hi,
I've got the same problem and I solved it by grabbing the ALV_GRID behind the SALV instance through an adapter.
Once you get the reference to the ALV grid you can declare and use your drag and drop events (and others functionnalities also...) as usual.
I've attached a small progam as example.
Hope it helps you
Regards,
*&---------------------------------------------------------------------*
*& Report ZTESTDND_WTH_SALV
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTESTDND_WTH_SALV.
CLASS LCL_APPLICATION DEFINITION DEFERRED.
CLASS LCL_SALV_MODEL DEFINITION DEFERRED.
DATA G_APP TYPE REF TO LCL_APPLICATION.
DATA CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA GRID1_SALV TYPE REF TO CL_SALV_TABLE.
DATA DRAG TYPE REF TO CL_DRAGDROP.
DATA CONTAINER2 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA GRID2_SALV TYPE REF TO CL_SALV_TABLE.
DATA DROP TYPE REF TO CL_DRAGDROP.
DATA OK_CODE TYPE SY-UCOMM.
DATA GT_OUTTAB1 TYPE STANDARD TABLE OF T001.
DATA GT_OUTTAB2 TYPE STANDARD TABLE OF T001.
*----------------------------------------------------------------------*
* CLASS LCL_SALV_MODEL DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_SALV_MODEL DEFINITION INHERITING FROM CL_SALV_MODEL_LIST.
PUBLIC SECTION.
DATA: O_CONTROL TYPE REF TO CL_SALV_CONTROLLER_MODEL,
O_ADAPTER TYPE REF TO CL_SALV_ADAPTER.
METHODS:
GRABE_MODEL
IMPORTING
IO_MODEL TYPE REF TO CL_SALV_MODEL,
GRABE_CONTROLLER,
GRABE_ADAPTER.
PRIVATE SECTION.
DATA: LO_MODEL TYPE REF TO CL_SALV_MODEL.
ENDCLASS. "LCL_SALV_MODEL DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_dragdrop DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_DRAGDROP DEFINITION.
PUBLIC SECTION.
DATA: T001 TYPE T001,
INDEX TYPE I. "Index of Line to be moved
ENDCLASS. "LCL_DRAGDROP DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_salv_model IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_SALV_MODEL IMPLEMENTATION.
METHOD GRABE_MODEL.
* save the model
LO_MODEL = IO_MODEL.
ENDMETHOD. "grabe_model
METHOD GRABE_CONTROLLER.
* save the controller
O_CONTROL = LO_MODEL->R_CONTROLLER.
ENDMETHOD. "grabe_controller
METHOD GRABE_ADAPTER.
* save the adapter from controller
O_ADAPTER ?= LO_MODEL->R_CONTROLLER->R_ADAPTER.
ENDMETHOD. "grabe_adapter
ENDCLASS. "LCL_SALV_MODEL IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_application DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION DEFINITION.
PUBLIC SECTION.
METHODS PBO_100.
PRIVATE SECTION.
DATA O_SALV_MODEL TYPE REF TO LCL_SALV_MODEL.
METHODS:
HANDLE_GRID1_DRAG
FOR EVENT ONDRAG
OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN E_DRAGDROPOBJ,
HANDLE_GRID2_DROP
FOR EVENT ONDROP
OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN E_DRAGDROPOBJ.
METHODS GRAB_SALV_GRID
IMPORTING
IM_GRID TYPE REF TO CL_SALV_TABLE
RETURNING VALUE(RE_GRID) TYPE REF TO CL_GUI_ALV_GRID.
ENDCLASS. "lcl_application DEFINITION
*---------------------------------------------------------------------*
* CLASS LCL_APPLICATION IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS LCL_APPLICATION IMPLEMENTATION.
*-------------------------------------------------------------------
METHOD PBO_100.
DATA L_LAYOUT TYPE LVC_S_LAYO.
DATA EFFECT TYPE I.
DATA L_GRID_ALV TYPE REF TO CL_GUI_ALV_GRID.
SET PF-STATUS '100'.
CHECK CONTAINER1 IS NOT BOUND.
CREATE OBJECT CONTAINER1
EXPORTING
CONTAINER_NAME = 'GRID1'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT CONTAINER2
EXPORTING
CONTAINER_NAME = 'GRID2'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*** build SALV Table
TRY.
CALL METHOD CL_SALV_TABLE=>FACTORY
EXPORTING
R_CONTAINER = CONTAINER1
IMPORTING
R_SALV_TABLE = GRID1_SALV
CHANGING
T_TABLE = GT_OUTTAB1.
CATCH CX_SALV_MSG .
ENDTRY.
*** it is required to execute the display method otherwise the adapter
*** will not been instantiated when grabbing the alv grid
GRID1_SALV->DISPLAY( ).
*** Grab the ALV grid from SALV_TABLE
L_GRID_ALV = GRAB_SALV_GRID( GRID1_SALV ).
*** Now the L_GRID_ALV is a reference to the ALV grid of the SALV table object
*** set the DRAG event handler
SET HANDLER G_APP->HANDLE_GRID1_DRAG FOR L_GRID_ALV.
*** set the drag linkage
CREATE OBJECT DRAG.
CALL METHOD DRAG->ADD
EXPORTING
FLAVOR = 'Line' "#EC NOTEXT
DRAGSRC = 'X'
DROPTARGET = ' '
EFFECT = CL_DRAGDROP=>COPY.
CALL METHOD DRAG->GET_HANDLE
IMPORTING
HANDLE = L_LAYOUT-S_DRAGDROP-GRID_DDID.
*** set the drag handle into the SAVL table 1 through the grabbed alv grid
CALL METHOD L_GRID_ALV->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = L_LAYOUT.
*** repeat the same process for the second grid
TRY.
CALL METHOD CL_SALV_TABLE=>FACTORY
EXPORTING
R_CONTAINER = CONTAINER2
IMPORTING
R_SALV_TABLE = GRID2_SALV
CHANGING
T_TABLE = GT_OUTTAB2.
CATCH CX_SALV_MSG .
ENDTRY.
GRID2_SALV->DISPLAY( ).
L_GRID_ALV = GRAB_SALV_GRID( GRID2_SALV ).
SET HANDLER G_APP->HANDLE_GRID2_DROP FOR L_GRID_ALV.
CREATE OBJECT DROP.
CALL METHOD DROP->ADD
EXPORTING
FLAVOR = 'Line' "#EC NOTEXT
DRAGSRC = ' '
DROPTARGET = 'X'
EFFECT = CL_DRAGDROP=>COPY.
CALL METHOD DROP->GET_HANDLE
IMPORTING
HANDLE = L_LAYOUT-S_DRAGDROP-CNTR_DDID.
CALL METHOD L_GRID_ALV->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = L_LAYOUT.
ENDMETHOD. "pbo_100
METHOD HANDLE_GRID1_DRAG.
DATA: DATAOBJ TYPE REF TO LCL_DRAGDROP.
CREATE OBJECT DATAOBJ.
READ TABLE GT_OUTTAB1 INTO DATAOBJ->T001 INDEX E_ROW-INDEX .
MOVE E_ROW-INDEX TO DATAOBJ->INDEX.
E_DRAGDROPOBJ->OBJECT = DATAOBJ.
ENDMETHOD. "handle_alv_drag
*--------------------------------------------------------------------
METHOD HANDLE_GRID2_DROP.
DATA: DATAOBJ TYPE REF TO LCL_DRAGDROP.
CATCH SYSTEM-EXCEPTIONS MOVE_CAST_ERROR = 1.
DATAOBJ ?= E_DRAGDROPOBJ->OBJECT.
ENDCATCH.
IF SY-SUBRC = 1.
CALL METHOD E_DRAGDROPOBJ->ABORT.
EXIT.
ENDIF.
APPEND DATAOBJ->T001 TO GT_OUTTAB2.
GRID2_SALV->REFRESH( ).
ENDMETHOD. "handle_tree_drop
*-------------------------------------------------------------------
METHOD GRAB_SALV_GRID.
*** use the following adapter when ctrl is in a container
DATA LO_ADAP TYPE REF TO CL_SALV_GRID_ADAPTER.
*** use the following adapter when ctrl is in full screen mode
* DATA LO_ADAP TYPE REF TO CL_SALV_FULLSCREEN_ADAPTER.
DATA: LO_ALV_MOD TYPE REF TO CL_SALV_MODEL.
* Narrow casting
LO_ALV_MOD ?= IM_GRID.
* object for the local inherited class from the CL_SALV_MODEL_LIST
CREATE OBJECT O_SALV_MODEL.
* grabe model to use it later
CALL METHOD O_SALV_MODEL->GRABE_MODEL
EXPORTING
IO_MODEL = LO_ALV_MOD.
CALL METHOD O_SALV_MODEL->GRABE_CONTROLLER.
* Adapter
CALL METHOD O_SALV_MODEL->GRABE_ADAPTER.
* Adapter (Down Casting)
LO_ADAP ?= O_SALV_MODEL->O_ADAPTER.
* Get the Grid
RE_GRID = LO_ADAP->GET_GRID( ).
ENDMETHOD. "grab_salv_grid
ENDCLASS. "lcl_application IMPLEMENTATION
*----------------------------------------------------------------------*
* MODULE USER_COMMAND_0100 INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE OK_CODE.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PBO_0100 OUTPUT.
G_APP->PBO_100( ).
ENDMODULE. "STATUS_0100 OUTPUT
START-OF-SELECTION.
CREATE OBJECT G_APP.
SELECT * FROM T001 INTO TABLE GT_OUTTAB1.
CALL SCREEN 100.
10-06-2011 7:24 AM
10-07-2011 3:27 PM