Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 7

*&---------------------------------------------------------------------*

*& Report ZALV_EDITTABLE_OOPS


*
*&
*
*&---------------------------------------------------------------------*
*&
*
*&
*
*&---------------------------------------------------------------------*
REPORT zalv_edittable_oops
TYPE-POOLS : CNDP.
TABLES : mara.

DATA : itab TYPE STANDARD TABLE OF mara,


wa TYPE mara.
DATA : i_modified TYPE STANDARD TABLE OF mara,
wa_modified TYPE mara,
i_field TYPE lvc_t_fcat,
wa_field TYPE lvc_s_fcat,
i_layout TYPE lvc_s_layo,
LV_UCOMM TYPE SY-UCOMM.
CLASS lcl_event DEFINITION DEFERRED.
DATA : event_receiver TYPE REF TO lcl_event,
i_selected_rows TYPE lvc_t_row,
w_selected_rows TYPE lvc_s_row.
DATA : o_docking TYPE REF TO cl_gui_docking_container,
o_grid TYPE REF TO cl_gui_alv_grid.
INITIALIZATION.

*---------------------------------------------------------------------*
*
CLASS lcl_event_d0100 DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event DEFINITION.
PUBLIC SECTION.
METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_grid IMPORT
ING E_ucomm.
TYPE-POOLS : cndp.
DATA : ok_code TYPE sy-ucomm.
ENDCLASS.
"LCL_EVENT DEFINITION

*---------------------------------------------------------------------*
*
CLASS LCL_EVENT IMPLEMENTATION

*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event IMPLEMENTATION.
METHOD handle_user_command.
DATA : w_data_changed TYPE REF TO cl_alv_changed_data_protocol.
DATA : it_rows TYPE lvc_t_row,
it_index TYPE lvc_s_row-index.
CASE E_Ucomm.
WHEN 'SAVE'.
PERFORM save_database.
CALL METHOD o_grid->refresh_table_display.
ENDCASE.
ENDMETHOD.
"HANDLE_USER_COMMAND

ENDCLASS.
*END-OF-SELECTION.
START-OF-SELECTION.
SELECT * FROM mara INTO CORRESPONDING FIELDS OF TABLE itab UP TO 10 ROWS.
CALL SCREEN 9000.

**&---------------------------------------------------------------------*
**&
Module USER_COMMAND_9000 INPUT
**&---------------------------------------------------------------------*
**
text
**----------------------------------------------------------------------*
*module USER_COMMAND_9000 input.
*
*DATA : E_UCOMM TYPE SY-UCOMM.
*LV_UCOMM = SY-UCOMM.
*CASE E_UCOMM.
*WHEN 'SAVE'.
*PERFORM SAVE_DATABASE.
*CALL METHOD O_GRID->REFRESH_TABLE_DISPLAY.
*
*WHEN 'BACK'.
*PERFORM FREE_OBJECTS.
*SET SCREEN 0.
*LEAVE SCREEN.
*
*ENDCASE.
*
*endmodule.
" USER_COMMAND_9000 INPUT
*
*&---------------------------------------------------------------------*
*&
Module ALV_POPULATE OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
module ALV_POPULATE output.

IF o_docking IS INITIAL.
* SET PF-STATUS 'PF'.
* SET TITLEBAR 'xxx'.
*CREATIONG DOCKING CONTAINER AND GRID
PERFORM create_object.
*FILLING THE FIELDCATALOG TABLE
PERFORM create_fieldcat.
*SETTING LAYOUT.
PERFORM set_layout.
*COLORING A CELL
*
PERFORM color_cell.
*
*MAKING A CELL EDITABLE
*
PERFORM cell_edit.
PERFORM EVENT.
*DISPLAYING THE OUTPUT.
PERFORM display.
ENDIF.
endmodule.

" ALV_POPULATE OUTPUT

*&---------------------------------------------------------------------*
*&
Form CREATE_OBJECT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM create_object .
CREATE OBJECT o_docking
EXPORTING
*
PARENT
=
*
REPID
=
*
DYNNR
=
*
SIDE
= DOCK_AT_LEFT
*
EXTENSION
= 50
*
STYLE
=
*
LIFETIME
= lifetime_default
*
CAPTION
=
*
METRIC
= 0
ratio
= '95'
*
NO_AUTODEF_PROGID_DYNNR
=
*
NAME
=
* 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 o_grid


EXPORTING
I_SHELLSTYLE
= 0
I_LIFETIME
=
i_parent
= o_docking
I_APPL_EVENTS
= space
I_PARENTDBG
=
I_APPLOGPARENT
=
I_GRAPHICSPARENT =
I_NAME
=
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.

" CREATE_OBJECT

*&---------------------------------------------------------------------*
*&
Form CREATE_FIELDCAT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM create_fieldcat .

*
*
*
*

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'


EXPORTING
I_BUFFER_ACTIVE
=
i_structure_name
= 'MARA'
I_CLIENT_NEVER_DISPLAY
= 'X'
I_BYPASSING_BUFFER
=
I_INTERNAL_TABNAME
=
CHANGING
ct_fieldcat
= i_field
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.

ENDFORM.

" CREATE_FIELDCAT

*&---------------------------------------------------------------------*
*&
Form DISPLAY
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM display .
CALL METHOD o_grid->set_table_for_first_display
EXPORTING
*
I_BUFFER_ACTIVE
=
*
I_BYPASSING_BUFFER
=
*
I_CONSISTENCY_CHECK
=
I_STRUCTURE_NAME
= 'MARA'
*
is_variant
= w_variant
*
i_save
= 'A'
*
I_DEFAULT
= 'X'
is_layout
= i_layout
*
IS_PRINT
=
*
IT_SPECIAL_GROUPS
=
*
IT_TOOLBAR_EXCLUDING
=
*
IT_HYPERLINK
=
*
IT_ALV_GRAPHICS
=
*
IT_EXCEPT_QINFO
=
CHANGING
it_outtab
= itab
it_fieldcatalog
= i_field
*
IT_SORT
=
*
IT_FILTER
=
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.

" DISPLAY

*&---------------------------------------------------------------------*
*&
Form SAVE_DATABASE
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*

FORM save_database .
CALL METHOD o_grid->get_selected_rows
IMPORTING
ET_INDEX_ROWS = I_SELECTED_ROWS.
*
ET_ROW_NO
=
.
LOOP AT I_SELECTED_ROWS INTO W_SELECTED_ROWS.
READ TABLE ITAB INTO WA INDEX W_SELECTED_ROWS-INDEX.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING WA TO WA_MODIFIED.
APPEND WA_MODIFIED TO I_MODIFIED.
ENDIF.
ENDLOOP.
MODIFY MARA FROM TABLE I_MODIFIED.
ENDFORM.
" SAVE_DATABASE
*&---------------------------------------------------------------------*
*&
Form set_layout
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM set_layout .
i_layout-edit = 'X'.
ENDFORM.
" set_layout
*&---------------------------------------------------------------------*
*&
Form EVENT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
form EVENT .
CREATE OBJECT EVENT_RECEIVER.
SET HANDLER event_receiver->handle_user_command FOR o_grid.
*CALL METHOD o_grid->register_edit_event
* EXPORTING
*
i_event_id = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED
** EXCEPTIONS
**
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.
endform.

" EVENT

*&---------------------------------------------------------------------*
*&
Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.

CALL METHOD o_grid->register_edit_event


EXPORTING
i_event_id = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED
* EXCEPTIONS
*
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.
SET PF-STATUS 'PF'.
ENDMODULE.

" STATUS_9000 OUTPUT

*&---------------------------------------------------------------------*
*&
Form FREE_OBJECTS
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
form FREE_OBJECTS .
endform.

" FREE_OBJECTS

You might also like