06-25-2008 3:04 PM
Hi Sap Gurus,
I have a requirment where i need to drag multiple lines (TO's) in ALV & Drop in a Queue.
I am sucessfull in dragging & dropping asingle line item into the queue, but am unsuccessfull in dragging multiple lines.
Does ALV support multiple Lines Drag & Drop ?
Any responce is higly appreciated.
Thanks & Regards,
Sridhar.
06-25-2008 11:51 PM
Hi Sriddy,
I'm not sure about ALV, but you can certainly do it with the TREE control. Look at sample program RSDEMO_DRAG_DROP_TREE_MULTI.
Cheers
Graham Robbo
06-25-2008 11:58 PM
check this code:
REPORT zalv_dragdrop.*Structure declaration for T016T
TYPES : BEGIN OF ty_t016t,
brsch TYPE brsch,
brtxt TYPE text1_016t,
spras TYPE spras,
END OF ty_t016t.*Work area and internal table for T016T
DATA : it_t016t TYPE STANDARD TABLE OF ty_t016t,
wa_t016t TYPE ty_t016t.*class declaration
CLASS lcl_objdragdropapp DEFINITION DEFERRED.*data declarations for alv
DATA: c_dragdropapp TYPE REF TO lcl_objdragdropapp,
c_dockingcont TYPE REF TO cl_gui_docking_container,
c_alv TYPE REF TO cl_gui_alv_grid,
reference variable to CL_DRAGDROP:
c_dragdropalv TYPE REF TO cl_dragdrop,
it_layout TYPE lvc_s_layo,
it_fcat TYPE lvc_t_fcat. "Field catalogue*declarations for handle event
DATA: effect TYPE i,
handle_alv TYPE i.initialization eventINITIALIZATION.start of selection event
START-OF-SELECTION.*select data
PERFORM fetch_data.*ALV output
PERFORM alv_output.* Class definitions and method implementation for drag and drop
CLASS lcl_dragdrop DEFINITION.
PUBLIC SECTION.
DATA: wa TYPE ty_t016t,
index TYPE i. "Index of Line to be movedENDCLASS. "LCL_DRAGDROP DEFINITION*Application class definition
CLASS lcl_objdragdropapp DEFINITION. PUBLIC SECTION.
METHODS:
*Handling Event Drag
handle_alv_drag
FOR EVENT ondrag
OF cl_gui_alv_grid
IMPORTING e_row e_column e_dragdropobj,*Handling event DROP
handle_alv_drop
FOR EVENT ondrop
OF cl_gui_alv_grid
IMPORTING e_row e_column e_dragdropobj.ENDCLASS. "LCL_objdragdropapp DEFINITION*Application class implementation
CLASS lcl_objdragdropapp IMPLEMENTATION.* OnDrag event is used to 'fetch' information from the drag source.
METHOD handle_alv_drag.
DATA: dataobj TYPE REF TO lcl_dragdrop,
line TYPE ty_t016t.
Read dragged row
READ TABLE it_t016t INDEX e_row-index INTO line.* create and fill dataobject for events ONDROP
CREATE OBJECT dataobj.* Remembering row index to move a line
MOVE e_row-index TO dataobj->index.* store the dragged line.
READ TABLE it_t016t INTO dataobj->wa INDEX e_row-index.* Assigning data object to the refering event parameter e_dragdropobj->object = dataobj. ENDMETHOD. "HANDLE_ALV_DRAG*Event handler for event 'OnDrop'. This event is used
*to use your dragged information in combination with your drop source. METHOD handle_alv_drop. DATA: dataobj TYPE REF TO lcl_dragdrop,
drop_index TYPE i,
stable TYPE lvc_s_stbl.* Refresh Alv Grid Control without scrolling
stable-row = 'X'.
stable-col = 'X'.
Catch-Statement to ensure the drag&drop-Operation is aborted properly. CATCH SYSTEM-EXCEPTIONS move_cast_error = 1. dataobj ?= e_dragdropobj->object. DELETE it_t016t INDEX dataobj->index.
INSERT dataobj->wa INTO it_t016t INDEX e_row-index.*Refreshing the ALV
CALL METHOD c_alv->refresh_table_display
EXPORTING
i_soft_refresh = 'X'
is_stable = stable. ENDCATCH.
IF sy-subrc <> 0.* If anything went wrong aborting the drag and drop operation: CALL METHOD e_dragdropobj->abort. ENDIF. ENDMETHOD. "HANDLE_ALV_DROPENDCLASS. "LCL_objdragdropapp IMPLEMENTATION&----
*& Form alv_output
&----
text
----
--> p1 text
<-- p2 text
----
FORM alv_output . CALL SCREEN 600.
ENDFORM. " alv_output** Calling the ALV screen with custom container
On this statement double click it takes you to the screen painter SE51.Enter the attributes
*Create a Custom container and name it CC_CONT and OK code as OK_CODE.
*Save check and Activate the screen painter.
*Now a normal screen with number 600 is created which holds the ALV grid.
PBO of the actual screen ,Here we can give a title and customized menus&---------------------------------------------------------------------
*& Module STATUS_0600 OUTPUT
&----
text
----
MODULE status_0600 OUTPUT.
SET PF-STATUS 'xxxxxxxx'.
SET TITLEBAR 'xxx'.
IF c_alv IS INITIAL.
PERFORM alv_controls.
ENDIF.
ENDMODULE. " STATUS_0600 OUTPUT&----
*& Form alv_CONTROLS
&----
text
----
--> p1 text
<-- p2 text
----
FORM alv_controls.
create docking container for alv control
CREATE OBJECT c_dockingcont
EXPORTING
dynnr = '600'
extension = 300
side = cl_gui_docking_container=>dock_at_top.
create alv control
CREATE OBJECT c_alv
EXPORTING i_parent = c_dockingcont.* create the application object to handle the ABAP Objects Events CREATE OBJECT c_dragdropapp.* Events alv control
*For Dragging
SET HANDLER c_dragdropapp->handle_alv_drag FOR c_alv.
*For Dropping
SET HANDLER c_dragdropapp->handle_alv_drop FOR c_alv.* build tree nodes for drag&drop
PERFORM build_handle.* Fieldcatalogue for ALV PERFORM alv_build_fieldcat.* ALV attributes FOR LAYOUT PERFORM alv_report_layout.* Call ALV GRID CALL METHOD c_alv->set_table_for_first_display
EXPORTING
is_layout = it_layout
CHANGING
it_outtab = it_t016t
it_fieldcatalog = it_fcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.ENDFORM. "ALV_CONTROLS
&----
*& Form build_handle
&----
text
----
--> p1 text
<-- p2 text
----
define a drag & Drop behaviour for the whole grid
CREATE OBJECT c_dragdropalv. effect = cl_dragdrop=>move + cl_dragdrop=>copy. CALL METHOD c_dragdropalv->add
EXPORTING
flavor = 'Line'
dragsrc = 'X'
droptarget = 'X'
effect = effect.*getting the handle for drag and drop
CALL METHOD c_dragdropalv->get_handle
IMPORTING
handle = handle_alv.
ENDFORM. " build_handle
&----
*& Form fetch_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM fetch_data .* select and display data from t016
SELECT brtxt brsch spras FROM t016t INTO CORRESPONDING FIELDS OF TABLE it_t016t
WHERE spras = 'EN'.
ENDFORM. " fetch_data
&----
*& Form alv_report_layout
&----
text
----
--> p1 text
<-- p2 text
----
FORM alv_report_layout . it_layout-grid_title = 'ALV Drag Drop'.* provide handle to alv control to all rows for same drag & drop behaviour
it_layout-s_dragdrop-row_ddid = handle_alv.
ENDFORM. " alv_report_layout
&----
*& Form alv_build_fieldcat
&----
text
----
--> p1 text
<-- p2 text
----
FORM alv_build_fieldcat . DATA lv_fldcat TYPE lvc_s_fcat.
CLEAR lv_fldcat. lv_fldcat-row_pos = '1'.
lv_fldcat-col_pos = '1'.
lv_fldcat-fieldname = 'BRSCH'.
lv_fldcat-tabname = 'IT_T016T'.
lv_fldcat-outputlen = 8.
lv_fldcat-scrtext_m = 'Industry'. APPEND lv_fldcat TO it_fcat.
CLEAR lv_fldcat. lv_fldcat-row_pos = '1'.
lv_fldcat-col_pos = '2'.
lv_fldcat-fieldname = 'BRTXT'.
lv_fldcat-tabname = 'IT_T016T'.
lv_fldcat-outputlen = 15.
lv_fldcat-scrtext_m = 'Description'. APPEND lv_fldcat TO it_fcat.
CLEAR lv_fldcat.
ENDFORM. " alv_build_fieldcat* PAI module of the screen created. In case we use an interactive ALV or
*for additional functionalities we can create OK codes
and based on the user command we can do the coding.&----
*
*& Module USER_COMMAND_0600 INPUT
&----
text
----
MODULE user_command_0600 INPUT.ENDMODULE. " USER_COMMAND_0600 INPUT
06-29-2008 4:47 PM
Hello Sridhar
You may be mislead that the drag event (e.g. ONDROP) has only a single row as IMPORTING parameter. However, the selected rows are actually "transported" by the dragdrop object and here you can have a many rows as you like.
I modified sample BCALV_TEST_GRID_DRAG_DROP (available on ECC 6.0) to demonstrate how simple it is to define drag&drop functionality for multiple rows. The major changes are in event handler methods ONDRAG, ONDROP, and ONDROPCOMPLETE (search for $ in the coding).
*&---------------------------------------------------------------------*
*& Report BCALV_TEST_GRID_DRAG_DROP *
*& *
*&---------------------------------------------------------------------*
*& Thread: Does ALV support multiple Lines Drag & Drop Functionality *
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="935725"></a> *
*&---------------------------------------------------------------------*
REPORT zus_sdn_bcalv_test_grid_dd.
TYPES: g_ty_s_sflight TYPE alv_t_t2.
CONSTANTS: con_sflight TYPE lvc_fname VALUE 'ALV_T_T2'.
CONSTANTS: con_exit TYPE sy-ucomm VALUE 'EXIT',
con_canc TYPE sy-ucomm VALUE 'CANC',
con_back TYPE sy-ucomm VALUE 'BACK',
con_true TYPE char1 VALUE 'X',
con_edit_grid TYPE i VALUE 1,
con_edit_column TYPE i VALUE 2,
con_edit_cell TYPE i VALUE 3,
con_edit_mode_display TYPE i VALUE 1,
con_edit_mode_change TYPE i VALUE 2,
con_edit_event_enter TYPE i VALUE 1,
con_edit_event_modify TYPE i VALUE 2,
con_source TYPE i VALUE 1,
con_target TYPE i VALUE 2,
con_dragdrop_row TYPE i VALUE 1,
con_dragdrop_column TYPE i VALUE 2,
con_dragdrop_cell TYPE i VALUE 3,
con_dragdrop_effect_move TYPE i VALUE 1,
con_dragdrop_effect_copy TYPE i VALUE 2,
con_dragdrop_effect_all TYPE i VALUE 3.
CLASS cl_gui_resources DEFINITION LOAD.
CLASS lcl_events_d0100 DEFINITION DEFERRED.
TYPES: BEGIN OF g_ty_s_test,
select_amount TYPE i,
no_info_popup TYPE char1,
info_popup_once TYPE char1,
events_info_popup TYPE lvc_fname OCCURS 0,
edit_type TYPE i,
edit_mode TYPE i,
edit_event TYPE i,
edit_fields TYPE lvc_fname OCCURS 0,
dragdrop_type TYPE i,
dragdrop_effect TYPE i,
dragdrop_fields TYPE lvc_fname OCCURS 0,
bypassing_buffer TYPE char1,
buffer_active TYPE char1,
END OF g_ty_s_test,
BEGIN OF g_ty_s_outtab.
INCLUDE TYPE g_ty_s_sflight.
TYPES: table TYPE char10,
count TYPE i,
box TYPE char1,
lights TYPE char1,
handle_style TYPE lvc_t_styl,
handle_dragdrop TYPE lvc_t_drdr,
tabcolor TYPE lvc_t_scol,
END OF g_ty_s_outtab,
g_ty_t_outtab TYPE TABLE OF g_ty_s_outtab.
DATA: g_field TYPE lvc_fname.
DATA: g_okcode TYPE sy-ucomm.
DATA: gs_test TYPE g_ty_s_test.
DATA: gt_outtab_source TYPE g_ty_t_outtab,
gt_outtab_target TYPE g_ty_t_outtab,
gr_container_d0100_source TYPE REF TO cl_gui_custom_container,
gr_grid_d0100_source TYPE REF TO cl_gui_alv_grid,
gr_container_d0100_target TYPE REF TO cl_gui_custom_container,
gr_grid_d0100_target TYPE REF TO cl_gui_alv_grid,
gr_events_d0100 TYPE REF TO lcl_events_d0100,
gr_dragdrop_d0100 TYPE REF TO cl_dragdrop,
gr_dragdrop_background_d0100 TYPE REF TO cl_dragdrop.
*---------------------------------------------------------------------*
* CLASS lcl_events_d0100 DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_events_d0100 DEFINITION.
PUBLIC SECTION.
DATA:
m_grid TYPE i.
METHODS:
data_changed FOR EVENT data_changed
OF cl_gui_alv_grid
IMPORTING er_data_changed
e_onf4
e_onf4_before
e_onf4_after,
data_changed_finished
FOR EVENT data_changed_finished
OF cl_gui_alv_grid,
ondrag FOR EVENT ondrag
OF cl_gui_alv_grid
IMPORTING e_row
e_column
es_row_no
e_dragdropobj,
ondrop FOR EVENT ondrop
OF cl_gui_alv_grid
IMPORTING e_row
e_column
es_row_no
e_dragdropobj,
ondropcomplete FOR EVENT ondropcomplete
OF cl_gui_alv_grid
IMPORTING e_row
e_column
es_row_no
e_dragdropobj,
ondropgetflavor FOR EVENT ondropgetflavor
OF cl_gui_alv_grid
IMPORTING e_row
e_column
es_row_no
e_dragdropobj
e_flavors.
ENDCLASS. "lcl_events_d0100 DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_events_d0100 IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_events_d0100 IMPLEMENTATION.
*---------------------------------------------------------------------*
* METHOD data_cahnged *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
METHOD data_changed.
PERFORM d0100_event_data_changed USING er_data_changed
e_onf4
e_onf4_before
e_onf4_after
m_grid.
ENDMETHOD. "data_changed
*---------------------------------------------------------------------*
* METHOD data_changed_finished *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
METHOD data_changed_finished.
PERFORM d0100_event_data_changed_finis.
ENDMETHOD. "data_changed_finished
*---------------------------------------------------------------------*
* METHOD ondrag *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
METHOD ondrag.
PERFORM d0100_event_ondrag USING e_row
e_column
e_dragdropobj.
ENDMETHOD. "ondrag
*---------------------------------------------------------------------*
* METHOD ondrop *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
METHOD ondrop.
PERFORM d0100_event_ondrop USING e_row
e_column
e_dragdropobj.
ENDMETHOD. "ondrop
*---------------------------------------------------------------------*
* METHOD ondropcomplete *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
METHOD ondropcomplete.
PERFORM d0100_event_ondropcomplete USING e_row
e_column
e_dragdropobj.
ENDMETHOD. "ondropcomplete
*---------------------------------------------------------------------*
* METHOD ondropgetflavor *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
METHOD ondropgetflavor.
PERFORM d0100_event_ondropgetflavor USING e_row
e_column
es_row_no
e_dragdropobj
e_flavors.
ENDMETHOD. "ondropgetflavor
ENDCLASS. "lcl_events_d0100 IMPLEMENTATION
*---------------------------------------------------------------------*
* CLASS lcl_dragdrop_obj_d0100 DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_dragdrop_obj_d0100 DEFINITION.
PUBLIC SECTION.
DATA: line TYPE g_ty_s_outtab,
lines TYPE g_ty_t_outtab, " $INSERT
rows TYPE lvc_t_rows,
index TYPE i.
ENDCLASS. "lcl_dragdrop_obj_d0100 DEFINITION
*----------------------------------------------------------------------*
* SELECTION-SCREEN *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK gen WITH FRAME.
PARAMETERS:
p_amount TYPE i DEFAULT 30.
SELECTION-SCREEN END OF BLOCK gen.
SELECTION-SCREEN BEGIN OF BLOCK inf WITH FRAME.
PARAMETERS:
p_inf01 AS CHECKBOX DEFAULT con_true,
p_inf02 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK inf.
SELECTION-SCREEN BEGIN OF BLOCK drd WITH FRAME.
PARAMETERS:
p_rows RADIOBUTTON GROUP drdr,
p_cols RADIOBUTTON GROUP drdr.
SELECT-OPTIONS:
p_colsf FOR g_field NO INTERVALS DEFAULT 'CARRID'.
PARAMETERS:
p_cells RADIOBUTTON GROUP drdr.
SELECT-OPTIONS:
p_cellsf FOR g_field NO INTERVALS DEFAULT 'CARRID'.
SELECTION-SCREEN END OF BLOCK drd.
SELECTION-SCREEN BEGIN OF BLOCK eff WITH FRAME.
PARAMETERS:
p_both RADIOBUTTON GROUP eff,
p_move RADIOBUTTON GROUP eff,
p_copy RADIOBUTTON GROUP eff.
SELECTION-SCREEN END OF BLOCK eff.
SELECTION-SCREEN BEGIN OF BLOCK ed1 WITH FRAME.
PARAMETERS:
p_grid RADIOBUTTON GROUP edit DEFAULT 'X',
p_ecols RADIOBUTTON GROUP edit.
SELECT-OPTIONS:
p_ecolsf FOR g_field NO INTERVALS DEFAULT 'CARRID'.
PARAMETERS:
p_ecells RADIOBUTTON GROUP edit.
SELECT-OPTIONS:
p_ecelsf FOR g_field NO INTERVALS DEFAULT 'CARRID'.
PARAMETERS:
p_noedit RADIOBUTTON GROUP edit.
SELECTION-SCREEN END OF BLOCK ed1.
SELECTION-SCREEN BEGIN OF BLOCK ed2 WITH FRAME.
PARAMETERS:
p_change RADIOBUTTON GROUP tgle DEFAULT 'X',
p_disp RADIOBUTTON GROUP tgle.
SELECTION-SCREEN END OF BLOCK ed2.
SELECTION-SCREEN BEGIN OF BLOCK ed3 WITH FRAME.
PARAMETERS:
p_evedit RADIOBUTTON GROUP eevt DEFAULT 'X',
p_evmod RADIOBUTTON GROUP eevt,
p_noevt RADIOBUTTON GROUP eevt.
SELECTION-SCREEN END OF BLOCK ed3.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_colsf-low.
PERFORM d0100_f4_fcode CHANGING p_colsf-low.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_cellsf-low.
PERFORM d0100_f4_fcode CHANGING p_cellsf-low.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ecolsf-low.
PERFORM d0100_f4_fcode CHANGING p_ecolsf-low.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ecelsf-low.
PERFORM d0100_f4_fcode CHANGING p_ecelsf-low.
*----------------------------------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------------------------------*
START-OF-SELECTION.
gs_test-select_amount = p_amount.
gs_test-no_info_popup = p_inf01.
gs_test-info_popup_once = p_inf02.
CASE con_true.
WHEN p_rows.
gs_test-dragdrop_type = con_dragdrop_row.
WHEN p_cols.
gs_test-dragdrop_type = con_dragdrop_column.
LOOP AT p_colsf.
IF NOT p_colsf-low IS INITIAL.
APPEND p_colsf-low TO gs_test-dragdrop_fields.
ENDIF.
ENDLOOP.
WHEN p_cells.
gs_test-dragdrop_type = con_dragdrop_cell.
LOOP AT p_cellsf.
IF NOT p_cellsf-low IS INITIAL.
APPEND p_cellsf-low TO gs_test-dragdrop_fields.
ENDIF.
ENDLOOP.
ENDCASE.
CASE con_true.
WHEN p_move.
gs_test-dragdrop_effect = con_dragdrop_effect_move.
WHEN p_copy.
gs_test-dragdrop_effect = con_dragdrop_effect_copy.
WHEN p_both.
gs_test-dragdrop_effect = con_dragdrop_effect_all.
ENDCASE.
CASE con_true.
WHEN p_grid.
gs_test-edit_type = con_edit_grid.
WHEN p_ecols.
gs_test-edit_type = con_edit_column.
LOOP AT p_ecolsf.
IF NOT p_ecolsf-low IS INITIAL.
APPEND p_ecolsf-low TO gs_test-edit_fields.
ENDIF.
ENDLOOP.
WHEN p_ecells.
gs_test-edit_type = con_edit_cell.
LOOP AT p_ecelsf.
IF NOT p_ecelsf-low IS INITIAL.
APPEND p_ecelsf-low TO gs_test-edit_fields.
ENDIF.
ENDLOOP.
ENDCASE.
CASE con_true.
WHEN p_disp.
gs_test-edit_mode = con_edit_mode_display.
WHEN p_change.
gs_test-edit_mode = con_edit_mode_change.
ENDCASE.
CASE con_true.
WHEN p_evedit.
gs_test-edit_event = con_edit_event_enter.
WHEN p_evmod.
gs_test-edit_event = con_edit_event_modify.
ENDCASE.
gs_test-bypassing_buffer = space.
gs_test-buffer_active = space.
*----------------------------------------------------------------------*
* END-OF-SELECTION *
*----------------------------------------------------------------------*
END-OF-SELECTION.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module d0100_set_status OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE d0100_set_status OUTPUT.
PERFORM d0100_set_status.
ENDMODULE. " d0100_set_status OUTPUT
*&---------------------------------------------------------------------*
*& Module d0100_prepare_container OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE d0100_prepare_container OUTPUT.
PERFORM d0100_prepare_container.
ENDMODULE. " d0100_prepare_container OUTPUT
*&---------------------------------------------------------------------*
*& Module d0100_exit INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE d0100_exit INPUT.
PERFORM d0100_exit.
ENDMODULE. " d0100_exit INPUT
*&---------------------------------------------------------------------*
*& Module d0100_fcode INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE d0100_fcode INPUT.
PERFORM d0100_fcode.
ENDMODULE. " d0100_fcode INPUT
*&---------------------------------------------------------------------*
*& Form d0100_set_status
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_set_status .
TYPES: BEGIN OF l_ty_s_excl,
func TYPE syucomm,
END OF l_ty_s_excl,
l_ty_t_excl TYPE STANDARD TABLE OF l_ty_s_excl.
DATA: lt_excl TYPE l_ty_t_excl.
SET PF-STATUS 'D0100' EXCLUDING lt_excl.
SET TITLEBAR 'D0100'.
ENDFORM. " d0100_set_status
*&---------------------------------------------------------------------*
*& Form d0100_prepare_container
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_prepare_container .
DATA: lt_fcat TYPE lvc_t_fcat,
ls_layo TYPE lvc_s_layo,
ls_vari TYPE disvariant,
l_consistency_check TYPE char1.
IF gr_container_d0100_source IS INITIAL.
IF cl_gui_alv_grid=>offline( ) IS INITIAL.
CREATE OBJECT gr_container_d0100_source
EXPORTING
container_name = 'D0100_CONTAINER_SOURCE'.
ENDIF.
CREATE OBJECT gr_grid_d0100_source
EXPORTING
i_parent = gr_container_d0100_source.
PERFORM d0100_get_outtab.
PERFORM d0100_set_grid_vari CHANGING ls_vari.
PERFORM d0100_set_grid_layo CHANGING ls_layo.
PERFORM d0100_set_grid_fcat CHANGING lt_fcat.
PERFORM d0100_set_grid_events USING con_source.
PERFORM d0100_set_grid_edit USING con_source
CHANGING ls_layo
lt_fcat.
PERFORM d0100_set_drag_drop USING con_source
CHANGING ls_layo
lt_fcat.
CALL METHOD gr_grid_d0100_source->set_table_for_first_display
EXPORTING
i_buffer_active = gs_test-buffer_active
i_bypassing_buffer = gs_test-bypassing_buffer
i_consistency_check = l_consistency_check
is_variant = ls_vari
i_save = 'A'
i_default = con_true
is_layout = ls_layo
CHANGING
it_outtab = gt_outtab_source[]
it_fieldcatalog = lt_fcat.
ENDIF.
IF gr_container_d0100_target IS INITIAL.
CREATE OBJECT gr_container_d0100_target
EXPORTING
container_name = 'D0100_CONTAINER_TARGET'.
CREATE OBJECT gr_grid_d0100_target
EXPORTING
i_parent = gr_container_d0100_target.
PERFORM d0100_set_grid_vari CHANGING ls_vari.
PERFORM d0100_set_grid_layo CHANGING ls_layo.
PERFORM d0100_set_grid_fcat CHANGING lt_fcat.
PERFORM d0100_set_grid_events USING con_target.
PERFORM d0100_set_grid_edit USING con_target
CHANGING ls_layo
lt_fcat.
PERFORM d0100_set_drag_drop USING con_target
CHANGING ls_layo
lt_fcat.
CALL METHOD gr_grid_d0100_target->set_table_for_first_display
EXPORTING
i_buffer_active = space
i_consistency_check = l_consistency_check
is_variant = ls_vari
i_save = 'A'
i_default = con_true
is_layout = ls_layo
CHANGING
it_outtab = gt_outtab_target[]
it_fieldcatalog = lt_fcat.
ENDIF.
ENDFORM. " d0100_prepare_container
*&---------------------------------------------------------------------*
*& Form d0100_exit
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_exit .
DATA: l_okcode LIKE sy-ucomm.
l_okcode = g_okcode.
CLEAR g_okcode.
CASE l_okcode.
WHEN con_exit OR con_back OR con_canc.
CALL METHOD gr_grid_d0100_source->free.
CALL METHOD gr_container_d0100_source->free.
CALL METHOD gr_grid_d0100_target->free.
CALL METHOD gr_container_d0100_target->free.
CALL METHOD cl_gui_cfw=>flush.
CLEAR gr_container_d0100_source.
CLEAR gr_grid_d0100_source.
CLEAR gr_container_d0100_target.
CLEAR gr_grid_d0100_target.
CLEAR gr_events_d0100.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
ENDFORM. " d0100_exit
*&---------------------------------------------------------------------*
*& Form d0100_fcode
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_fcode .
DATA: l_okcode LIKE sy-ucomm.
l_okcode = g_okcode.
CLEAR g_okcode.
CASE l_okcode.
WHEN con_exit OR con_back OR con_canc.
g_okcode = l_okcode.
PERFORM d0100_exit.
ENDCASE.
ENDFORM. " d0100_fcode
*&---------------------------------------------------------------------*
*& Form d0100_set_grid_vari
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_set_grid_vari CHANGING cs_vari TYPE disvariant.
cs_vari-report = sy-repid.
cs_vari-handle = space.
cs_vari-log_group = space.
cs_vari-username = space.
cs_vari-variant = space.
cs_vari-text = space.
cs_vari-dependvars = space.
ENDFORM. " d0100_set_grid_vari
*&---------------------------------------------------------------------*
*& Form d0100_set_grid_layo
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_set_grid_layo CHANGING cs_layo TYPE lvc_s_layo.
*... ALV-Control: Allgemeine Anzeigeoptionen
cs_layo-stylefname = space.
cs_layo-cwidth_opt = con_true.
cs_layo-zebra = space.
cs_layo-smalltitle = space.
cs_layo-graphics = space.
cs_layo-frontend = space.
cs_layo-template = space.
*... ALV-Control: Gridcustomizing
cs_layo-no_colexpd = space.
cs_layo-no_hgridln = space.
cs_layo-no_vgridln = space.
cs_layo-no_rowmark = space.
cs_layo-no_headers = space.
cs_layo-no_merging = space.
cs_layo-grid_title = space.
cs_layo-no_toolbar = space.
cs_layo-sel_mode = 'D'.
cs_layo-box_fname = space.
cs_layo-sgl_clk_hd = space.
*... ALV-Control: Summenoptionen
cs_layo-totals_bef = space.
cs_layo-no_totline = space.
cs_layo-numc_total = space.
cs_layo-no_utsplit = space.
*... ALV-Control: Exceptions
cs_layo-excp_fname = space.
cs_layo-excp_rolln = space.
cs_layo-excp_conds = space.
cs_layo-excp_led = space.
*... ALV-Control: Steuerung Interaktion
cs_layo-detailinit = space.
cs_layo-detailtitl = space.
cs_layo-keyhot = space.
cs_layo-no_keyfix = space.
cs_layo-no_author = space.
CLEAR cs_layo-s_dragdrop.
*... ALV-Control: Farben
cs_layo-info_fname = space.
cs_layo-ctab_fname = 'TABCOLOR'.
*... ALV-Control: Eingabefähigkeit
cs_layo-edit = con_true.
cs_layo-edit_mode = space.
cs_layo-no_rowins = space.
cs_layo-no_rowmove = space.
*... ALV-Control: Web-Optionen
cs_layo-weblook = space.
cs_layo-webstyle = space.
cs_layo-webrows = space.
cs_layo-webxwidth = space.
cs_layo-webxheight = space.
ENDFORM. " d0100_set_grid_layo
*&---------------------------------------------------------------------*
*& Form d0100_set_grid_fcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_set_grid_fcat CHANGING ct_fcat TYPE lvc_t_fcat.
DATA: l_bypassing_buffer TYPE char1,
l_buffer_active TYPE char1,
ls_fcat TYPE lvc_s_fcat.
CLEAR ct_fcat[].
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_buffer_active = l_buffer_active
i_structure_name = con_sflight
i_client_never_display = con_true
i_bypassing_buffer = l_bypassing_buffer
CHANGING
ct_fieldcat = ct_fcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CLEAR ls_fcat.
ls_fcat-tabname = '1'.
ls_fcat-fieldname = 'TABLE'.
ls_fcat-inttype = 'C'.
ls_fcat-datatype = 'CHAR'.
ls_fcat-intlen = 10.
ls_fcat-scrtext_s = ls_fcat-fieldname.
ls_fcat-scrtext_m = ls_fcat-fieldname.
ls_fcat-scrtext_l = ls_fcat-fieldname.
APPEND ls_fcat TO ct_fcat.
ENDFORM. " d0100_set_grid_fcat
*&---------------------------------------------------------------------*
*& Form d0100_set_grid_events
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_set_grid_events USING i_grid TYPE i.
CREATE OBJECT gr_events_d0100.
CASE i_grid.
WHEN con_source.
gr_events_d0100->m_grid = con_source.
SET HANDLER gr_events_d0100->ondrag
FOR gr_grid_d0100_source.
SET HANDLER gr_events_d0100->ondrop
FOR gr_grid_d0100_source.
SET HANDLER gr_events_d0100->ondropcomplete
FOR gr_grid_d0100_source.
SET HANDLER gr_events_d0100->ondropgetflavor
FOR gr_grid_d0100_source.
SET HANDLER gr_events_d0100->data_changed
FOR gr_grid_d0100_source.
SET HANDLER gr_events_d0100->data_changed_finished
FOR gr_grid_d0100_source.
WHEN con_target.
gr_events_d0100->m_grid = con_target.
SET HANDLER gr_events_d0100->ondrag
FOR gr_grid_d0100_target.
SET HANDLER gr_events_d0100->ondrop
FOR gr_grid_d0100_target.
SET HANDLER gr_events_d0100->ondropcomplete
FOR gr_grid_d0100_target.
SET HANDLER gr_events_d0100->ondropgetflavor
FOR gr_grid_d0100_target.
SET HANDLER gr_events_d0100->data_changed
FOR gr_grid_d0100_target.
SET HANDLER gr_events_d0100->data_changed_finished
FOR gr_grid_d0100_target.
ENDCASE.
ENDFORM. " d0100_set_grid_events
*&---------------------------------------------------------------------*
*& Form d0100_set_grid_edit
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_set_grid_edit USING i_grid TYPE i
CHANGING cs_layo TYPE lvc_s_layo
ct_fcat TYPE lvc_t_fcat.
FIELD-SYMBOLS: <ls_fcat> TYPE lvc_s_fcat.
DATA: ls_edit TYPE lvc_s_styl,
lt_edit TYPE lvc_t_styl,
ls_field TYPE lvc_fname,
ls_outtab TYPE g_ty_s_outtab.
DATA: l_index TYPE i,
l_erg TYPE i.
CASE gs_test-edit_type.
WHEN con_edit_grid.
*... Grid Editerbar
* In Layout wird Feld EDIT auf 'X' gesetzt
cs_layo-edit = con_true.
WHEN con_edit_column.
*... Spalteneditierbar
* In Feldkatalog wird Feld EDIT auf 'X' gesetzt für Spalte CARRID
LOOP AT gs_test-edit_fields INTO ls_field.
READ TABLE ct_fcat ASSIGNING <ls_fcat>
WITH KEY fieldname = ls_field.
IF sy-subrc EQ 0.
<ls_fcat>-edit = con_true.
ENDIF.
ENDLOOP.
WHEN con_edit_cell.
*... Zellen-Editierbar
* In Layout wird Feld SYTLEFNAME auf 'HANDLE_STYLE' gesetzt
cs_layo-stylefname = 'HANDLE_STYLE'.
LOOP AT gt_outtab_source INTO ls_outtab.
l_index = sy-tabix.
l_erg = l_index MOD 2.
IF l_erg EQ 0.
LOOP AT gs_test-edit_fields INTO ls_field.
ls_edit-fieldname = ls_field.
ls_edit-style = cl_gui_alv_grid=>mc_style_enabled.
ls_edit-style2 = space.
ls_edit-style3 = space.
ls_edit-style4 = space.
ls_edit-maxlen = 8.
INSERT ls_edit INTO TABLE lt_edit.
ENDLOOP.
INSERT LINES OF lt_edit INTO TABLE ls_outtab-handle_style.
MODIFY gt_outtab_source INDEX l_index FROM ls_outtab
TRANSPORTING handle_style.
ENDIF.
ENDLOOP.
WHEN OTHERS.
EXIT.
ENDCASE.
CASE gs_test-edit_event.
WHEN con_edit_event_enter.
*... hiermit erfolgt eine Prüfung nach Eingabe wenn ENTER gedrückt wird
CASE i_grid.
WHEN con_source.
CALL METHOD gr_grid_d0100_source->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
WHEN con_target.
CALL METHOD gr_grid_d0100_target->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
ENDCASE.
WHEN con_edit_event_modify.
*... hiermit erfolgt eine Prüfung nach jeder Änderung
CASE i_grid.
WHEN con_source.
CALL METHOD gr_grid_d0100_source->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
WHEN con_target.
CALL METHOD gr_grid_d0100_target->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
ENDCASE.
ENDCASE.
CASE gs_test-edit_mode.
WHEN con_edit_mode_change.
*... hier wird alles was editierbar sein kann auch editierbar gemacht
CASE i_grid.
WHEN con_source.
CALL METHOD gr_grid_d0100_source->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
WHEN con_target.
CALL METHOD gr_grid_d0100_target->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
ENDCASE.
WHEN con_edit_mode_display.
*... hier wird alles was editierbar sein kann nicht editierbar gemacht
CASE i_grid.
WHEN con_source.
CALL METHOD gr_grid_d0100_source->set_ready_for_input
EXPORTING
i_ready_for_input = 0.
WHEN con_target.
CALL METHOD gr_grid_d0100_target->set_ready_for_input
EXPORTING
i_ready_for_input = 0.
ENDCASE.
ENDCASE.
* cs_layo-no_rowins = gs_test-no_row_ins.
* cs_layo-no_rowmove = gs_test-no_row_move.
ENDFORM. " d0100_set_grid_edit
*&---------------------------------------------------------------------*
*& Form d0100_get_outtab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_get_outtab .
DATA: ls_outtab TYPE g_ty_s_outtab.
SELECT * FROM (con_sflight) INTO CORRESPONDING FIELDS
OF TABLE gt_outtab_source
UP TO gs_test-select_amount ROWS
ORDER BY PRIMARY KEY.
gs_test-select_amount = sy-dbcnt.
ls_outtab-table = 'SOURCE'.
MODIFY gt_outtab_source FROM ls_outtab
TRANSPORTING table
WHERE TABLE ne LS_OUTTAB-TABLE.
gt_outtab_target[] = gt_outtab_source[].
ls_outtab-table = 'TARGET'.
MODIFY gt_outtab_target FROM ls_outtab
TRANSPORTING table
WHERE TABLE ne LS_OUTTAB-TABLE.
ENDFORM. " d0100_get_outtab
*&---------------------------------------------------------------------*
*& Form d0100_event_ondrag
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_event_ondrag USING e_row TYPE lvc_s_row
e_column TYPE lvc_s_col
e_dragdropobj TYPE REF TO
cl_dragdropobject."#EC *
DATA: l_event TYPE lvc_fname. "#EC NEEDED
DATA: lo_sender TYPE REF TO cl_gui_alv_grid,
lt_outtab TYPE g_ty_t_outtab,
lt_rows TYPE lvc_t_row,
ls_row TYPE lvc_s_row. " $INSERT
lo_sender ?= e_dragdropobj->dragsourcectrl.
" (1) Get all selected rows...
CALL METHOD lo_sender->get_selected_rows
IMPORTING
et_index_rows = lt_rows
* et_row_no =
.
IF gs_test-info_popup_once EQ con_true.
READ TABLE gs_test-events_info_popup INTO l_event
WITH KEY table_line = 'ONDRAG'.
IF sy-subrc NE 0.
INSERT 'ONDRAG'
INTO gs_test-events_info_popup INDEX 1.
MESSAGE i000(0k) WITH text-t01.
ENDIF.
ELSEIF gs_test-no_info_popup EQ space.
MESSAGE i000(0k) WITH text-t01.
ENDIF.
DATA: ls_outtab TYPE g_ty_s_outtab,
l_obj TYPE REF TO lcl_dragdrop_obj_d0100.
" (2)...and store them in the dragdrop object. This information
" is required when the flavor=MOVE so we have to delete the
" selected rows from the source grid
CREATE OBJECT l_obj.
l_obj->rows = lt_rows. " $INSERT
CASE e_dragdropobj->dragsourcectrl.
WHEN gr_grid_d0100_source.
lt_outtab = gt_outtab_source.
WHEN gr_grid_d0100_target.
lt_outtab = gt_outtab_target.
ENDCASE.
" Instead of saving the single row which was dragged we save
" all selected rows including the dragged one in the dragdrop object
LOOP AT lt_rows INTO ls_row.
READ TABLE lt_outtab INTO ls_outtab INDEX ls_row-index.
IF ( syst-tabix = 1 ).
l_obj->line = ls_outtab.
l_obj->index = ls_row-index.
ENDIF.
APPEND ls_outtab TO l_obj->lines.
ENDLOOP.
e_dragdropobj->object = l_obj. " $INSERT & MODIFY
** CASE e_dragdropobj->dragsourcectrl.
** WHEN gr_grid_d0100_source.
** READ TABLE gt_outtab_source INTO ls_outtab INDEX e_row-index.
** WHEN gr_grid_d0100_target.
** READ TABLE gt_outtab_target INTO ls_outtab INDEX e_row-index.
** ENDCASE.
** IF sy-subrc EQ 0.
** l_obj->line = ls_outtab.
** l_obj->index = e_row-index.
** e_dragdropobj->object = l_obj.
** ENDIF.
ENDFORM. " d0100_event_ondrag
*&---------------------------------------------------------------------*
*& Form d0100_event_ondrop
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_event_ondrop USING e_row TYPE lvc_s_row
e_column TYPE lvc_s_col
e_dragdropobj TYPE REF TO
cl_dragdropobject."#EC *
DATA: l_event TYPE lvc_fname. "#EC NEEDED
IF gs_test-info_popup_once EQ con_true.
READ TABLE gs_test-events_info_popup INTO l_event
WITH KEY table_line = 'ONDROP'.
IF sy-subrc NE 0.
INSERT 'ONDROP'
INTO gs_test-events_info_popup INDEX 1.
MESSAGE i000(0k) WITH text-t02.
ENDIF.
ELSEIF gs_test-no_info_popup EQ space.
MESSAGE i000(0k) WITH text-t02.
ENDIF.
DATA: l_obj TYPE REF TO lcl_dragdrop_obj_d0100,
ls_outtab TYPE g_ty_s_outtab.
CREATE OBJECT l_obj.
IF e_row-index IS INITIAL.
e_row-index = 1.
ENDIF.
CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
l_obj ?= e_dragdropobj->object.
** ls_outtab = l_obj->line. "$DELETE
" Since we can have multiple rows that should be dropped we
" replace the single-row coding with a loop over the selected rows
LOOP AT l_obj->lines INTO ls_outtab. " $INSERT
CASE e_dragdropobj->effect.
WHEN cl_dragdrop=>move.
CASE e_dragdropobj->droptargetctrl.
WHEN gr_grid_d0100_source.
INSERT ls_outtab INTO gt_outtab_source INDEX e_row-index.
WHEN gr_grid_d0100_target.
INSERT ls_outtab INTO gt_outtab_target INDEX e_row-index.
ENDCASE.
WHEN cl_dragdrop=>copy.
CASE e_dragdropobj->droptargetctrl.
WHEN gr_grid_d0100_source.
INSERT ls_outtab INTO gt_outtab_source INDEX e_row-index.
WHEN gr_grid_d0100_target.
INSERT ls_outtab INTO gt_outtab_target INDEX e_row-index.
ENDCASE.
ENDCASE.
ENDLOOP.
ENDCATCH.
IF sy-subrc <> 0.
CALL METHOD e_dragdropobj->abort.
ENDIF.
ENDFORM. " d0100_event_ondrop
*&---------------------------------------------------------------------*
*& Form d0100_event_ondropcomplete
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_event_ondropcomplete USING e_row TYPE lvc_s_row
e_column TYPE lvc_s_col
e_dragdropobj TYPE REF TO
cl_dragdropobject."#EC *
DATA: l_event TYPE lvc_fname. "#EC NEEDED
IF gs_test-info_popup_once EQ con_true.
READ TABLE gs_test-events_info_popup INTO l_event
WITH KEY table_line = 'ONDROPCOMPLETE'.
IF sy-subrc NE 0.
INSERT 'ONDROPCOMPLETE'
INTO gs_test-events_info_popup INDEX 1.
MESSAGE i000(0k) WITH text-t03.
ENDIF.
ELSEIF gs_test-no_info_popup EQ space.
MESSAGE i000(0k) WITH text-t03.
ENDIF.
DATA: l_obj TYPE REF TO lcl_dragdrop_obj_d0100,
ls_row TYPE lvc_s_row, " $INSERT
ls_stable TYPE lvc_s_stbl,
lr_grid TYPE REF TO cl_gui_alv_grid.
ls_stable-row = con_true.
ls_stable-col = con_true.
CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
l_obj ?= e_dragdropobj->object.
IF e_dragdropobj->effect = cl_dragdrop=>move.
" Since we can have multiple lines for the drag&drop events
" we replace the single-row coding with a loop over all
" selected rows.
** DELETE gt_outtab_source INDEX l_obj->index. " $DELETE
LOOP AT l_obj->rows INTO ls_row. " $INSERT
DELETE gt_outtab_source INDEX ls_row-index.
ENDLOOP.
ENDIF.
ENDCATCH.
CASE sy-subrc.
WHEN 0.
CASE e_dragdropobj->effect.
WHEN cl_dragdrop=>move.
lr_grid ?= e_dragdropobj->dragsourcectrl.
CALL METHOD lr_grid->refresh_table_display
EXPORTING
is_stable = ls_stable.
lr_grid ?= e_dragdropobj->droptargetctrl.
CALL METHOD lr_grid->refresh_table_display
EXPORTING
is_stable = ls_stable.
WHEN cl_dragdrop=>copy.
lr_grid ?= e_dragdropobj->droptargetctrl.
CALL METHOD lr_grid->refresh_table_display
EXPORTING
is_stable = ls_stable.
ENDCASE.
WHEN OTHERS.
CALL METHOD e_dragdropobj->abort.
ENDCASE.
ENDFORM. " d0100_event_ondropcomplete
*&---------------------------------------------------------------------*
*& Form d0100_event_ondropgetflavor
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_event_ondropgetflavor USING e_row TYPE lvc_s_row
e_column TYPE lvc_s_col
es_row_no TYPE lvc_s_roid
e_dragdropobj TYPE REF TO
cl_dragdropobject
e_flavors TYPE cndd_flavors.
"#EC *
DATA: l_event TYPE lvc_fname. "#EC NEEDED
IF gs_test-info_popup_once EQ con_true.
READ TABLE gs_test-events_info_popup INTO l_event
WITH KEY table_line = 'ONDROPGETFLAVOR'.
IF sy-subrc NE 0.
INSERT 'ONDROPGETFLAVOR'
INTO gs_test-events_info_popup INDEX 1.
MESSAGE i000(0k) WITH text-t04.
ENDIF.
ELSEIF gs_test-no_info_popup EQ space.
MESSAGE i000(0k) WITH text-t04.
ENDIF.
ENDFORM. " d0100_event_ondropgetflavor
*&---------------------------------------------------------------------*
*& Form d0100_set_drag_drop
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_set_drag_drop USING i_grid TYPE i
CHANGING cs_layo TYPE lvc_s_layo
ct_fcat TYPE lvc_t_fcat.
DATA: l_effect TYPE i,
l_dragdrop_handle TYPE i,
ls_dragdrop TYPE lvc_s_dd01,
ls_drag_cell TYPE lvc_s_drdr,
lt_drag_cells TYPE lvc_t_drdr,
ls_fcat TYPE lvc_s_fcat,
l_field TYPE lvc_fname,
l_source TYPE char1,
l_target TYPE char1,
ls_outtab TYPE g_ty_s_outtab,
ls_tabcolor TYPE lvc_s_scol,
lt_tabcolor TYPE lvc_t_scol.
CASE i_grid.
WHEN con_source.
l_source = con_true.
WHEN con_target.
l_target = con_true.
ENDCASE.
l_source = con_true.
l_target = con_true.
CREATE OBJECT gr_dragdrop_d0100.
CREATE OBJECT gr_dragdrop_background_d0100.
CASE gs_test-dragdrop_effect.
WHEN con_dragdrop_effect_move.
l_effect = cl_dragdrop=>move.
WHEN con_dragdrop_effect_copy.
l_effect = cl_dragdrop=>copy.
WHEN con_dragdrop_effect_all.
l_effect = cl_dragdrop=>move + cl_dragdrop=>copy.
ENDCASE.
CASE gs_test-dragdrop_type.
WHEN con_dragdrop_row.
*... setzen für alle Zeilen
* Im Layout wird S_DRAGDROP mit Handle gefüllt
CALL METHOD gr_dragdrop_d0100->add
EXPORTING
flavor = 'Line' "#EC NOTEXT
dragsrc = l_source
droptarget = l_target
effect = l_effect.
CALL METHOD gr_dragdrop_d0100->get_handle
IMPORTING
handle = l_dragdrop_handle.
ls_dragdrop-cntr_ddid = l_dragdrop_handle. "auch bei leerem Grid
ls_dragdrop-grid_ddid = space.
ls_dragdrop-col_ddid = space.
ls_dragdrop-row_ddid = l_dragdrop_handle.
ls_dragdrop-fieldname = space.
cs_layo-s_dragdrop = ls_dragdrop.
WHEN con_dragdrop_column.
*... setzen für Spalten
* Im Feldkatalog wird DRAGDROPID mit Handle gefüllt
CALL METHOD gr_dragdrop_d0100->add
EXPORTING
flavor = 'Line' "#EC NOTEXT
dragsrc = l_source
droptarget = l_target
effect = l_effect.
CALL METHOD gr_dragdrop_d0100->get_handle
IMPORTING
handle = l_dragdrop_handle.
ls_dragdrop-cntr_ddid = l_dragdrop_handle. "auch bei leerem Grid
ls_dragdrop-grid_ddid = space.
ls_dragdrop-col_ddid = l_dragdrop_handle.
ls_dragdrop-row_ddid = space.
ls_dragdrop-fieldname = space.
cs_layo-s_dragdrop = ls_dragdrop.
ls_fcat-dragdropid = l_dragdrop_handle.
LOOP AT gs_test-dragdrop_fields INTO l_field.
ls_tabcolor-fname = l_field.
ls_tabcolor-color-col = cl_gui_resources=>list_col_negative.
ls_tabcolor-color-int = 0.
ls_tabcolor-color-inv = 0.
ls_tabcolor-nokeycol = con_true.
APPEND ls_tabcolor TO lt_tabcolor.
MODIFY ct_fcat FROM ls_fcat
TRANSPORTING dragdropid
WHERE fieldname = l_field.
ENDLOOP.
ls_outtab-tabcolor = lt_tabcolor.
MODIFY gt_outtab_source FROM ls_outtab
TRANSPORTING tabcolor
WHERE tabcolor IS INITIAL.
WHEN con_dragdrop_cell.
*... setzen für Zellen
CALL METHOD gr_dragdrop_d0100->add
EXPORTING
flavor = 'Line' "#EC NOTEXT
dragsrc = l_source
droptarget = l_target
effect = l_effect.
CALL METHOD gr_dragdrop_d0100->get_handle
IMPORTING
handle = l_dragdrop_handle.
ls_dragdrop-cntr_ddid = l_dragdrop_handle. "auch bei leerem Grid
ls_dragdrop-grid_ddid = space.
ls_dragdrop-col_ddid = space.
ls_dragdrop-row_ddid = space.
ls_dragdrop-fieldname = 'HANDLE_DRAGDROP'.
cs_layo-s_dragdrop = ls_dragdrop.
LOOP AT gs_test-dragdrop_fields INTO l_field.
ls_drag_cell-fieldname = l_field.
ls_drag_cell-dragdropid = l_dragdrop_handle.
INSERT ls_drag_cell INTO TABLE lt_drag_cells.
ls_tabcolor-fname = l_field.
ls_tabcolor-color-col = cl_gui_resources=>list_col_negative.
ls_tabcolor-color-int = 0.
ls_tabcolor-color-inv = 0.
ls_tabcolor-nokeycol = con_true.
APPEND ls_tabcolor TO lt_tabcolor.
ENDLOOP.
DATA: l_index TYPE i,
l_erg TYPE i.
LOOP AT gt_outtab_source INTO ls_outtab.
l_index = sy-tabix.
l_erg = sy-tabix MOD 2.
IF l_erg EQ 0.
ls_outtab-handle_dragdrop = lt_drag_cells.
ls_outtab-tabcolor = lt_tabcolor.
MODIFY gt_outtab_source INDEX l_index FROM ls_outtab
TRANSPORTING handle_dragdrop
tabcolor.
ENDIF.
ENDLOOP.
ENDCASE.
ENDFORM. " d0100_set_drag_drop
*&---------------------------------------------------------------------*
*& Form d0100_f4_fcode
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_f4_fcode CHANGING c_value TYPE lvc_s_fcat-fieldname.
DATA: lt_fcat TYPE lvc_t_fcat,
ls_fcat TYPE lvc_s_fcat.
PERFORM d0100_set_grid_fcat CHANGING lt_fcat.
DATA: lt_values TYPE TABLE OF seahlpres,
lt_fields TYPE TABLE OF dfies,
lt_return TYPE TABLE OF ddshretval,
ls_value TYPE seahlpres,
ls_field TYPE dfies,
ls_return TYPE ddshretval.
CLEAR ls_field.
ls_field-fieldname = 'FIELDNAME'.
ls_field-intlen = 30.
ls_field-leng = 30.
ls_field-outputlen = 30.
ls_field-scrtext_s = ls_field-fieldname.
ls_field-scrtext_m = ls_field-fieldname.
ls_field-scrtext_l = ls_field-fieldname.
ls_field-reptext = ls_field-fieldname.
APPEND ls_field TO lt_fields.
LOOP AT lt_fcat INTO ls_fcat WHERE tech EQ space.
ls_value-string = ls_fcat-fieldname.
APPEND ls_value TO lt_values.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'FIELDNAME'
* PVALKEY = ' '
* DYNPPROG = ' '
* DYNPNR = ' '
* DYNPROFIELD = ' '
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
* VALUE_ORG = 'C'
* MULTIPLE_CHOICE = ' '
display = space
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
TABLES
value_tab = lt_values
field_tab = lt_fields
return_tab = lt_return
* DYNPFLD_MAPPING =
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0 AND sy-subrc NE 3.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
READ TABLE lt_return INTO ls_return
WITH KEY fieldname = 'FIELDNAME'.
IF sy-subrc EQ 0.
c_value = ls_return-fieldval.
ENDIF.
ENDFORM. " d0100_f4_fcode
*&---------------------------------------------------------------------*
*& Form d0100_event_data_changed
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_event_data_changed USING er_data_changed
TYPE REF TO cl_alv_changed_data_protocol
e_onf4
e_onf4_before
e_onf4_after
i_grid TYPE i. "#EC *
DATA: l_text1 TYPE string,
l_text2 TYPE string,
l_text3 TYPE string.
CONCATENATE text-100 e_onf4 INTO l_text3.
CONCATENATE text-101 e_onf4_before INTO l_text1.
CONCATENATE text-102 e_onf4_after INTO l_text2.
DATA: l_event TYPE lvc_fname. "#EC NEEDED
IF gs_test-info_popup_once EQ con_true.
READ TABLE gs_test-events_info_popup INTO l_event
WITH KEY table_line = 'DATA_CHANGED'.
IF sy-subrc NE 0.
INSERT 'DATA_CHANGED'
INTO gs_test-events_info_popup INDEX 1.
MESSAGE i000(0k) WITH text-001
l_text3
l_text1
l_text2.
ENDIF.
ELSEIF gs_test-no_info_popup EQ space.
MESSAGE i000(0k) WITH text-001
l_text3
l_text1
l_text2.
ENDIF.
DATA: ls_row TYPE lvc_s_moce.
LOOP AT er_data_changed->mt_deleted_rows INTO ls_row.
CASE i_grid.
WHEN con_source.
DELETE gt_outtab_source INDEX ls_row-row_id.
WHEN con_target.
DELETE gt_outtab_target INDEX ls_row-row_id.
ENDCASE.
ENDLOOP.
*... die Ausgabetabelle ist noch nicht aktualisiert
* hier sollen semantische Prüfungen zunächst erfolgen über
* er_data_changed->mt_good_cells
* Fehler können dann dem Fehlerprotokoll angehängt werden
* er_data_changed->add_protocol_entry
* Es darf an dieser Stelle kein Refresh erfolgen!
ENDFORM. " d0100_event_data_changed
*&---------------------------------------------------------------------*
*& Form d0100_event_data_changed_finis
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM d0100_event_data_changed_finis . "#EC *
DATA: l_event TYPE lvc_fname. "#EC NEEDED
IF gs_test-info_popup_once EQ con_true.
READ TABLE gs_test-events_info_popup INTO l_event
WITH KEY table_line = 'DATA_CHANGED_FINISHED'.
IF sy-subrc NE 0.
INSERT 'DATA_CHANGED_FINISHED'
INTO gs_test-events_info_popup INDEX 1.
MESSAGE i000(0k) WITH text-002.
ENDIF.
ELSEIF gs_test-no_info_popup EQ space.
MESSAGE i000(0k) WITH text-002.
ENDIF.
*... die Ausgabetabelle ist nun aktualisiert
ENDFORM. " d0100_event_data_changed_finis
Regards
Uwe