‎2008 Aug 06 12:57 PM
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...
‎2008 Aug 06 12:59 PM
‎2008 Aug 06 2:18 PM
For coloring ,this is ok. I want to make cell ready for input depending upon the condtion.
how can i do that??
‎2008 Aug 06 2:23 PM
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.
‎2008 Aug 06 2:25 PM
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
‎2008 Aug 06 1:00 PM
‎2008 Aug 06 2:42 PM
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