Tuesday, October 14, 2014

Editable ALV sap abap

*----------------------------------------------------------------------*
REPORT y_oops_alv_edit_pushbutton.

INCLUDE y_classes_alv_edit_button.


START
-OF-SELECTION.

PERFORM data_fetch.

CALL SCREEN 103.

" STATUS_0100 OUTPUT
MODULE status_0103 OUTPUT.
  
SET PF-STATUS 'STATUS3'.
  
SET TITLEBAR 'TITLE3'.
ENDMODULE.                


MODULE display_alv OUTPUT.

IF o_cust IS NOT BOUND.
  
CREATE OBJECT o_cust
      
EXPORTING

                container_name
= 'CUSTOM1'.
   
CREATE OBJECT o_alv
      
EXPORTING

                i_parent
= o_cust.

CALL METHOD o_alv->register_edit_event
   
EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified.


" Create field catalogue and layout
PERFORM create_fcat CHANGING gt_fcat.

PERFORM create_layout CHANGING gs_layo.



CALL METHOD o_alv->set_table_for_first_display
   
EXPORTING

       
* is_variant = variant
         is_layout
= gs_layo
         i_save
= 'A'

       
* it_toolbar_excluding = t_toolbar
       
* i_structure_name =
   
CHANGING
        it_outtab
= it_mara
        it_fieldcatalog
= gt_fcat.


CREATE OBJECT gr_event_handler .
CREATE OBJECT event_receiver.
*CREATE OBJECT event_receiver1 .

SET HANDLER gr_event_handler->handle_double_click FOR o_alv .
*SET HANDLER event_receiver->handle_data_changed FOR O_ALV..

*SET HANDLER event_receiver1->handle_toolbar_set FOR o_alv.
*SET HANDLER event_receiver1->handle_user_command FOR o_alv.


ELSE.

CALL METHOD o_alv->refresh_table_display.
ENDIF.
ENDMODULE.



MODULE user_command_0103 INPUT.
 
CASE ok_code.
   
WHEN 'BACK' .
      
LEAVE TO SCREEN 0.

   
WHEN 'EXIT'.
       
LEAVE PROGRAM.

   
WHEN 'SAVE'.
        
PERFORM save_database.

   
WHEN 'UPDT'.
        
PERFORM db_delete.

* CALL METHOD o_alv->REFRESH_TABLE_DISPLAY.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT

" DATA_FETCH
FORM data_fetch .
  
SELECT * FROM mara INTO TABLE it_mara WHERE matnr IN s_matnr.

   variant
-report = sy-repid.
   variant
-username = sy-uname.
ENDFORM.                   

FORM create_fcat CHANGING pt_fcat TYPE lvc_t_fcat.

DATA : ls_fcat TYPE lvc_s_fcat.


* ls_fcat-coltext = 'Radio Button'.
* ls_fcat-fieldname = 'RADIO'.
** ls_fcat-ref_table = 'gt_emp'.
* ls_fcat-icon = 'X'. "Icons
* ls_fcat-hotspot = 'X'. "Hotspot(Hand Symbol)
* ls_fcat-col_pos = '1'.

ls_fcat
-fieldname = 'MATNR'.
ls_fcat
-coltext = 'Material'.
ls_fcat
-outputlen = 18.
ls_fcat
-hotspot = 'X'.
APPEND ls_fcat TO pt_fcat.
CLEAR ls_fcat.

ls_fcat
-fieldname = 'MEINS'.
ls_fcat
-coltext = 'Base Unit'.
ls_fcat
-outputlen = 4.
ls_fcat
-edit = 'X'.
APPEND ls_fcat TO pt_fcat.
CLEAR ls_fcat.

ls_fcat
-fieldname = 'MTART'.
ls_fcat
-coltext = 'Material Type'.
ls_fcat
-outputlen = 4.
ls_fcat
-edit = 'X'.
APPEND ls_fcat TO pt_fcat.
CLEAR ls_fcat.

ls_fcat
-fieldname = 'MBRSH'.
ls_fcat
-coltext = 'Industry Sector'.
ls_fcat
-outputlen = 2.
ls_fcat
-edit = 'X'.
APPEND ls_fcat TO pt_fcat.
CLEAR ls_fcat.

ls_fcat
-fieldname = 'ERSDA'.
ls_fcat
-coltext = 'Created on'.
ls_fcat
-outputlen = 8.
ls_fcat
-edit = 'X'.
APPEND ls_fcat TO pt_fcat.
CLEAR ls_fcat.

ls_fcat
-fieldname = 'ERNAM'.
ls_fcat
-coltext = 'Name of person'.
ls_fcat
-outputlen = 12.
ls_fcat
-edit = 'X'.
APPEND ls_fcat TO pt_fcat.
CLEAR ls_fcat.

ls_fcat
-fieldname = 'MATKL'.
ls_fcat
-coltext = 'Material Group'.
ls_fcat
-outputlen = 10.
ls_fcat
-edit = 'X'.
APPEND ls_fcat TO pt_fcat.
CLEAR ls_fcat.

ENDFORM.

FORM create_layout CHANGING ps_layo TYPE lvc_s_layo.
   gs_layo
-zebra = 'X'.
ENDFORM.


FORM handle_double_click USING i_row TYPE lvc_s_row
                                                  i_column
TYPE
lvc_s_col
                                                  is_row_no
TYPE lvc_s_roid.


READ TABLE it_mara INTO wa_mara INDEX is_row_no-row_id .

IF sy-subrc = 0 .

SET PARAMETER ID 'MAT' FIELD wa_mara-matnr.

CASE i_column.
 
WHEN 'MATNR'.
   
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
 
WHEN 'MBLNR'.
   
CALL TRANSACTION 'MIGO' AND SKIP FIRST SCREEN..
  
WHEN OTHERS.

ENDCASE.

ENDIF.
ENDFORM .

FORM save_database .

*--- Getting the selected rows index
CALL METHOD o_alv->get_selected_rows

  
IMPORTING et_index_rows = i_selected_rows.


*--- Through the index capturing the values of selected rows

LOOP AT i_selected_rows INTO w_selected_rows.

READ TABLE it_mara INTO wa_mara INDEX w_selected_rows-index.

IF sy-subrc EQ 0.
MOVE-CORRESPONDING wa_mara TO w_modified.
APPEND w_modified TO i_modified.
ENDIF.
ENDLOOP.

MODIFY mara FROM TABLE i_modified.

ENDFORM. " SAVE_DATABASE "handle_double_click



FORM db_delete.

DATA i_selected_rows TYPE lvc_t_row.

CALL METHOD o_alv->get_selected_rows
IMPORTING et_index_rows = i_selected_rows.


LOOP AT i_selected_rows INTO w_selected_rows.
READ TABLE it_mara INTO wa_mara INDEX w_selected_rows-index .

IF sy-subrc = 0.
DELETE FROM mara WHERE matnr = wa_mara-matnr.
MESSAGE text-002 TYPE 'I'.
ENDIF.
ENDLOOP.
*------------------------------------------------------
* Insert Lines.
*------------------------------------------------------
* Else.
*mt_inserted_rows
* CALL METHOD o_alv->get_selected_rows
* IMPORTING et_index_rows = i_selected_rows.
*
* LOOP AT i_selected_rows INTO w_selected_rows.
* MOVE-CORRESPONDING w_selected_rows TO w_modified.
* APPEND w_modified TO i_modified.
* ENDLOOP.
*
* INSERT mara FROM TABLE i_modified.
*** §9.Refresh your internal tables.
*Endif.

CALL METHOD o_alv->refresh_table_display.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form DELETE_ROW
*&---------------------------------------------------------------------*

*FORM delete_row .
*DATA: lt_rows TYPE lvc_t_row,
* lt_index TYPE lvc_s_row-index,
* ls_row TYPE lvc_s_row.
*
* CALL METHOD o_alv->get_selected_rows
* IMPORTING
* et_index_rows = i_deleted_rows.
*
** SORT lcl_eventhandler=>mt_del_rows BY index DESCENDING. " !!!
*
*
* LOOP AT i_deleted_rows INTO w_deleted_rows.
* DELETE yjdemo INDEX w_deleted_rows-index.
* ENDLOOP.
*
*
*ENDFORM. " DELETE_ROW

*----------------------------------------------------------------------*DECLARATION PART
*-------------------------------------------------*

DATA : o_cust TYPE REF TO cl_gui_custom_container,
o_alv
TYPE REF TO cl_gui_alv_grid,
it_mara
TYPE TABLE OF mara,
wa_mara
TYPE mara,
gt_fcat
TYPE lvc_t_fcat,
gs_layo
TYPE lvc_s_layo,
ok_code
TYPE sy-ucomm.

DATA: t_mat LIKE mara-matnr,
variant
TYPE disvariant,
gv_matnr
type matnr.
*DATA : ty_toolbar TYPE stb_button.
DATA : e_object TYPE REF TO cl_alv_event_toolbar_set,
io_alv_toolbar
TYPE REF TO cl_alv_event_toolbar_set.

data: i_modified TYPE STANDARD TABLE OF mara,"For getting modified rows
w_modified
TYPE mara.



CLASS lcl_event_handler DEFINITION .
PUBLIC SECTION .
METHODS:

*--Double-click control
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column es_row_no.


PRIVATE SECTION.
ENDCLASS. "lcl_event_handler DEFINITION

DATA gr_event_handler TYPE REF TO lcl_event_handler .
*----------------------------------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*

CLASS lcl_event_handler IMPLEMENTATION .


*--Handle Double Click
METHOD handle_double_click .
PERFORM handle_double_click USING e_row e_column es_row_no .
ENDMETHOD . "handle_double_click
ENDCLASS . "lcl_event_handler IMPLEMENTATION

CLASS cl_event_receiver DEFINITION.

PUBLIC SECTION.

METHODS handle_data_changed
FOR EVENT data_changed OF
cl_gui_alv_grid
IMPORTING e_ucomm.

* er_data_changed
* e_onf4
* e_onf4_before
* e_onf4_after
ENDCLASS. "cl_event_receiver DEFINITION

CLASS cl_event_receiver IMPLEMENTATION.
METHOD handle_data_changed.
* BREAK-POINT.

*data: lt_index type LVC_T_ROW,
* lt_row type LVC_T_ROID.

DATA i_selected_rows TYPE lvc_t_row.
o_alv
->check_changed_data( ).


CALL METHOD o_alv->
get_selected_rows
IMPORTING

et_index_rows
= i_selected_rows.
* et_row_no = lt_row.
* WHAT FUNCTION CAUSED THIS EVENT???
ENDMETHOD. "handle_data_changed
ENDCLASS. "cl_event_receiver IMPLEMENTATION

*CLASS lcl_events_d0100 DEFINITION DEFERRED.




DATA: "event_receiver1 TYPE REF TO lcl_events_d0100,
event_receiver
TYPE REF TO cl_event_receiver,
i_selected_rows
TYPE lvc_t_row, "Selected Rows
w_selected_rows
TYPE lvc_s_row,
i_inserted_rows
TYPE lvc_t_row,
w_inserted_rows
TYPE lvc_s_row,
i_deleted_rows
TYPE lvc_t_row,
W_deleted_rows
TYPE lvc_S_row.
*TYPE-POOLS : CNDP.
Select-OPTIONS : s_matnr for gv_matnr.




*CLASS lcl_events_d0100 DEFINITION.
***
** PUBLIC SECTION.
**
** METHODS handle_toolbar_set
** FOR EVENT toolbar OF cl_gui_alv_grid
** IMPORTING
** e_object
** e_interactive."---user command on clicking a button
**
* METHODS handle_user_command.
* FOR EVENT user_command OF cl_gui_alv_grid
* IMPORTING e_ucomm sender.
* ENDMETHOD.
* ENDCLASS. "lcl_events_d0100 DEFINITIONTYPE-POOLS cndp.
*
*
*
*
*
*CLASS lcl_events_d0100 IMPLEMENTATION.
**
** METHOD handle_toolbar_set.
** ty_toolbar-function = 'SAVE'. "name of btn to catch click
** ty_toolbar-butn_type = 0.
** ty_toolbar-text = 'SAVE'.
** ty_toolbar-icon = 'icon_save_row'.
** APPEND ty_toolbar TO e_object->mt_toolbar.
**
** ENDMETHOD. "handle_toolbar_set
**
* METHOD handle_user_command.
** DATA: wr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
*
* perform delete_row .
** Perform save_database.
** CALL METHOD o_alv->REFRESH_TABLE_DISPLAY.
** ENDCASE.
**
** ENDMETHOD. "handle_user_commandENDCLASS.
**ENDCLASS.

No comments:

Post a Comment