‎2007 Sep 03 1:27 PM
Hi expert gurus,
i have a ALV grid display.In the output there are 5 columns , 3 out of them are blank columns like BATCH,QTY & DATE. output fields r like below.
material prod_order <b>batch</b> <b>qty</b> <b>date</b>
mat1 prod1
mat2 prod1
The above is my ALV grid display.
For first record, for mat1, if i fill the BATCH column & press 'ENTER' then other two fields ( qty & date ) should be filled.
i want to know , which method will trigger when i press 'ENTER' key so that i can go inside my program & can come back to output with QTY & DATE for that batch.
i am very new to OO concept. can someone give clear idea ??
it's better if someone provides some code relating to METHOD for ENTER key.
ur answers will be rewarded.
Thanks & Regards
madhusmita
‎2007 Sep 03 1:41 PM
Hi,
When u press enter the follwoing code gets fired:
METHOD handle_item_changed_finished.
DATA: wal_out_tab TYPE types_out_tab.
PERFORM item_data_changed_finished USING e_modified c_stable.
-- Reset green/warning simulated rows in data_changed---------------*
CLEAR wal_out_tab.
MODIFY t_outtab FROM wal_out_tab TRANSPORTING ins_check
WHERE ins_check = c_simulate AND
mesg_status <> icon_locked.
Hope That Helps
Anirban M.
‎2007 Sep 03 5:01 PM
Hi ,
can u give me some detail coding for that enter key to be triggered???
i m very new to OO ABAP.
Thanks
‎2007 Sep 04 1:47 AM
Hello Madhusmita
The following sample report ZUS_SDN_ALV_GRID_EDITABLE_1 shows how to realise your requirement using event DATA_CHANGED_FINISHED.
Run the report and change the values of the blue colum ZUAWA (sort key) to either '001', 002' or '003' and then push ENTER. The values of the green columns are adjusted.
Please note that I have not coded any
validation
logic. This, of course, should be mandatory for editable ALV grids.*&---------------------------------------------------------------------*
*& Report ZUS_SDN_ALV_GRID_EDITABLE_1
*&
*&---------------------------------------------------------------------*
*& Screen '0100' contains no elements.
*& ok_code -> assigned to GD_OKCODE
*&
*& Flow logic:
* PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
**
* PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
*&
*&---------------------------------------------------------------------*
REPORT zus_sdn_alv_grid_editable_1.
TYPE-POOLS: abap.
DATA:
gd_okcode TYPE ui_func,
*
go_docking TYPE REF TO cl_gui_docking_container,
go_grid TYPE REF TO cl_gui_alv_grid,
gs_layout TYPE lvc_s_layo,
gs_variant TYPE disvariant.
DATA:
gt_outtab TYPE STANDARD TABLE OF knb1,
gs_outtab LIKE LINE OF gt_outtab.
INCLUDE zus_sdn_alv_grid_editable_1_c1. " local class
" eventhandler ==> static methods of lcl_eventhandler
START-OF-SELECTION.
SELECT * FROM knb1 INTO TABLE gt_outtab UP TO 40 ROWS
WHERE bukrs = '1000'.
" set default values
gs_outtab-zuawa = '000'.
gs_outtab-busab = ' '.
gs_outtab-akont = '0000140000'.
MODIFY gt_outtab FROM gs_outtab
TRANSPORTING zuawa busab akont
WHERE ( bukrs IS NOT INITIAL ). " modify all entries
PERFORM init_controls.
* Display data
gs_layout-grid_title = 'Customers'.
CALL METHOD go_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'KNB1'
is_layout = gs_layout
CHANGING
it_outtab = gt_outtab
EXCEPTIONS
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.
PERFORM modify_fieldcatalog.
*§3.Optionally register ENTER to raise event DATA_CHANGED.
* (Per default the user may check data by using the check icon).
CALL METHOD go_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
SET HANDLER:
lcl_eventhandler=>handle_data_changed_finished FOR go_grid.
* Link the docking container to the target dynpro
CALL METHOD go_docking->link
EXPORTING
repid = syst-repid
dynnr = '0100'
* CONTAINER =
EXCEPTIONS
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.
* NOTE: dynpro does not contain any elements
CALL SCREEN '0100'.
* Flow logic of dynpro (does not contain any dynpro elements):
*
*PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'. " contains push button "DETAIL"
* SET TITLEBAR 'xxx'.
*** Refresh display of detail ALV list
** CALL METHOD go_grid2->refresh_table_display
*** EXPORTING
*** IS_STABLE =
*** I_SOFT_REFRESH =
** EXCEPTIONS
** OTHERS = 2.
** IF sy-subrc <> 0.
*** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
** ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
TRANSLATE gd_okcode TO UPPER CASE.
CASE gd_okcode.
WHEN 'BACK' OR
'END' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
* User has pushed button "Display/Change"
WHEN 'EDIT'.
PERFORM toggle_display_edit.
WHEN OTHERS.
IF ( go_grid->is_ready_for_input( ) = 1 ). " editable
go_grid->check_changed_data( ). " retrieve changed data
ENDIF.
ENDCASE.
CLEAR: gd_okcode.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form TOGGLE_DISPLAY_EDIT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM toggle_display_edit .
IF ( go_grid->is_ready_for_input( ) = 0 ). " not editable
go_grid->set_ready_for_input( 1 ). " editable
ELSE.
go_grid->check_changed_data( ). " retrieve changed data
go_grid->set_ready_for_input( 0 ). " not editable
ENDIF.
go_grid->refresh_table_display( ).
ENDFORM. " TOGGLE_DISPLAY_EDIT
*&---------------------------------------------------------------------*
*& Form INIT_CONTROLS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM init_controls .
* Create docking container
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0
ratio = 90
EXCEPTIONS
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.
CALL METHOD go_docking->set_extension
EXPORTING
extension = 9999 " fill entire dynpro
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
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 go_grid
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
i_parent = go_docking
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
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. " INIT_CONTROLS
*&---------------------------------------------------------------------*
*& Form MODIFY_FIELDCATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM modify_fieldcatalog .
* define local data
DATA:
ls_fcat TYPE lvc_s_fcat,
lt_fcat TYPE lvc_t_fcat.
CALL METHOD go_grid->get_frontend_fieldcatalog
IMPORTING
et_fieldcatalog = lt_fcat.
" set non-key fields editable
ls_fcat-edit = 'X'.
MODIFY lt_fcat FROM ls_fcat
TRANSPORTING edit
WHERE ( key NE 'X' ).
LOOP AT lt_fcat INTO ls_fcat.
CASE ls_fcat-fieldname.
WHEN 'ZUAWA'.
ls_fcat-emphasize = 'C410'.
WHEN 'BUSAB' OR
'AKONT'.
ls_fcat-emphasize = 'C500'.
WHEN OTHERS.
CONTINUE.
ENDCASE.
MODIFY lt_fcat FROM ls_fcat.
ENDLOOP.
go_grid->set_frontend_fieldcatalog( lt_fcat ).
go_grid->set_ready_for_input( 1 ). " default = editable
go_grid->refresh_table_display( ).
ENDFORM. " MODIFY_FIELDCATALOG
Coding for include ZUS_SDN_ALV_GRID_EDITABLE_1_C1 (local class):
*&---------------------------------------------------------------------*
*& Include ZUS_SDN_ALV_GRID_EDITABLE_1_C1
*&---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* CLASS lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
handle_data_changed_finished FOR EVENT data_changed_finished
OF cl_gui_alv_grid
IMPORTING
e_modified
et_good_cells
sender. " grid instance that raised the event
ENDCLASS. "lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_eventhandler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler IMPLEMENTATION.
METHOD handle_data_changed_finished.
* define local data
DATA:
ls_stable type lvc_s_stbl,
ls_outtab LIKE LINE OF gt_outtab.
LOOP AT gt_outtab INTO ls_outtab.
CASE ls_outtab-zuawa.
WHEN '001'.
ls_outtab-busab = 'K1'.
ls_outtab-akont = '0000140010'.
WHEN '002'.
ls_outtab-busab = 'K2'.
ls_outtab-akont = '0000140020'.
WHEN '003'.
ls_outtab-busab = 'K3'.
ls_outtab-akont = '0000140030'.
WHEN OTHERS.
CONTINUE.
ENDCASE.
MODIFY gt_outtab FROM ls_outtab.
ENDLOOP.
ls_stable-row = abap_true.
ls_stable-col = abap_true.
CALL METHOD go_grid->refresh_table_display
EXPORTING
IS_STABLE = ls_stable
* I_SOFT_REFRESH =
EXCEPTIONS
FINISHED = 1
others = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMETHOD. "handle_data_changed_finished
ENDCLASS. "lcl_eventhandler IMPLEMENTATIONRegards
Uwe
‎2007 Sep 04 3:13 PM
To know when user presses 'ENTER' key, first we have to register this key as below
Set cell modified to trigger data_changed
CALL METHOD go_alv_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>MC_EVT_ENTER.
Here go_alv_grid is an instance of Class CL_GUI_ALV_GRID
You have to handle the event DATA_CHANGED of Class CL_GUI_ALV_GRID to do validation etc.
For e.g
LOOP AT er_data_changed->mt_mod_cells INTO wa_mod_cell.
ASSIGN er_data_changed->mp_mod_rows->* TO <fs>.
READ TABLE <fs> INTO wa_output INDEX wa_mod_cell-tabix.
Update the output table with new values
MODIFY i_output FROM wa_output INDEX wa_mod_cell-row_id.
Do validations.
IF i_output-field1 IS INITIAL.
MESSAGE e000(e1).
ENDIF.
ENDLOOP.
Regards
Kesava