Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

doubt regarding editable ALV report using Classes

Former Member
0 Likes
543

I need to create an ALV report and make few fields editable

and i need to update the changes to the corresponding database tables

for that please suggest me some idea or provide me sample code for that

urgent

3 REPLIES 3
Read only

Former Member
0 Likes
497

Please refer to the program BCALV_EDIT_04

Read only

Former Member
0 Likes
497

Hi ramesh,

Please check this example program. I think it will help for some extent.

[code]&----


*& Report ZSUMA_INTERACTIVEREPORT *

*& *

&----


*& *

*& *

&----


report zsuma_interactivereport.

tables: vbak.

data :gr_alvgrid type ref to cl_gui_alv_grid,

gr_cc_name type scrfname value 'CC_ALV',

gr_ccontainer type ref to cl_gui_custom_container,

gr_fieldcat type lvc_t_fcat,

gr_layout type lvc_s_layo,

gr_sort type lvc_t_sort,

gr_get_cell type lvc_t_cell,

gr_set_cell type lvc_t_cell,

gr_hyper type lvc_t_hype,

gr_drop_down type lvc_t_drop,

is_variant type disvariant,

line_number type lvc_s_roid-row_id,

line(5) type c ,

cell_value type lvc_value.

data: begin of it_vbak occurs 0,

vbeln type vbak-vbeln,

erdat like vbak-erdat,

erzet like vbak-erzet,

netwr like vbak-netwr,

waerk like vbak-waerk,

*Below field is useful for making the entire row with different colors.

  • it must be a char of 4.and layout-info_fname should populate with

*this field.

rowcolor(4) type c,

*Below field is useful for making the INDIVIDUAL CELL with different

*colors.for this we have to include structure of type lvc_t_scol.

*layout-ctab_fname should be populate with this field.

cellcolor type lvc_t_scol,

*below field is added for for providing the hyperlinks to perticular

*field. at the time of field catalog , it_fcatalog-web_field should be

*populate with this field.

vbeln_hyper type int4,

*For displaying one cell as button.we have to declare one styles

*internal table .it has to be populate.at layout structure this table

*name has to be populate at layout-stylename.

cellstyle type lvc_t_styl,

end of it_vbak.

&----


*& SELECTION SCREEN

&----


selection-screen begin of block b1 with frame title text-001.

select-options s_vbeln for vbak-vbeln.

selection-screen end of block b1.

start-of-selection.

select vbeln

erdat

erzet

netwr

waerk

from vbak

into corresponding fields of table it_vbak

where vbeln in s_vbeln.

data: wa_cellcolor type lvc_s_scol,

wa_style type lvc_s_styl.

loop at it_vbak.

  • FOR ROW COLORING

if sy-tabix = 1.

it_vbak-rowcolor = 'C511'.

  • FOR PUTTING THE HYPERLINKS ON VBELN FIELD

it_vbak-vbeln_hyper = '1'.

modify it_vbak.

endif.

  • FOR CELL COLORING

if sy-tabix = 2.

wa_cellcolor-fname = 'ERZET'.

wa_cellcolor-color-col = '6'.

wa_cellcolor-color-int = '1'.

wa_cellcolor-color-inv = '1'.

append wa_cellcolor to it_vbak-cellcolor.

modify it_vbak index 2.

endif.

  • FOR DISPLAYING THE CELL AS A BUTTON

clear it_vbak-cellstyle.

at last.

read table it_vbak index sy-tabix.

wa_style-fieldname = 'NETWR'.

wa_style-style = cl_gui_alv_grid=>mc_style_button.

append wa_style to it_vbak-cellstyle .

modify it_vbak .

endat.

endloop.

if not it_vbak[] is initial.

call screen 100.

endif.

*CLASS DEFINITION FOR HANDLING THE EVENTS IN ALV GRID

class gr_event_handler definition.

public section.

methods:handle_hotspot_click

for event hotspot_click of cl_gui_alv_grid

importing e_row_id e_column_id es_row_no.

endclass.

*CLASS IMPLEMENTATIONFOR HANDLING THE EVENTS IN ALV GRID

class gr_event_handler implementation.

method handle_hotspot_click.

perform handle_hotspot_click using e_row_id e_column_id es_row_no.

endmethod.

endclass.

&----


*& Form BUILDING_FIELDCATALOG

&----


  • text

----


  • <--P_GR_FIELDCAT text

----


form building_fieldcatalog changing p_gr_fieldcat type lvc_t_fcat.

data s_fieldcat type lvc_s_fcat.

s_fieldcat-fieldname = 'VBELN'.

s_fieldcat-outputlen = '15'.

s_fieldcat-col_pos = '1'.

s_fieldcat-coltext = 'DOCCUMENT NO.'.

s_fieldcat-key = ' '.

s_fieldcat-emphasize = 'C511'.

s_fieldcat-web_field = 'VBELN_HYPER'.

append s_fieldcat to p_gr_fieldcat .

clear s_fieldcat.

s_fieldcat-fieldname = 'ERDAT'.

s_fieldcat-outputlen = '15'.

s_fieldcat-col_pos = '2'.

s_fieldcat-coltext = 'REC CREATE DATE.'.

s_fieldcat-emphasize = 'C311'.

s_fieldcat-hotspot = 'X'.

append s_fieldcat to p_gr_fieldcat .

clear s_fieldcat.

s_fieldcat-fieldname = 'ERZET'.

s_fieldcat-outputlen = '15'.

s_fieldcat-col_pos = '3'.

s_fieldcat-coltext = 'TIME ENTRY.'.

*S_FIELDCAT-EMPHASIZE = 'C311'.

append s_fieldcat to p_gr_fieldcat .

clear s_fieldcat.

s_fieldcat-fieldname = 'NETWR'.

s_fieldcat-outputlen = '15'.

s_fieldcat-col_pos = '4'.

s_fieldcat-emphasize = 'C311'.

s_fieldcat-coltext = 'NET WEIGHT.'.

s_fieldcat-do_sum = 'X'.

append s_fieldcat to p_gr_fieldcat .

clear s_fieldcat.

s_fieldcat-fieldname = 'WAERK'.

s_fieldcat-outputlen = '5'.

s_fieldcat-col_pos = '5'.

s_fieldcat-emphasize = 'C511'.

s_fieldcat-coltext = 'CURR.'.

  • FOR PUTTING THE DROP DOWN BOX.

s_fieldcat-drdn_hndl = '1'.

s_fieldcat-edit = 'X'.

append s_fieldcat to p_gr_fieldcat .

clear s_fieldcat.

endform. " BUILDING_FIELDCATALOG

&----


*& Form CREATE_CCONTAINER_INSTANCE

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form create_ccontainer_instance .

create object gr_ccontainer

exporting

container_name = gr_cc_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.

endform. " CREATE_CCONTAINER_INSTANCE

&----


*& Form CREATE_ALVGRID_INSTANCE

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form create_alvgrid_instance .

create object gr_alvgrid

exporting

i_parent = gr_ccontainer

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_ALVGRID_INSTANCE

&----


*& Form DISPLAYING_ALVGRID

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form displaying_alvgrid .

call method gr_alvgrid->set_table_for_first_display

exporting

  • I_BUFFER_ACTIVE =

  • I_BYPASSING_BUFFER =

  • I_CONSISTENCY_CHECK =

  • I_STRUCTURE_NAME =

is_variant = is_variant

i_save = 'A'

  • I_DEFAULT = 'X'

is_layout = gr_layout

  • IS_PRINT =

  • IT_SPECIAL_GROUPS =

  • IT_TOOLBAR_EXCLUDING =

it_hyperlink = gr_hyper

  • IT_ALV_GRAPHICS =

  • IT_EXCEPT_QINFO =

changing

it_outtab = it_vbak[]

it_fieldcatalog = gr_fieldcat

it_sort = gr_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.

*CALL METHOD GR_ALVGRID->GET_FRONTEND_LAYOUT

  • IMPORTING

  • ES_LAYOUT = GR_LAYOUT

  • .

*GR_LAYOUT-GRID_TITLE = 'HAI ALV'.

*CALL METHOD GR_ALVGRID->SET_FRONTEND_LAYOUT

  • EXPORTING

  • IS_LAYOUT = GR_LAYOUT

  • .

endform. " DISPLAYING_ALVGRID

&----


*& Form REFRESH_DISPLAY_TABLE

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form refresh_display_table .

call method gr_alvgrid->refresh_table_display

  • EXPORTING

  • IS_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.

endform. " REFRESH_DISPLAY_TABLE

&----


*& Form SETTING_LAYOUT

&----


  • text

----


  • <--P_GR_LAYOUT text

----


form setting_layout changing p_gr_layout type lvc_s_layo.

p_gr_layout-grid_title = 'ALV GRID USING ABAP OBJECTS'.

p_gr_layout-zebra = 'X'.

p_gr_layout-no_toolbar = ''.

p_gr_layout-sel_mode = 'D'.

p_gr_layout-info_fname = 'ROWCOLOR'.

p_gr_layout-ctab_fname = 'CELLCOLOR'.

p_gr_layout-stylefname = 'CELLSTYLE'.

endform. " SETTING_LAYOUT

&----


*& Module STATUS_0100 OUTPUT

&----


  • text

----


module status_0100 output.

  • SET PF-STATUS 'xxxxxxxx'.

  • SET TITLEBAR 'xxx'.

set pf-status 'MENU'.

if gr_alvgrid is initial.

*CREATING THE CONTAINER INSTANCE BY SENDING THE CONTAINER NAME( IT HAS

*TO COINSIDE WITH COSTUM CONTROL NAME OF TRANSACTION SCREEN

perform create_ccontainer_instance.

perform create_alvgrid_instance.

*VARIANT POPULATION.

perform setting_variants changing is_variant.

*BELOW FORM IS USEFUL TO FILL THE HYPER LINK TABLE AND WE PASS THAT

*TABLE TO 'IT_HYPERLINK' PARAMETER IN FIRST DISPLAY METHOD.

perform setting_hyperlinks_field changing gr_hyper.

*TO MAKE THE COLOUMN AS DROP DOWN.

perform setting_dropdown_column changing gr_drop_down.

perform building_fieldcatalog changing gr_fieldcat.

perform setting_layout changing gr_layout.

perform setting_sorting changing gr_sort.

perform setting_cells changing gr_set_cell.

perform displaying_alvgrid.

*PERFORM GETTING_CELL_DETAILS CHANGING GR_GET_CELL. " IT IS NOT WORKING

  • FOR ME AND I HAVE DOUBT .

perform creating_event_object.

*PERFORM REFRESH_DISPLAY_TABLE.

endif.

endmodule. " STATUS_0100 OUTPUT

&----


*& Module USER_COMMAND_0100 INPUT

&----


  • text

----


module user_command_0100 input.

case sy-ucomm.

when 'BACK'.

leave to screen 000.

endcase.

endmodule. " USER_COMMAND_0100 INPUT

&----


*& Form SETTING_SORTING

&----


  • text

----


  • <--P_GR_SORT text

----


form setting_sorting changing p_gr_sort type lvc_t_sort.

data: lr_sort type lvc_s_sort.

lr_sort-spos = '1'.

lr_sort-fieldname = 'VBELN'.

lr_sort-up = 'X'.

append lr_sort to p_gr_sort.

lr_sort-spos = '2'.

lr_sort-fieldname = 'ERDAT'.

lr_sort-up = 'X'.

append lr_sort to p_gr_sort.

endform. " SETTING_SORTING

&----


*& Form GETTING_CELL_DETAILS

&----


  • text

----


  • <--P_GR_GET_CELL text

----


form getting_cell_details changing p_gr_get_cell.

call method gr_alvgrid->get_selected_cells

importing

et_cell = p_gr_get_cell

.

*CELL_VALUE = P_GR_GET_CELL-VALUE.

endform. " GETTING_CELL_DETAILS

&----


*& Form SETTING_CELLS

&----


  • text

----


  • <--P_GR_SET_CELL text

----


form setting_cells changing p_gr_set_cell type lvc_t_cell.

data:s_gr_set_cell type lvc_s_cell.

s_gr_set_cell-col_id-fieldname = 'NETWR'.

s_gr_set_cell-row_id-index = '3'.

append s_gr_set_cell to p_gr_set_cell.

call method gr_alvgrid->set_selected_cells

exporting

it_cells = p_gr_set_cell.

.

endform. " SETTING_CELLS

&----


*& Form SETTING_HYPERLINKS_FIELD

&----


  • text

----


  • <--P_GR_HYPER text

----


form setting_hyperlinks_field changing p_gr_hyper type lvc_t_hype.

data: is_hype type lvc_s_hype.

is_hype-handle = '1'.

is_hype-href = 'HTTP://WWW.GOOGLE.CO.IN'.

append is_hype to p_gr_hyper.

is_hype-handle = '2'.

is_hype-href = 'HTTP://SDN.SAP.COM'.

append is_hype to p_gr_hyper.

endform. " SETTING_HYPERLINKS_FIELD

&----


*& Form SETTING_DROPDOWN_COLUMN

&----


  • text

----


  • <--P_GR_DROP_DOWN text

----


form setting_dropdown_column changing p_gr_drop_down type lvc_t_drop.

data: wa_drop type lvc_s_drop.

wa_drop-handle = '1'.

wa_drop-value = '$'.

append wa_drop to p_gr_drop_down.

wa_drop-handle = '1'.

wa_drop-value = 'Rs'.

append wa_drop to p_gr_drop_down.

wa_drop-handle = '1'.

wa_drop-value = 'CUR'.

append wa_drop to p_gr_drop_down.

call method gr_alvgrid->set_drop_down_table

exporting

it_drop_down = p_gr_drop_down

  • IT_DROP_DOWN_ALIAS =

.

endform. " SETTING_DROPDOWN_COLUMN

&----


*& Form SETTING_VARIANTS

&----


  • text

----


  • <--P_IS_VARIANT text

----


form setting_variants changing p_is_variant type disvariant.

p_is_variant-report = sy-repid.

endform. " SETTING_VARIANTS

&----


*& Form HANDLE_HOTSPOT_CLICK

&----


  • text

----


  • -->P_E_ROW text

  • -->P_E_COLUMN text

  • -->P_E_ROW_NO text

----


form handle_hotspot_click using p_e_row_id type lvc_s_row

p_e_column_id type lvc_s_col

p_es_row_no type lvc_s_roid.

read table it_vbak index p_es_row_no-row_id.

if sy-subrc = 0 and p_e_column_id-fieldname = 'ERDAT'.

line = p_es_row_no-row_id.

line_number = p_es_row_no-row_id.

leave to screen 200.

endif.

endform. " HANDLE_HOTSPOT_CLICK

&----


*& Form CREATING_EVENT_OBJECT

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form creating_event_object .

data event_handle type ref to gr_event_handler.

create object event_handle.

set handler event_handle->handle_hotspot_click for gr_alvgrid.

endform. " CREATING_EVENT_OBJECT

&----


*& Module STATUS_0200 OUTPUT

&----


  • text

----


module status_0200 output.

set pf-status 'BB'.

  • SET TITLEBAR 'xxx'.

*LINE = LINE_NUMBER.

endmodule. " STATUS_0200 OUTPUT

&----


*& Module USER_COMMAND_0200 INPUT

&----


  • text

----


module user_command_0200 input.

if sy-ucomm = 'BACK'.

leave to screen 100.

endif.

endmodule. " USER_COMMAND_0200 INPUT[/code]

Reward points if helpful

Thanks,

Suma.

Read only

gastn_jareo
Active Participant
0 Likes
497

To make some fields editables they should be allowed to be edited by field catalog. If r_fieldcat is your catalog variable for a field to be edited you should set:

r_fieldcat-edit = 'X'.

If you calls the ALV by function you should do:

DATA: ref_grid TYPE REF TO cl_gui_alv_grid, "Reference to the ALV (Global variable)

it_table_bak[] = it_table[]. "Make a copy to compare after

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

...

i_callback_user_command = 'USER_COMMAND'

...

TABLES

t_outtab = it_table "Data to be shown

FORM user_command USING r_ucomm LIKE sy-ucomm

rs_selfield TYPE slis_selfield.

IF ref_grid IS INITIAL.

  • To get a reference to the actual ALV if is not referenced yet

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

IMPORTING

e_grid = ref_grid.

ENDIF.

IF NOT ref_grid IS INITIAL.

  • To get all data changed

CALL METHOD ref_grid->check_changed_data.

ENDIF.

After that it_table is going to have new values and it_table_bak is going to have old ones, so you can LOOP and compare to cath changes.

With this solution you need to make the reference to the ALV into user_command form because before CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' there is no ALV to refers and after it you don't have control over programa anymore. You need to wait after an event occurs, then you'll be on user command form and you can get a reference.

If you manage it all by objects probably you'll prefers to change it and knows how to do it.

Hope it helps!