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

how to create function code for field in GRID like list box in screen

Former Member
0 Likes
503

Hi all,

I have requirement like drop down is created for field1 in GRID,

and have given f4 help for it, as soon as i change the data in the field

event has to trigger to update thevalues in other field.

This scenario i worked on screens where field is created with listbox and assign function code to it

when the field value changes the event triggers .

Is there is anything like that which will fire the event for field value changes.

can i update anything through the fieldcatalogue.

anybody help me on this

Regards,

Madhavi

2 REPLIES 2
Read only

Former Member
0 Likes
446

Hi Madhavi,

yes we can do that by registering edit events..

check the below example.. has both the variants dropdown/f4 hlp...

screen flow logic

PROCESS BEFORE OUTPUT.
  MODULE pbo.
 
PROCESS AFTER INPUT.
  MODULE pai AT EXIT-COMMAND.

program

*----------------------------------------------------------------------*
*       CLASS lcl_event_responder DEFINITION                           *
*----------------------------------------------------------------------*
CLASS lcl_event_responder DEFINITION.
  PUBLIC SECTION.
    DATA  : ls_changed_cell TYPE  lvc_s_modi,
            lv_language     TYPE  spras..
    METHODS refresh_changed_data  FOR EVENT data_changed
                                  OF cl_gui_alv_grid
                                  IMPORTING er_data_changed
                                            e_ucomm.

ENDCLASS.                    "event_responder DEFINITION

DATA: go_handler         TYPE REF TO lcl_event_responder,
      go_container       TYPE REF TO cl_gui_custom_container,
      go_grid            TYPE REF TO cl_gui_alv_grid,
      gt_fieldcat        TYPE lvc_t_fcat,
      gv_language        TYPE spras VALUE 'E',
      gt_outtab          TYPE TABLE OF makt WITH HEADER LINE.

PARAMETERS : dropdown TYPE char01 RADIOBUTTON GROUP grp,
             f4help   TYPE char01 RADIOBUTTON GROUP grp.

START-OF-SELECTION.
  CALL SCREEN 100.

END-OF-SELECTION.

*---------------------------------------------------------------------*
*       MODULE PBO OUTPUT                                             *
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
  SET PF-STATUS 'BASIC'.
  PERFORM create_and_init_alv CHANGING gt_outtab[]
                                       gt_fieldcat.
ENDMODULE.                    "pbo OUTPUT
*---------------------------------------------------------------------*
*       MODULE PAI INPUT                                              *
*---------------------------------------------------------------------*
MODULE pai INPUT.
  SET SCREEN 0. LEAVE SCREEN.
ENDMODULE.                    "pai INPUT



*&---------------------------------------------------------------------*
FORM create_and_init_alv CHANGING pt_outtab LIKE gt_outtab[]
                                  pt_fieldcat TYPE lvc_t_fcat.

  CHECK go_container IS NOT BOUND.

  CREATE OBJECT go_container
    EXPORTING
      container_name = 'CUSTOM'.

  CREATE OBJECT go_grid
    EXPORTING
      i_parent = go_container.

  PERFORM build_display_table.

  PERFORM build_fieldcat CHANGING pt_fieldcat.

  IF dropdown EQ abap_true.
    PERFORM set_drdn_table.
  ENDIF.

  go_grid->set_table_for_first_display( CHANGING  it_fieldcatalog      = pt_fieldcat
                                                  it_outtab            = pt_outtab ).

  go_grid->set_ready_for_input( 1 ).

" raises the 'data_changed' event when we select another cell/any action after changing the data
  go_grid->register_edit_event( EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified ).

  CREATE OBJECT go_handler.

  SET HANDLER go_handler->refresh_changed_data FOR go_grid.

ENDFORM.                               "CREATE_AND_INIT_ALV
*&---------------------------------------------------------------------*
FORM build_display_table.
  FREE gt_outtab.
  SELECT * FROM makt UP TO 20 ROWS INTO TABLE gt_outtab WHERE spras EQ gv_language.
ENDFORM.                               "build_display_table
*&---------------------------------------------------------------------*
FORM build_fieldcat CHANGING pt_fieldcat TYPE lvc_t_fcat.

  DATA ls_fcat TYPE lvc_s_fcat.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = 'MAKT'
    CHANGING
      ct_fieldcat      = pt_fieldcat.

  LOOP AT pt_fieldcat INTO ls_fcat.
    IF    ls_fcat-fieldname EQ 'SPRAS'.
      ls_fcat-edit       = abap_true..
      ls_fcat-outputlen  = 8.
      IF dropdown EQ abap_true.
        ls_fcat-drdn_hndl  = '1'.
        ls_fcat-checktable = '!'.        "do not check foreign keys
      ENDIF.
      MODIFY pt_fieldcat FROM ls_fcat.
    ENDIF.
  ENDLOOP.
ENDFORM.                               "build_fieldcat
*&---------------------------------------------------------------------*
FORM set_drdn_table.

  CHECK go_grid->offline( ) IS INITIAL.

  DATA: lt_dropdown TYPE lvc_t_drop,
        ls_dropdown TYPE lvc_s_drop.

  ls_dropdown-handle = '1'.
  ls_dropdown-value  = 'EN'.
  APPEND ls_dropdown TO lt_dropdown.

  ls_dropdown-handle = '1'.
  ls_dropdown-value  = 'DE'.
  APPEND ls_dropdown TO lt_dropdown.

  CALL METHOD go_grid->set_drop_down_table
    EXPORTING
      it_drop_down = lt_dropdown.

ENDFORM.                                " set_drdn_table
*&---------------------------------------------------------------------*
FORM change_display_table USING pv_language pv_rowno TYPE i.
  READ TABLE gt_outtab INDEX pv_rowno.
  SELECT SINGLE * FROM makt INTO gt_outtab WHERE matnr = gt_outtab-matnr AND spras = pv_language.
  IF sy-subrc EQ 0.
    DELETE gt_outtab INDEX pv_rowno.
    INSERT gt_outtab INDEX pv_rowno.
  ELSE.
    CLEAR : gt_outtab-maktx,
            gt_outtab-maktg.
    DELETE gt_outtab INDEX pv_rowno.
    INSERT gt_outtab INDEX pv_rowno.
  ENDIF.
ENDFORM.                    "change_display_table

*---------------------------------------------------------------------*
*       CLASS event_responder IMPLEMENTATION                          *
*---------------------------------------------------------------------*
CLASS lcl_event_responder IMPLEMENTATION.
  METHOD refresh_changed_data.
    READ TABLE er_data_changed->mt_mod_cells INTO ls_changed_cell INDEX 1.
    CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
      EXPORTING
        input  = ls_changed_cell-value
      IMPORTING
        output = lv_language.
    PERFORM change_display_table USING lv_language ls_changed_cell-row_id.
    go_grid->refresh_table_display( ).
  ENDMETHOD.                    "click
ENDCLASS.                    "event_responder IMPLEMENTATION

Cheers,

Jose.

Read only

Former Member
0 Likes
446

thanks