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 data_chnaged event will work

Former Member
0 Likes
992

hi all,

i had requirement like when ever i give the material in input field,

dynamically i am calling event data_changed, where it triggers

data_changed event.

By that the material details should display int other output fields .

but it is not happening with this code , will anybody help me in this issue.

REPORT zspot_test1 .

TABLES : makt.

----


  • CLASS : LCL_EVENT_HAND

----


  • ........ *

----


CLASS : lcl_event_handler DEFINITION.

PUBLIC SECTION.

METHODS : data_change FOR EVENT data_changed

OF cl_gui_alv_grid IMPORTING er_data_changed.

ENDCLASS.

----


  • CLASS : LCL_EVENT_HAND

----


  • ........ *

----


CLASS : lcl_event_handler IMPLEMENTATION.

METHOD : data_change.

DATA: ls_good TYPE lvc_s_modi, gv_matnr TYPE matnr.

LOOP AT er_data_changed->mt_good_cells INTO ls_good.

CASE ls_good-fieldname.

WHEN'GV_MATNR'.

IF NOT gv_matnr IS INITIAL.

SELECT SINGLE * FROM makt INTO makt WHERE matnr = gv_matnr.

ENDIF.

ENDCASE.

ENDLOOP..

ENDMETHOD.

ENDCLASS.

DATA : ev1 TYPE REF TO lcl_event_handler.

START-OF-SELECTION.

CREATE OBJECT ev1.

SET HANDLER ev1->data_change FOR ALL INSTANCES.

END-OF-SELECTION.

CALL SCREEN 100.

&----


*& Module USER_COMMAND_0100 INPUT

&----


  • text

----


MODULE user_command_0100 INPUT.

DATA : okcode TYPE syucomm, gv_matnr TYPE matnr.

*if not gv_matnr is initial.

CASE okcode.

WHEN 'ENTE'.

SELECT SINGLE * FROM makt .

WHEN 'SAVE'.

LEAVE TO SCREEN 0.

ENDCASE.

*endif.

ENDMODULE. " USER_COMMAND_0100 INPU

&----


*& Module STATUS_0100 OUTPUT

&----


  • text

----


MODULE status_0100 OUTPUT.

SET PF-STATUS 'MAIN100'.

SET TITLEBAR 'Materials'

its urgent please.. let me know anyone

ENDMODULE. " STATUS_0100 OUTPUT

hi all,

i had requirement like when ever i give the material in input field,

dynamically i am calling event data_changed, where it triggers

data_changed event.

By that the material details should display int other output fields .

but it is not happening with this code , will anybody help me in this issue.

REPORT zspot_test1 .

TABLES : makt.

----


  • CLASS : LCL_EVENT_HAND

----


  • ........ *

----


CLASS : lcl_event_handler DEFINITION.

PUBLIC SECTION.

METHODS : data_change FOR EVENT data_changed

OF cl_gui_alv_grid IMPORTING er_data_changed.

ENDCLASS.

----


  • CLASS : LCL_EVENT_HAND

----


  • ........ *

----


CLASS : lcl_event_handler IMPLEMENTATION.

METHOD : data_change.

DATA: ls_good TYPE lvc_s_modi, gv_matnr TYPE matnr.

LOOP AT er_data_changed->mt_good_cells INTO ls_good.

CASE ls_good-fieldname.

WHEN'GV_MATNR'.

IF NOT gv_matnr IS INITIAL.

SELECT SINGLE * FROM makt INTO makt WHERE matnr = gv_matnr.

ENDIF.

ENDCASE.

ENDLOOP..

ENDMETHOD.

ENDCLASS.

DATA : ev1 TYPE REF TO lcl_event_handler.

START-OF-SELECTION.

CREATE OBJECT ev1.

SET HANDLER ev1->data_change FOR ALL INSTANCES.

END-OF-SELECTION.

CALL SCREEN 100.

&----


*& Module USER_COMMAND_0100 INPUT

&----


  • text

----


MODULE user_command_0100 INPUT.

DATA : okcode TYPE syucomm, gv_matnr TYPE matnr.

*if not gv_matnr is initial.

CASE okcode.

WHEN 'ENTE'.

SELECT SINGLE * FROM makt .

WHEN 'SAVE'.

LEAVE TO SCREEN 0.

ENDCASE.

*endif.

ENDMODULE. " USER_COMMAND_0100 INPU

&----


*& Module STATUS_0100 OUTPUT

&----


  • text

----


MODULE status_0100 OUTPUT.

SET PF-STATUS 'MAIN100'.

SET TITLEBAR 'Materials'

its urgent please.. let me know anyone

ENDMODULE. " STATUS_0100 OUTPUT

10 REPLIES 10
Read only

Former Member
0 Likes
947

Hi Madhavi,

You have to call the method CHECK_CHANGED_DATA of class CL_GUI_ALV_GRID for triggering the event DATA_CHANGED.

Try calling the method. This will help u in solving your problem.

Read only

uwe_schieferstein
Active Contributor
0 Likes
947

Hello

Perhaps the following sample report <b>ZUS_SDN_ALVGRID_EDITABLE_3</b> may be useful.


*&---------------------------------------------------------------------*
*& Report  ZUS_SDN_ALVGRID_EDITABLE_3
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zus_sdn_alvgrid_editable_3.


TYPE-POOLS: abap.

DATA:
  gd_repid         TYPE syrepid,
  gd_okcode        TYPE ui_func,
*
  gs_layout        TYPE lvc_s_layo,
  gt_fcat          TYPE lvc_t_fcat,
  go_docking       TYPE REF TO cl_gui_docking_container,
  go_grid          TYPE REF TO cl_gui_alv_grid.


TYPES: BEGIN OF ty_s_outtab.
INCLUDE TYPE makt  AS data.
TYPES:  celltab    TYPE lvc_t_styl.
TYPES: END OF ty_s_outtab.

DATA:
  gs_outtab        TYPE ty_s_outtab,
  gt_outtab        TYPE STANDARD TABLE OF ty_s_outtab
                   WITH DEFAULT KEY.



*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler DEFINITION.

  PUBLIC SECTION.

    CLASS-METHODS:
      handle_data_changed
        FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING
          er_data_changed
          e_onf4
          e_onf4_before
          e_onf4_after
          e_ucomm
          sender.


ENDCLASS.                    "lcl_eventhandler DEFINITION


*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler IMPLEMENTATION.

  METHOD handle_data_changed.
*   define local data
    DATA:
      ld_idx             TYPE i,
      ls_outtab          LIKE LINE OF gt_outtab.

    "    perform REFRESH_LIST.  " update ALV list here or at PAI

*   Trigger PAI -> refresh ALV list
    CALL METHOD cl_gui_cfw=>set_new_ok_code('REFRESH' ).


  ENDMETHOD.                    "handle_data_changed

ENDCLASS.                    "lcl_eventhandler IMPLEMENTATION




START-OF-SELECTION.

  DO 10 TIMES.
    APPEND INITIAL LINE TO gt_outtab.
  ENDDO.





* Create docking container
  CREATE OBJECT go_docking
    EXPORTING
      parent                      = cl_gui_container=>screen0
      ratio                       = 90
    EXCEPTIONS
      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 ALV grid
  CREATE OBJECT go_grid
    EXPORTING
      i_parent          = go_docking
    EXCEPTIONS
      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.




* Build fieldcatalog
  PERFORM build_fieldcatalog.

  PERFORM set_layout.

  SET HANDLER:
    lcl_eventhandler=>handle_data_changed FOR go_grid.


* Display data
  CALL METHOD go_grid->set_table_for_first_display
    EXPORTING
      is_layout       = gs_layout
    CHANGING
      it_outtab       = gt_outtab
      it_fieldcatalog = gt_fcat
    EXCEPTIONS
      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.



* Link the docking container to the target dynpro
  gd_repid = syst-repid.
  CALL METHOD go_docking->link
    EXPORTING
      repid                       = gd_repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      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.


* ok-code field = GD_OKCODE
  CALL SCREEN '0100'.
* Flow logic (no elements on screen):
*  PROCESS BEFORE OUTPUT.
*    MODULE STATUS_0100.
**
*  PROCESS AFTER INPUT.
*    MODULE USER_COMMAND_0100.


END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.
*  SET TITLEBAR 'xxx'.

**      CALL METHOD go_grid1->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.

ENDMODULE.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  TRANSLATE gd_okcode TO UPPER CASE.

* Fetch changes on ALV grid
  go_grid->check_changed_data( ).


  CASE gd_okcode.
    WHEN 'BACK' OR
         'END'  OR
         'CANC'.
      SET SCREEN 0. LEAVE SCREEN.


    WHEN OTHERS.
  ENDCASE.

  PERFORM refresh_list.
  CALL METHOD go_grid->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.


  CLEAR: gd_okcode.

ENDMODULE.                 " USER_COMMAND_0100  INPUT


*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG_KNB1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcatalog .
* define local data
  DATA:
    ls_fcat        TYPE lvc_s_fcat.



  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
*     I_BUFFER_ACTIVE              =
      i_structure_name             = 'MAKT'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_BYPASSING_BUFFER           =
*     I_INTERNAL_TABNAME           =
    CHANGING
      ct_fieldcat                  = gt_fcat
    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.





  LOOP AT gt_fcat INTO ls_fcat
                  WHERE ( fieldname = 'MATNR' ).
    ls_fcat-edit    = abap_true.
    MODIFY gt_fcat FROM ls_fcat.
  ENDLOOP.


ENDFORM.                    " BUILD_FIELDCATALOG


*&---------------------------------------------------------------------*
*&      Form  SET_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_layout .

  CLEAR: gs_layout.

  gs_layout-cwidth_opt = abap_true.
  gs_layout-zebra      = abap_true.

  gs_layout-stylefname = 'CELLTAB'.

ENDFORM.                    " SET_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  HANDLE_CHANGED_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM handle_changed_data .

  lcl_eventhandler=>handle_data_changed( sender = go_grid ).

ENDFORM.                    " HANDLE_CHANGED_DATA
*&---------------------------------------------------------------------*
*&      Form  REFRESH_LIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM refresh_list .
*   define local data
  DATA:
    ld_idx             TYPE i,
    ls_outtab          LIKE LINE OF gt_outtab.


  LOOP AT gt_outtab INTO ls_outtab.
    ld_idx = syst-tabix.

    IF ( ls_outtab-matnr IS INITIAL ).
      CLEAR: ls_outtab-spras,
             ls_outtab-maktx,
             ls_outtab-maktg.

    ELSE.
      SELECT SINGLE * FROM  makt INTO ls_outtab-data
             WHERE  matnr  = ls_outtab-matnr
             AND    spras  = syst-langu.
      IF ( syst-subrc NE 0 ).
        CLEAR: ls_outtab.
      ENDIF.

    ENDIF.

    MODIFY gt_outtab FROM ls_outtab INDEX ld_idx.
  ENDLOOP.

ENDFORM.                    " REFRESH_LIST

Regards

Uwe

Read only

Former Member
0 Likes
947

hi

good

go through this link,hope this ll help you to solve your problem

http://www.abap4.it/download/ALV.pdf

thanks

mrutyun^

Read only

Former Member
0 Likes
947

hi mruthyun,

you have send me a document for Grid,

where as i need the data changed for a particular field in

screen ( not in Grid).

regards,

Madhavi

Read only

Former Member
0 Likes
947

hi Uwe,

you have send me a program for Grid,

where as i need the data changed for a particular field in

screen ( not in Grid).

regards,

Madhavi

Read only

Former Member
0 Likes
947

Hi Uwe,

Just i saw the answer which is related to my problem, where you have replied for someones question.

But still i am not able to analyse it .

will you please explain me detailed .

how to check DATA_CHANGED for cells ( at cell level).

please its urgent

Read only

0 Likes
947

Hello Madhavi

The sample report BCALV_EDIT_02 shows how to "Define ready-for-input status at cell level". For details please refer to the documentation at the beginning of the report coding.

The crucial points are shown below:

*§1.Extend your output table for a field, e.g., CELLTAB, that holds
*   information about the edit status of each cell for the
*   corresponding row (the table type is SORTED!).
DATA: BEGIN OF gt_outtab occurs 0.  "with header line
        include structure sflight.
DATA: celltab type LVC_T_STYL.
DATA: END OF gt_outtab.

*§3.Provide the fieldname of the celltab field by using field
*   STYLEFNAME of the layout structure.
   gs_layout-stylefname = 'CELLTAB'.

* set substate of editable cells to deactivated
    CALL METHOD grid1->set_ready_for_input
          EXPORTING i_ready_for_input = 0.

    CALL METHOD grid1->set_table_for_first_display
         EXPORTING i_structure_name = 'SFLIGHT'
                   is_layout        = gs_layout
         CHANGING  it_outtab        = gt_outtab[].

*§2.After selecting data, set edit status for each row in a loop
*   according to field SEATSMAX.
  LOOP AT gt_outtab.
    l_index = sy-tabix.
    refresh lt_celltab.
    if gt_outtab-seatsmax ge 300.
        perform fill_celltab using 'RW'
                             changing lt_celltab.
    else.
        perform fill_celltab using 'RO'
                             changing lt_celltab.
    endif.
*§2c.Copy your celltab to the celltab of the current row of gt_outtab.
    INSERT LINES OF lt_celltab INTO TABLE gt_outtab-celltab.
    MODIFY gt_outtab INDEX l_index.
  ENDLOOP.

*&---------------------------------------------------------------------*
*&      Form  FILL_CELLTAB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_PT_CELLTAB  text
*----------------------------------------------------------------------*
FORM fill_celltab using value(p_mode)
                  CHANGING pt_celltab TYPE lvc_t_styl.
  DATA: ls_celltab TYPE lvc_s_styl,
        l_mode type raw4.
* This forms sets the style of column 'PRICE' editable
* according to 'p_mode' and the rest to read only either way.

  IF p_mode EQ 'RW'.
*§2a.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_ENABLED to set a cell
*    to status "editable".
    l_mode = cl_gui_alv_grid=>mc_style_enabled.
  ELSE. "p_mode eq 'RO'
*§2b.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_DISABLED to set a cell
*    to status "non-editable".
    l_mode = cl_gui_alv_grid=>mc_style_disabled.
  ENDIF.

  ls_celltab-fieldname = 'CARRID'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  INSERT ls_celltab INTO TABLE pt_celltab.
  ls_celltab-fieldname = 'CONNID'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  INSERT ls_celltab INTO TABLE pt_celltab.
  ls_celltab-fieldname = 'FLDATE'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  INSERT ls_celltab INTO TABLE pt_celltab.
  ls_celltab-fieldname = 'PRICE'.
  ls_celltab-style = l_mode.
  INSERT ls_celltab INTO TABLE pt_celltab.
  ls_celltab-fieldname = 'CURRENCY'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  INSERT ls_celltab INTO TABLE pt_celltab.
  ls_celltab-fieldname = 'PLANETYPE'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  INSERT ls_celltab INTO TABLE pt_celltab.
  ls_celltab-fieldname = 'SEATSMAX'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  INSERT ls_celltab INTO TABLE pt_celltab.
  ls_celltab-fieldname = 'SEATSOCC'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  INSERT ls_celltab INTO TABLE pt_celltab.
  ls_celltab-fieldname = 'PAYMENTSUM'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  INSERT ls_celltab INTO TABLE pt_celltab.  " !!! LVC_T_STYL is SORTED table type

ENDFORM.                               " FILL_CELLTAB

Please note that the field CELLTAB (of GT_OUTTAB) needs not to be known in the fieldcatalog. However, you have to "register" this as layout option (gs_layout-stylefname = 'CELLTAB').

Regards

Uwe

Read only

0 Likes
947

Hi Uwe,

i am displaying the screen with material in edit mode with f4 help.

i need to select the data from f4 and have to check the data have to be in f4 .

just checking, as i am new to ABAP methods i understand the scenario for grid in BCALV_GRID_03.

Here i need for only one input field .

pls let me know it

regards,

Madhavi

Read only

0 Likes
947

Hello Madhavi

Please excuse that I have misunderstood your question which is partly due to an incomplete problem description.

To catch and validate F4 help values have a look at the following variant of my sample report

ZUS_SDN_ALVGRID_EDITABLE_3

.

The SAP standard report

BCALV_TEST_GRID_F4_HELP

contains many samples dealing with F4 handling in ALV programming.

*&---------------------------------------------------------------------*
*& Report  ZUS_SDN_ALVGRID_EDITABLE_3
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zus_sdn_alvgrid_editable_3.


TYPE-POOLS: abap.

DATA:
  gd_repid         TYPE syrepid,
  gd_okcode        TYPE ui_func,
*
  gs_layout        TYPE lvc_s_layo,
  gt_fcat          TYPE lvc_t_fcat,
  go_docking       TYPE REF TO cl_gui_docking_container,
  go_grid          TYPE REF TO cl_gui_alv_grid.


TYPES: BEGIN OF ty_s_outtab.
INCLUDE TYPE makt  AS data.
TYPES:  celltab    TYPE lvc_t_styl.
TYPES: END OF ty_s_outtab.

DATA:
  gs_outtab        TYPE ty_s_outtab,
  gt_outtab        TYPE STANDARD TABLE OF ty_s_outtab
                   WITH DEFAULT KEY.



*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler DEFINITION.

  PUBLIC SECTION.

    CLASS-METHODS:
      handle_data_changed
        FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING
          er_data_changed
          e_onf4
          e_onf4_before
          e_onf4_after
          e_ucomm
          sender,

      handle_onf4
        FOR EVENT onf4 OF cl_gui_alv_grid
          IMPORTING
            e_fieldname
            e_fieldvalue
            es_row_no
            er_event_data
            et_bad_cells
            e_display
            sender.



ENDCLASS.                    "lcl_eventhandler DEFINITION


*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler IMPLEMENTATION.

  METHOD handle_onf4.

    BREAK-POINT.

  ENDMETHOD.                    "handle_onf4

  METHOD handle_data_changed.
*   define local data
    DATA:
      ld_idx             TYPE i,
      ls_outtab          LIKE LINE OF gt_outtab.

    IF ( e_onf4_after = abap_true ).
      BREAK-POINT.
      "     Do check, calculations, etc.

*     Trigger PAI -> refresh ALV list
      CALL METHOD cl_gui_cfw=>set_new_ok_code('REFRESH' ).
    ENDIF.


  ENDMETHOD.                    "handle_data_changed

ENDCLASS.                    "lcl_eventhandler IMPLEMENTATION




START-OF-SELECTION.

  DO 10 TIMES.
    APPEND INITIAL LINE TO gt_outtab.
  ENDDO.





* Create docking container
  CREATE OBJECT go_docking
    EXPORTING
      parent                      = cl_gui_container=>screen0
      ratio                       = 90
    EXCEPTIONS
      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 ALV grid
  CREATE OBJECT go_grid
    EXPORTING
      i_parent          = go_docking
    EXCEPTIONS
      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.




* Build fieldcatalog
  PERFORM build_fieldcatalog.

  PERFORM set_layout.

  SET HANDLER:
    lcl_eventhandler=>handle_data_changed FOR go_grid,
    lcl_eventhandler=>handle_onf4         FOR go_grid.


  PERFORM register_f4help.

* Display data
  CALL METHOD go_grid->set_table_for_first_display
    EXPORTING
      is_layout       = gs_layout
    CHANGING
      it_outtab       = gt_outtab
      it_fieldcatalog = gt_fcat
    EXCEPTIONS
      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.



* Link the docking container to the target dynpro
  gd_repid = syst-repid.
  CALL METHOD go_docking->link
    EXPORTING
      repid                       = gd_repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      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.


* ok-code field = GD_OKCODE
  CALL SCREEN '0100'.
* Flow logic (no elements on screen):
*  PROCESS BEFORE OUTPUT.
*    MODULE STATUS_0100.
**
*  PROCESS AFTER INPUT.
*    MODULE USER_COMMAND_0100.


END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.
*  SET TITLEBAR 'xxx'.

**      CALL METHOD go_grid1->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.

ENDMODULE.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  TRANSLATE gd_okcode TO UPPER CASE.

* Fetch changes on ALV grid
  go_grid->check_changed_data( ).


  CASE gd_okcode.
    WHEN 'BACK' OR
         'END'  OR
         'CANC'.
      SET SCREEN 0. LEAVE SCREEN.


    WHEN 'REFRESH'.
      PERFORM refresh_list.
      CALL METHOD go_grid->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.


    WHEN OTHERS.
  ENDCASE.




  CLEAR: gd_okcode.

ENDMODULE.                 " USER_COMMAND_0100  INPUT


*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG_KNB1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcatalog .
* define local data
  DATA:
    ls_fcat        TYPE lvc_s_fcat.



  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
*     I_BUFFER_ACTIVE              =
      i_structure_name             = 'MAKT'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_BYPASSING_BUFFER           =
*     I_INTERNAL_TABNAME           =
    CHANGING
      ct_fieldcat                  = gt_fcat
    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.





  LOOP AT gt_fcat INTO ls_fcat
                  WHERE ( fieldname = 'MATNR' ).
    ls_fcat-edit    = abap_true.
    MODIFY gt_fcat FROM ls_fcat.
  ENDLOOP.


ENDFORM.                    " BUILD_FIELDCATALOG


*&---------------------------------------------------------------------*
*&      Form  SET_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_layout .

  CLEAR: gs_layout.

  gs_layout-cwidth_opt = abap_true.
  gs_layout-zebra      = abap_true.

  gs_layout-stylefname = 'CELLTAB'.

ENDFORM.                    " SET_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  HANDLE_CHANGED_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM handle_changed_data .

  lcl_eventhandler=>handle_data_changed( sender = go_grid ).

ENDFORM.                    " HANDLE_CHANGED_DATA
*&---------------------------------------------------------------------*
*&      Form  REFRESH_LIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM refresh_list .
*   define local data
  DATA:
    ld_idx             TYPE i,
    ls_outtab          LIKE LINE OF gt_outtab.


  LOOP AT gt_outtab INTO ls_outtab.
    ld_idx = syst-tabix.

    IF ( ls_outtab-matnr IS INITIAL ).
      CLEAR: ls_outtab-spras,
             ls_outtab-maktx,
             ls_outtab-maktg.

    ELSE.
      SELECT SINGLE * FROM  makt INTO ls_outtab-data
             WHERE  matnr  = ls_outtab-matnr
             AND    spras  = syst-langu.
      IF ( syst-subrc NE 0 ).
        CLEAR: ls_outtab.
      ENDIF.

    ENDIF.

    MODIFY gt_outtab FROM ls_outtab INDEX ld_idx.
  ENDLOOP.

ENDFORM.                    " REFRESH_LIST

*&---------------------------------------------------------------------*
*&      Form  REGISTER_F4HELP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM register_f4help .
* define local data
* data for event handling
  DATA:
    ls_f4 TYPE lvc_s_f4,
    lt_f4 TYPE lvc_t_f4.


*§1 register f4-help, if a user-defined one should be used.
*§7a set parameter getbefore if you want to use values entered
* before raising event on_f4.
*§7b set parameter chngeafter if you want to use the values entered via
* f4 to manipulate other values of your table.
  CLEAR:  ls_f4.

  ls_f4-fieldname  = 'MATNR'.
  ls_f4-register   = 'X'.
**      ls_f4-getbefore  = check_be.               "§7a
  ls_f4-chngeafter = abap_true.               "§7b
  APPEND ls_f4 TO lt_f4.
  CALL METHOD go_grid->register_f4_for_fields
    EXPORTING
      it_f4 = lt_f4.
ENDFORM.                    " REGISTER_F4HELP

Regards

Uwe

Read only

0 Likes
947

you are explaning on Grid,

But where as i need for only one screen field.

even for that i am defining and implmenting but where i need to set handler to trigger the event