Adding Two fields and display content in third field when user clicks calculate button in ALV Grid Toolbar Report

*&------*

*& Report ZSD_R_CALCULATE_ADD_FIELDS

*&

*&------*

*&Purpose:Adding the two field values and display it in third field when

*& user clicks calculate button in alv grid toolbar.

*&

*&------*

REPORT zsd_r_calculate_add_fields MESSAGE-ID zsd_calculate_fields.

include zsd_r_calculate_add_fields_top. "Data Declaration

include zsd_r_calculate_add_main. "Main Program

include zsd_r_calculate_add_forms. "Sub-Rountines

INCLUDE ZSD_R_CALCULATE_ADD_FIELDS_TOP.

*&------*

*& Include ZSD_R_CALCULATE_ADD_FIELDS_TOP

*&------*

CLASS:lcl_event_handler DEFINITION DEFERRED. "Class for handling alv grid events

TYPES:BEGIN OF gty_final,

operand1 TYPE i,

operand2 TYPE i,

result TYPE i,

END OF gty_final.

DATA:gv_count TYPE i,

gt_final TYPE TABLE OF gty_final,

gw_final TYPE gty_final,

gt_fieldcat TYPE lvc_t_fcat,

gw_fieldcat TYPE lvc_s_fcat,

gw_layout TYPE lvc_s_layo,

gr_grid TYPE REF TO cl_gui_alv_grid,

gr_container TYPE REF TO cl_gui_custom_container.

INCLUDE ZSD_R_CALCULATE_ADD_MAIN.

*&------*

*& Include ZSD_R_CALCULATE_ADD_MAIN

*&------*

START-OF-SELECTION.

CALL SCREEN 0100.

*------*

* CLASS lcl_event_handler DEFINITION

*------*

*

*------*

CLASS lcl_event_handler DEFINITION.

PUBLIC SECTION.

CLASS-METHODS:

*method declaration for adding new button in alv grid toolbar

handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid

IMPORTING e_object e_interactive,

*method declaration for user interaction

handle_user_command

FOR EVENT user_command OF cl_gui_alv_grid

IMPORTING e_ucomm.

PRIVATE SECTION.

ENDCLASS. "lcl_event_handler DEFINITION

*class implementation

CLASS lcl_event_handler IMPLEMENTATION.

METHOD handle_toolbar.

PERFORM handle_toolbar USING e_object .

ENDMETHOD. "handle_toolbar

METHOD handle_user_command.

PERFORM handle_user_command USING e_ucomm.

ENDMETHOD. "handle_user_command

ENDCLASS. "lcl_event_handler IMPLEMENTATION

*&------*

*& Module create_control OUTPUT

*&------*

* text

*------*

MODULE create_control OUTPUT.

IF gr_container IS INITIAL.

CREATE OBJECT gr_container

EXPORTING

container_name = 'GR_CONTAINER'

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 e001.

ENDIF.

ENDIF.

IF gr_grid IS INITIAL.

CREATE OBJECT gr_grid

EXPORTING

i_parent = gr_container

EXCEPTIONS

error_cntl_create = 1

error_cntl_init = 2

error_cntl_link = 3

error_dp_create = 4

OTHERS = 5

.

IF sy-subrc > 0.

MESSAGE e002.

ENDIF.

ENDIF.

*creating instances for event handler class.

DATA: gr_event_handler TYPE REF TO lcl_event_handler.

CREATE OBJECT gr_event_handler.

SET HANDLER gr_event_handler->handle_toolbar FOR gr_grid .

PERFORM alv_output.

SET HANDLER gr_event_handler->handle_user_command FOR gr_grid .

ENDMODULE. " create_control OUTPUT

INCLUDE ZSD_R_CALCULATE_ADD_FORMS.

*&------*

*& Form alv_output

*&------*

*&Building and Displaying a ALV grid

*------*

* --> p1 text

* <-- p2 text

*------*

FORM alv_output .

"Building a fieldcatalog

gv_count = 1.

PERFORM buildcatalog USING gv_count 'OPERAND1' 'GT_FINAL' 'OPERAND VALUE1' 'X'.

PERFORM buildcatalog USING gv_count 'OPERAND2' 'GT_FINAL' 'OPERAND VALUE2' 'X'.

PERFORM buildcatalog USING gv_count 'RESULT' 'GT_FINAL' 'RESULT VALUE' ' '.

PERFORM alv_grid.

ENDFORM. " alv_output

*&------*

*& Form buildcatalog

*&------*

*&Building a fieldcatalog

*------*

* -->lp_count-Incrementing the column value

* -->lp_fieldname-fieldname

* -->lp_tabname-internal table name

* -->lp_seltext_l-headings

* -->lp_edit-to differentiate input and output field

*------*

FORM buildcatalog USING lp_count TYPE lvc_colpos

lp_fieldname TYPE lvc_fname

lp_tabname TYPE lvc_tname

lp_seltext_l TYPE scrtext_l

lp_edit TYPE lvc_edit.

CLEAR:gw_fieldcat.

gw_fieldcat-col_pos = lp_count.

gw_fieldcat-fieldname = lp_fieldname.

gw_fieldcat-tabname = lp_tabname.

gw_fieldcat-scrtext_l = lp_seltext_l.

gw_fieldcat-edit = lp_edit.

APPEND gw_fieldcat TO gt_fieldcat.

ENDFORM. " buildcatalog

*&------*

*& Form alv_grid

*&------*

*&Displaying a ALV Grid

*------*

FORM alv_grid .

CALL METHOD gr_grid->set_table_for_first_display

CHANGING

it_outtab = gt_final

it_fieldcatalog = gt_fieldcat[]

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.

CLEAR:gt_fieldcat[].

ENDFORM. " alv_grid

*&------*

*& Module STATUS_0100 OUTPUT

*&------*

*&status-bar creation

*------*

MODULE status_0100 OUTPUT.

SET PF-STATUS 'ZSTATUS_BAR'.

ENDMODULE. " STATUS_0100 OUTPUT

*&------*

*& Form handle_toolbar

*&------*

*&Adding Custom Calculate button in alv grid toolbar

*------*

* -->lP_OBJECT:reference variable for class

*------*

FORM handle_toolbar USING lp_object TYPE REF TO cl_alv_event_toolbar_set.

DATA:lw_toolbar TYPE stb_button.

CLEAR lw_toolbar.

MOVE 'CAL' TO lw_toolbar-function.

MOVE icon_calculation TO lw_toolbar-icon.

MOVE '0' TO lw_toolbar-butn_type.

MOVE 'CALCULATE' TO lw_toolbar-text.

APPEND lw_toolbar TO lp_object->mt_toolbar.

CLEAR lw_toolbar.

MOVE '&f3' TO lw_toolbar-function.

MOVE icon_arrow_left TO lw_toolbar-icon.

MOVE '0' TO lw_toolbar-butn_type.

MOVE 'BACK' TO lw_toolbar-text.

APPEND lw_toolbar TO lp_object->mt_toolbar.

ENDFORM. " handle_toolbar

*&------*

*& Form handle_user_command

*&------*

*&For User interaction

*------*

* -->P_E_UCOMM-Holding user command value

*------*

FORM handle_user_command USING lp_ucomm TYPE sy-ucomm.

DATA :lt_selected_rows TYPE lvc_t_roid ,

lw_selected_row TYPE lvc_s_roid .

CALL METHOD gr_grid->get_selected_rows

IMPORTING

et_row_no = lt_selected_rows.

READ TABLE lt_selected_rows INTO lw_selected_row INDEX 1 .

IF sy-subrc NE 0.

ENDIF.

CASE lp_ucomm.

WHEN 'CAL'.

READ TABLE gt_final INTO gw_final INDEX lw_selected_row-row_id.

IF sy-subrc EQ 0.

gw_final-result = gw_final-operand1 + gw_final-operand2.

MODIFY gt_final FROM gw_final INDEX lw_selected_row-row_id TRANSPORTING result.

ENDIF.

gv_count = 1.

PERFORM buildcatalog USING gv_count 'OPERAND1' 'GT_FINAL' 'OPERAND VALUE1' 'X'.

PERFORM buildcatalog USING gv_count 'OPERAND2' 'GT_FINAL' 'OPERAND VALUE2' 'X'.

PERFORM buildcatalog USING gv_count 'RESULT' 'GT_FINAL' 'RESULT VALUE' ' '.

PERFORM alv_grid.

WHEN '&f3'.

LEAVE TO SCREEN 0.

ENDCASE.

ENDFORM. " handle_user_command

Output Screen

After clicking append rows in alv grid toolbar,enter ing values in operand1 and operand2.

selecting thefirst row for adding values and user clicks calculate button .Result value is displayed in third field in ALV grid