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

Display option in ALV using objects

Former Member
0 Likes
653

Hi all,

I am using ALV in Objects.I want to make some cells to be in display mode and some to be in change mode according to the condition(particular cells and not an whole column ). how can i do that?is there any build in method to do that.Kindly suggest me the solution.

Thanks in Advance...

6 REPLIES 6
Read only

Former Member
0 Likes
624

Hi! Check this blog.

Read only

0 Likes
624

For coloring ,this is ok. I want to make cell ready for input depending upon the condtion.

how can i do that??

Read only

0 Likes
624

Diable and enable the inout fields conditonally...

Follow the sample code.

this can be done using the Function module REUSE_ALV_GRID_DISPLAY_LVC.

REPORT ZTESTALV.
 
TYPE-POOLS: SLIS.
 
*- Fieldcatalog
DATA: IT_FIELDCAT  TYPE LVC_T_FCAT,
      IT_FIELDCAT1  TYPE SLIS_T_FIELDCAT_ALV..
*- For Events
DATA:IT_EVENTS TYPE SLIS_T_EVENT.
 
DATA:  X_FIELDCAT  TYPE LVC_S_FCAT,
        X_FIELDCAT1  TYPE SLIS_FIELDCAT_ALV.
DATA:X_LAYOUT TYPE LVC_S_LAYO.
"{ FOR DISABLE
DATA: LS_EDIT TYPE LVC_S_STYL,
      LT_EDIT TYPE LVC_T_STYL.
"} FOR DISABLE
DATA: BEGIN OF IT_VBAP OCCURS 0,
      VBELN LIKE VBAP-VBELN,
      POSNR LIKE VBAP-POSNR,
      HANDLE_STYLE TYPE LVC_T_STYL, "FOR DISABLE
      BUTTON(10),
     END OF IT_VBAP.
DATA: LS_OUTTAB LIKE LINE OF IT_VBAP.
SELECT VBELN
       POSNR
       UP TO 10 ROWS
      INTO CORRESPONDING FIELDS OF TABLE IT_VBAP
      FROM VBAP.
 
 
DATA:L_POS TYPE I VALUE 1.
CLEAR: L_POS.
L_POS = L_POS + 1.
 
X_FIELDCAT-SELTEXT = 'VBELN'.
X_FIELDCAT-FIELDNAME = 'VBELN'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS    = L_POS.
*X_FIELDCAT-EDIT = 'X'.
X_FIELDCAT-OUTPUTLEN = '10'.
x_fieldcat-ref_field = 'VBELN'.
x_fieldcat-ref_table = 'VBAK'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
 
X_FIELDCAT-SELTEXT = 'POSNR'.
X_FIELDCAT-FIELDNAME = 'POSNR'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS    = L_POS.
*X_FIELDCAT-EDIT = 'X'.
X_FIELDCAT-OUTPUTLEN = '5'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
"{FOR DISABLE HERE 6ROW IS DISABLED
SY-TABIX = 6.
 
LS_EDIT-FIELDNAME = 'VBELN'.
LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
LS_EDIT-STYLE2 = SPACE.
LS_EDIT-STYLE3 = SPACE.
LS_EDIT-STYLE4 = SPACE.
LS_EDIT-MAXLEN = 10.
INSERT LS_EDIT INTO TABLE LT_EDIT.
LS_EDIT-FIELDNAME = 'POSNR'.
LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
LS_EDIT-STYLE2 = SPACE.
LS_EDIT-STYLE3 = SPACE.
LS_EDIT-STYLE4 = SPACE.
LS_EDIT-MAXLEN = 6.
INSERT LS_EDIT INTO TABLE LT_EDIT.
INSERT LINES OF LT_EDIT INTO TABLE LS_OUTTAB-HANDLE_STYLE.
MODIFY IT_VBAP INDEX SY-TABIX FROM LS_OUTTAB  TRANSPORTING
                                  HANDLE_STYLE .
 
X_LAYOUT-STYLEFNAME = 'HANDLE_STYLE'.
"} UP TO HERE
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    I_CALLBACK_PROGRAM = SY-REPID
    IS_LAYOUT_LVC      = X_LAYOUT
    IT_FIELDCAT_LVC    = IT_FIELDCAT
  TABLES
    T_OUTTAB           = IT_VBAP[]
  EXCEPTIONS
    PROGRAM_ERROR      = 1
    OTHERS             = 2.
IF SY-SUBRC NE  0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

Read only

0 Likes
624

hi

for ur requirment we use this two method of this class as

u201Ccl_gui_alv_grid=>mc_style_enabledu201D

to make a field editable and u201Ccl_gui_alv_grid=>mc_style_disabledu201D

to make a field non-editable

refer to this sample code for how to use it

pt_list is an internal table which have data to be displayed

DATA ls_listrow LIKE LINE OF pt_list .

DATA ls_stylerow TYPE lvc_s_styl .
DATA lt_styletab TYPE lvc_t_styl .
LOOP AT pt_list INTO ls_listrow .
IF ls_listrow-carrid = 'XY' .
ls_stylerow-fieldname = 'SEATSMAX' .
ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled .
APPEND ls_stylerow TO lt_styletab .
ENDIF .
IF ls_listrow-connid = '02' .
ls_stylerow-fieldname = 'PLANETYPE' .
ls_stylerow-style = cl_gui_alv_grid=>mc_style_enabled .
APPEND ls_stylerow TO lt_styletab .
ENDIF .
INSERT LINES OF lt_styletab INTO ls_listrow-cellstyles .
MODIFY pt_list FROM ls_listrow .
ENDLOOP .

Cheers

Snehi

Read only

Former Member
0 Likes
624

you can do the same in OO ALV. In this example create a screen with no Custom control on it.in PBO create a pf status. since i am using the Docking container. and check the application. In this example when the POSNR = '000010' then i am Diabling the VBELN , else i am enabling the cell for edit.

REPORT ztest1234 MESSAGE-ID zz .

DATA: g_grid TYPE REF TO cl_gui_alv_grid. "First

DATA: l_valid TYPE c,
      v_flag,
      v_data_change,
      v_row TYPE lvc_s_row,
      v_column TYPE lvc_s_col,
      v_row_num TYPE lvc_s_roid.
DATA: ok_code LIKE sy-ucomm,
save_ok LIKE sy-ucomm,
g_container TYPE scrfname VALUE 'TEST',
gs_layout TYPE lvc_s_layo.

DATA:BEGIN OF itab OCCURS 0,
    vbeln LIKE likp-vbeln,
    posnr LIKE lips-posnr,
    lfdat LIKE lips-vfdat,
    box(1),
    handle_style TYPE lvc_t_styl,
END OF itab.
*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_HANDLER DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION .
  PUBLIC SECTION .
    METHODS:
**Hot spot Handler
    handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
    IMPORTING e_row_id e_column_id es_row_no,
**Handler to Check the Data Change
    handle_data_changed FOR EVENT data_changed
    OF cl_gui_alv_grid
    IMPORTING er_data_changed
    e_onf4
    e_onf4_before
    e_onf4_after,
**Double Click Handler
    handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
    IMPORTING e_row e_column es_row_no.

ENDCLASS. "lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_HANDLER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.
*Handle Hotspot Click
  METHOD handle_hotspot_click .
    CLEAR: v_row,v_column,v_row_num.
    v_row = e_row_id.
    v_column = e_column_id.
    v_row_num = es_row_no.
    MESSAGE i000 WITH v_row 'clicked'.
  ENDMETHOD. "lcl_event_handler

*Handle Double Click
  METHOD handle_double_click.
    CLEAR: v_row,v_column,v_row_num.
    v_row = e_row.
    v_column = e_column.
    v_row_num = es_row_no.

    IF e_column = 'VBELN'.
      SET PARAMETER ID 'VL' FIELD itab-vbeln.
      CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.

    ENDIF.
    IF e_column = 'POSNR'.

      MESSAGE i000 WITH 'Click on POSNR row number ' e_row.
      "with this row num you can get the data
    ENDIF.
  ENDMETHOD. "handle_double_click
**Handle Data Change
  METHOD handle_data_changed.
    "here you need to check the changed data
    "and store it in table.
    DATA: x_change TYPE lvc_s_modi.


    LOOP AT er_data_changed->mt_good_cells INTO x_change.
      "UPDATE TABLE HERE WITH THE CHANGED DATA
    ENDLOOP.

  ENDMETHOD. "HANDLE_DATA_CHANGEDENDCLASS. "LCL_EVENT_HANDLER
ENDCLASS.                    "lcl_event_handler IMPLEMENTATION

DATA: dock TYPE REF TO cl_gui_docking_container,
      g_handler TYPE REF TO lcl_event_handler. "handler


DATA: it_fieldcat TYPE lvc_t_fcat,
      x_fieldcat TYPE lvc_s_fcat,
      ls_vari TYPE disvariant.


START-OF-SELECTION.

  SELECT vbeln
  posnr
  FROM lips
  UP TO 20 ROWS
  INTO CORRESPONDING FIELDS OF TABLE itab.

END-OF-SELECTION.
  IF NOT itab[] IS INITIAL.
    CALL SCREEN 100.
  ELSE.
    MESSAGE i002 WITH 'NO DATA FOR THE SELECTION'(004).
 ENDIF.
*&---------------------------------------------------------------------*
*&      Form  CREATE_AND_INIT_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM create_and_init_alv .
  DATA: lt_exclude TYPE ui_functions.
  CREATE OBJECT dock
    EXPORTING
      repid     = sy-repid
      dynnr     = '100'
      extension = '1500'
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      lifetime_dynpro_dynpro_link = 5
      OTHERS                      = 6
      .
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CREATE OBJECT g_grid
  EXPORTING i_parent = dock.


  CLEAR gs_layout.
  gs_layout-grid_title = text-003.
  gs_layout-zebra = space.
  gs_layout-cwidth_opt = 'X'.
  gs_layout-no_rowmark = 'X'.
  gs_layout-box_fname = 'BOX'.
  gs_layout-ctab_fname = 'CELLCOLOR'.
  gs_layout-stylefname = 'HANDLE_STYLE'.
  CALL METHOD g_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.
  CREATE OBJECT g_handler.
  SET HANDLER g_handler->handle_double_click FOR g_grid.


  SET HANDLER g_handler->handle_data_changed FOR g_grid.
  DATA: ls_outatb LIKE LINE OF itab,
  v_index TYPE sy-tabix.
  DATA: ls_edit TYPE lvc_s_styl,
  lt_edit TYPE lvc_t_styl.

  LOOP AT itab INTO ls_outatb WHERE posnr = '000010'.
    v_index = sy-tabix.
    ls_edit-fieldname = 'VBELN'.
    ls_edit-style = cl_gui_alv_grid=>mc_style_disabled.
    ls_edit-style2 = space.
    ls_edit-style3 = space.
    ls_edit-style4 = space.
    ls_edit-maxlen = 8.
    INSERT ls_edit INTO TABLE lt_edit.
    INSERT LINES OF lt_edit INTO TABLE ls_outatb-handle_style.
    MODIFY itab INDEX v_index FROM ls_outatb TRANSPORTING
    handle_style.
  ENDLOOP.

* setting focus for created grid control

  CALL METHOD cl_gui_control=>set_focus
    EXPORTING
      control = g_grid.

  PERFORM build_fieldcat.

**Vaiant to save the layout
  ls_vari-report = sy-repid.
  ls_vari-handle = space.
  ls_vari-log_group = space.
  ls_vari-username = space.
  ls_vari-variant = space.
  ls_vari-text = space.
  ls_vari-dependvars = space.

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

  gs_layout-stylefname = 'HANDLE_STYLE'.
**Calling the Method for ALV output for First Grid
  CALL METHOD g_grid->set_table_for_first_display
    EXPORTING
      it_toolbar_excluding = lt_exclude
      is_variant           = ls_vari
      is_layout            = gs_layout
      i_save               = 'A'
    CHANGING
      it_fieldcatalog      = it_fieldcat
      it_outtab            = itab[].


ENDFORM. "CREATE_AND_INIT_ALV
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM build_fieldcat .
  DATA: l_pos TYPE i.
  l_pos = l_pos + 1.

  x_fieldcat-scrtext_m = 'Delivery'(024).
  x_fieldcat-fieldname = 'VBELN'.
  x_fieldcat-tabname = 'ITAB'.
  x_fieldcat-col_pos = l_pos.
  x_fieldcat-no_zero = 'X'.
  x_fieldcat-edit = 'X'.
  x_fieldcat-outputlen = '10'.

  APPEND x_fieldcat TO it_fieldcat.
  CLEAR x_fieldcat.
  l_pos = l_pos + 1.

  x_fieldcat-scrtext_m = 'Item'(025).
  x_fieldcat-fieldname = 'POSNR'.
  x_fieldcat-tabname = 'ITAB'.
  x_fieldcat-col_pos = l_pos.
  x_fieldcat-outputlen = '5'.
  APPEND x_fieldcat TO it_fieldcat.
  CLEAR x_fieldcat.
  l_pos = l_pos + 1.
  x_fieldcat-scrtext_m = 'Del Date'(015).
  x_fieldcat-fieldname = 'LFDAT'.
  x_fieldcat-tabname = 'ITAB'.
  x_fieldcat-col_pos = l_pos.
  x_fieldcat-outputlen = '10'.
  APPEND x_fieldcat TO it_fieldcat.
  CLEAR x_fieldcat.
  l_pos = l_pos + 1.
ENDFORM. " build_fieldcat
*----------------------------------------------------------------------*
*  MODULE STATUS_0100 OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'MAIN100'.
  SET TITLEBAR 'MAIN100'.
  IF dock IS INITIAL.
**Initializing the grid
    PERFORM create_and_init_alv.
  ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*----------------------------------------------------------------------*
*  MODULE USER_COMMAND_0100 INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT