Using basic events in OOPs ALV Added byTarun Gambhir, last
edited byTarun Gambhiron Jun 16, 2009The below code illustrates the
use of basic events in OO ALV like:- handle toolbar of ALV handle
user command using the buttons in toolbar handle double click on
field
values*&---------------------------------------------------------------------**&
Report
ZALV_OOPS_DEMO*&*&---------------------------------------------------------------------**&
OOPs ALV Demo
Program*&*&---------------------------------------------------------------------*REPORT
zalv_oops_demo.TYPE-POOLS : cndp.CLASS :lcl_event_receiver
DEFINITION
DEFERRED.*&---------------------------------------------------------------------**
DECLARATIONS*&---------------------------------------------------------------------**TYPE
DECLARATIONTYPES : BEGIN OF t_material, matnr TYPE matnr, mtart
TYPE mtart, mbrsh TYPE mbrsh, matkl TYPE matkl, meins TYPE meins,
END OF t_material.TYPES : BEGIN OF t_mat_detail, matnr TYPE matnr,
werks TYPE werks_d, lgort TYPE lgort_d, END OF
t_mat_detail.*INTERNAL TABLE/WORK AREA DECLARATIONDATA :
it_material TYPE STANDARD TABLE OF t_material, wa_material TYPE
t_material.DATA : it_mat_detail TYPE STANDARD TABLE OF
t_mat_detail, wa_mat_detail TYPE t_mat_detail.*VARIABLE
DECLARATIONDATA : v_repid TYPE sy-repid, v_okcode TYPE
sy-ucomm.*CONSTANT DECLARATIONCONSTANTS : c_check(1) TYPE c VALUE
'X'.*NAME OF CUSTOM CONTAINER ADDED ON SCREENDATA : z_container
TYPE scrfname VALUE 'MAT_CONTAINER'.DATA : z_custom_container TYPE
REF TO cl_gui_custom_container.DATA : v_event_receiver TYPE REF TO
lcl_event_receiver.*ALV GRID CONTAINERDATA : z_grid TYPE REF TO
cl_gui_alv_grid.*FIELD CATALOGDATA : it_fieldcat TYPE lvc_t_fcat,
wa_fieldcat TYPE lvc_s_fcat.*LAYOUTDATA : wa_layout TYPE
lvc_s_layo.*&---------------------------------------------------------------------**
INITIALIZATION*&---------------------------------------------------------------------*INITIALIZATION.
v_repid =
sy-repid.*----------------------------------------------------------------------**
CLASS lcl_oo_alv
DEFINITION*----------------------------------------------------------------------***----------------------------------------------------------------------*CLASS
lcl_oo_alv DEFINITION. PUBLIC SECTION. METHODS populate_itab.
METHODS create_field_catalog. METHODS create_layout. METHODS
display_alv.ENDCLASS. "lcl_oo_alv
DEFINITION*----------------------------------------------------------------------**
CLASS lcl_oo_alv
IMPLEMENTATION*----------------------------------------------------------------------***----------------------------------------------------------------------*CLASS
lcl_oo_alv IMPLEMENTATION.*-->populate the internal table with
data METHOD populate_itab. SELECT matnr mtart mbrsh matkl meins
FROM mara INTO TABLE it_material. ENDMETHOD.
"populate_itab*-->create the field catalog to map the data
METHOD create_field_catalog. wa_fieldcat-fieldname = 'MATNR'.
wa_fieldcat-coltext = 'Material #'. wa_fieldcat-outputlen = '20'.
APPEND wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MTART'. wa_fieldcat-coltext = 'Material
Type'. wa_fieldcat-outputlen = '20'. APPEND wa_fieldcat TO
it_fieldcat. CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'MBRSH'.
wa_fieldcat-coltext = 'Industry'. wa_fieldcat-outputlen = '20'.
APPEND wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MATKL'. wa_fieldcat-coltext = 'Material
Group'. wa_fieldcat-outputlen = '20'. APPEND wa_fieldcat TO
it_fieldcat. CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'MEINS'.
wa_fieldcat-coltext = 'UOM'. wa_fieldcat-outputlen = '20'. APPEND
wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat. ENDMETHOD.
"create_field_catalog*-->set the layout for the ALV display
METHOD create_layout. wa_layout-grid_title = v_repid.
wa_layout-zebra = c_check. wa_layout-grid_title = 'OOPs ALV'.*
wa_layout-stylefname = 'CELL_STYLE'. ENDMETHOD.
"create_layout*-->display data in ALV Grid METHOD display_alv.
CALL METHOD z_grid->set_table_for_first_display EXPORTING
is_layout = wa_layout CHANGING it_outtab = it_material
it_fieldcatalog = it_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.
ENDMETHOD. "display_alvENDCLASS. "lcl_oo_alv
IMPLEMENTATION*---------------------------------------------------------------------**
CLASS LCL_EVENT_RECEIVER
DEFINITION*---------------------------------------------------------------------***---------------------------------------------------------------------*CLASS
lcl_event_receiver
DEFINITION.*---------------------------------------------------------------------**
**---------------------------------------------------------------------*
PUBLIC SECTION.*-->Method for User command METHODS :
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING
e_object e_interactive, handle_user_command FOR EVENT user_command
OF cl_gui_alv_grid IMPORTING e_ucomm, handle_double_click FOR EVENT
double_click OF cl_gui_alv_grid IMPORTING e_row e_column.ENDCLASS.
"lcl_event_receiver
DEFINITION*---------------------------------------------------------------------**
CLASS lcl_event_receiver
IMPLEMENTATION*---------------------------------------------------------------------**
**---------------------------------------------------------------------*CLASS
lcl_event_receiver IMPLEMENTATION. METHOD handle_toolbar. DATA:
ls_toolbar TYPE stb_button.* append a separator to normal toolbar
CLEAR ls_toolbar. MOVE 3 TO ls_toolbar-butn_type. APPEND ls_toolbar
TO e_object->mt_toolbar.* append an icon to show booking table
CLEAR ls_toolbar. MOVE 'DETAILS' TO ls_toolbar-function. MOVE
icon_employee TO ls_toolbar-icon. MOVE 'Show Details'(111) TO
ls_toolbar-quickinfo. MOVE 'Detail'(112) TO ls_toolbar-text. MOVE '
' TO ls_toolbar-disabled. APPEND ls_toolbar TO
e_object->mt_toolbar. ENDMETHOD. "handle_toolbar*-->Handle
user command METHOD handle_user_command. CASE e_ucomm. WHEN
'DETAILS'. DATA: lt_rows TYPE lvc_t_row, wa_rows LIKE LINE OF
lt_rows. REFRESH it_mat_detail. CLEAR : wa_mat_detail, wa_material.
CALL METHOD z_grid->get_selected_rows IMPORTING et_index_rows =
lt_rows. CALL METHOD cl_gui_cfw=>flush. READ TABLE lt_rows INTO
wa_rows INDEX 1 TRANSPORTING index. IF sy-subrc = 0. READ TABLE
it_material INTO wa_material INDEX wa_rows-index TRANSPORTING
matnr. IF sy-subrc = 0. SELECT matnr werks lgort FROM mard INTO
TABLE it_mat_detail WHERE matnr = wa_material-matnr. IF sy-subrc =
0. CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY' EXPORTING endpos_col =
30 endpos_row = 10 startpos_col = 1 startpos_row = 1 titletext =
'Material Details' TABLES valuetab = it_mat_detail EXCEPTIONS
break_off = 1 OTHERS = 2. IF sy-subrc = 1. MESSAGE 'Action
Cancelled..!!' TYPE 'S'. ELSE. MESSAGE ID sy-msgid TYPE sy-msgty
NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.
ENDIF. ENDIF. ENDIF. ENDCASE. ENDMETHOD. "handle_user_command
METHOD handle_double_click. READ TABLE it_material INTO wa_material
INDEX e_row-index TRANSPORTING matnr. SET PARAMETER ID 'MAT' FIELD
wa_material-matnr. CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDMETHOD. "handle_double_clickENDCLASS. "lcl_event_receiver
IMPLEMENTATION*&---------------------------------------------------------------------**
CLASS INSTANCE
VARIABLE*&---------------------------------------------------------------------*DATA
: obj1 TYPE REF TO
lcl_oo_alv.*&---------------------------------------------------------------------**
START OF
SELECTION*&---------------------------------------------------------------------*START-OF-SELECTION.*CREATE
OBJECT CREATE OBJECT : obj1, v_event_receiver.*-->call method to
populate the internal table CALL METHOD
obj1->populate_itab.*&---------------------------------------------------------------------**
CALL
SCREEN*&---------------------------------------------------------------------*
CALL SCREEN
1011.*&---------------------------------------------------------------------**&
Module STATUS_1011
OUTPUT*&---------------------------------------------------------------------**
text*----------------------------------------------------------------------*MODULE
status_1011 OUTPUT. SET PF-STATUS 'ZALV_STATUS'. SET TITLEBAR
'ZALV_OOPS'.ENDMODULE. " STATUS_1011
OUTPUT*&---------------------------------------------------------------------**&
Module CREATE_INSTANCE
OUTPUT*&---------------------------------------------------------------------**
text*----------------------------------------------------------------------*MODULE
create_instance OUTPUT.*CUSTOM CONTAINER INSTANCE CREATE OBJECT
z_custom_container EXPORTING container_name = z_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 ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.*ALV GRID INSTANCE
CREATE OBJECT z_grid EXPORTING i_parent = z_custom_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 ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. SET HANDLER
v_event_receiver->handle_toolbar FOR z_grid. SET HANDLER
v_event_receiver->handle_user_command FOR z_grid. SET HANDLER
v_event_receiver->handle_double_click FOR z_grid.ENDMODULE. "
CREATE_INSTANCE
OUTPUT*&---------------------------------------------------------------------**&
Module DISPLAY_DATA
OUTPUT*&---------------------------------------------------------------------**
text*----------------------------------------------------------------------*MODULE
display_data OUTPUT.*-->call method to create field catalog CALL
METHOD obj1->create_field_catalog.*-->call method to create
the layout CALL METHOD obj1->create_layout.*-->call method to
display data in ALV Grid CALL METHOD
obj1->display_alv.ENDMODULE. " DISPLAY_DATA
OUTPUT*&---------------------------------------------------------------------**&
Module USER_COMMAND_1011
INPUT*&---------------------------------------------------------------------**
text*----------------------------------------------------------------------*MODULE
user_command_1011 INPUT. v_okcode = sy-ucomm. CASE v_okcode. WHEN
'BACK'. LEAVE TO SCREEN 0. WHEN 'EXIT'. LEAVE PROGRAM.
ENDCASE.ENDMODULE. " USER_COMMAND_1011 INPUT
ALV Grid Report - with Object Oriented SALV Classes Added
byVinod Kumar, last edited byVinod Kumaron May 23, 2012(view
change)ALV Grid Report - with Object Oriented SALV
ClassesSummaryThis Post narrates the sample code for creating ALV
Grid Report with Object Oriented method. Basic Functionalities for
ALV Grid display is attained using different SALV
Classes.Author(s): Vinod Kumar T Company: NIIT Technologies
LimitedCreated on: 05.10.2010Author(s) BioVinod Kumar is an ABAP
consultant working with NIIT Technologies Limited.Classand Methods
used in the ReportClass NameParent ClassMethodDescription
CL_SALV_TABLEFACTORYTo Create the Instance of ALV Table
Object
CL_SALV_TABLECL_SALV_MODEL_LISTGET_LAYOUTLayout Object with
Current Settings
CL_SALV_TABLEGET_FUNCTIONSReturns Object to Define the functions
of the ALV Table
CL_SALV_TABLECL_SALV_MODEL_LISTGET_DISPLAY_SETTINGSReturns
Global Settings for ALV Display
CL_SALV_TABLEGET_AGGREGATIONSReturn Object to Edit Aggregation
Functions Settings
CL_SALV_TABLEGET_SORTSReturn Object to Set all Sort
Information
CL_SALV_TABLEGET_SELECTIONSReturn Object to do Settings for
Selection pattern for Row(s) and Column(s)
CL_SALV_TABLECL_SALV_MODEL_BASESET_TOP_OF_LISTSet the Contents
in Top of List in ALV Display
CL_SALV_TABLEGET_EVENTReturn the Object to manage existing
events
CL_SALV_TABLEGET_COLUMNSReturn individual column objects of
Output table
CL_SALV_LAYOUTSET_KEYSet Layout Key for Layouts in Report
CL_SALV_LAYOUTGET_LAYOUTSReturns all layouts defined for the
report
CL_SALV_LAYOUTF4_LAYOUTSF4 Help to Display Existing Layouts of
the Report
CL_SALV_LAYOUTSET_SAVE_RESTRICTIONRestriction Methods while
saving the Layout
CL_SALV_LAYOUTSET_DEFAULTActivate the Default Layout
CL_SALV_LAYOUTSET_INITIAL_LAYOUTSet specific Layout as Initial
layout while starting ALV Display
CL_SALV_FUNCTIONS_LISTCL_SALV_FUNCTIONSSET_ALLActivate all
Internal Functions of ALV
CL_SALV_DISPLAY_SETTINGSSET_STRIPPED_PATTERNSet ALV Display in
Stripped Pattern
CL_SALV_DISPLAY_SETTINGSSET_LIST_HEADERSet Title of the ALV
Display
CL_SALV_SORTSADD_SORTDefine Sort for a Specific Column
CL_SALV_SELECTIONSSET_SELECTION_MODESet the Selection
Methods
CL_SALV_AGGREGATIONSADD_AGGREGATIONAdd Aggregation function of a
Table column
CL_SALV_FORM_LAYOUT_GRIDCREATE_HEADER_INFORMATIONCreate Header
Information in the Cell
CL_SALV_FORM_LAYOUT_GRIDCL_SALV_FORM_UIE_LAYOUT_GRIDADD_ROWAdd
New row in the Grid
CL_SALV_FORM_LAYOUT_GRIDCREATE_LABELCreate Label in Grid
Cell
CL_SALV_FORM_LAYOUT_GRIDCREATE_TEXTCreate Text in Grid Cell
CL_SALV_FORM_LABELCL_SALV_FORM_UIE_TEXT_VIEWSET_TEXTAssign Text
to the Label in Grid Cell
CL_SALV_COLUMNS_TABLECL_SALV_COLUMNSGETGet the list of Columns
of output table
CL_SALV_COLUMNS_TABLECL_SALV_COLUMNSSET_OPTIMIZEOptimize the
width of columns
CL_SALV_COLUMNS_TABLECL_SALV_COLUMNSSET_KEY_FIXATIONFix the Key
columns while Vertical Scrolling
CL_SALV_COLUMNS_TABLECL_SALV_COLUMNS_LISTSET_COLOR_COLUMNAssign
colors to the columns in output table
CL_SALV_COLUMNS_TABLECL_SALV_COLUMNSGET_COLUMNGet Properties of
Single Column
CL_SALV_COLUMN_TABLECL_SALV_COLUMNGET_DDIC_DATATYPEGet data type
of Selected column
CL_SALV_COLUMN_TABLECL_SALV_COLUMNSET_TECHNICALSet column as
Technical (Invisible)
CL_SALV_COLUMN_TABLECL_SALV_COLUMNGET_DDIC_INITTYPEReturns
Internal ABAP Data Type
CL_SALV_COLUMN_TABLECL_SALV_COLUMNGET_DDIC_DOMAINGet the Domain
Name of Column
CL_SALV_COLUMN_TABLECL_SALV_COLUMN_LISTSET_CELL_TYPESet Cell
type of Column
CL_SALV_COLUMN_TABLECL_SALV_COLUMN_LISTSET_COLORSet the color of
Single Column
CL_SALV_COLUMN_TABLECL_SALV_COLUMN_LISTSET_KEYSet the column as
Key column
Sample
Code*&---------------------------------------------------------------------**&ReportZVK_CL_SALV*&---------------------------------------------------------------------**&ReportusingOOPswithBasicfunctionalities.*&---------------------------------------------------------------------*
REPORTzvk_cl_salv_1.TABLES:vbak.TYPE-POOLS:abap,rsanm.
TYPES:BEGINOFt_vbak.INCLUDETYPEvbak.TYPES:t_colorTYPElvc_t_scol,ENDOFt_vbak.
DATA:lt_vbakTYPESTANDARDTABLEOFt_vbak,ls_vbakTYPEt_vbak.
FIELD-SYMBOLS:TYPEt_vbak.
DATA:l_rec(5)TYPEn.
**DeclarationforALVGrid**DATA:gr_tableTYPEREFTOcl_salv_table.
**DeclarationsforALVFunctionsDATA:gr_functionsTYPEREFTOcl_salv_functions_list.
**declarationforALVColumnsDATA:gr_columnsTYPEREFTOcl_salv_columns_table,gr_columnTYPEREFTOcl_salv_column_table,lt_column_refTYPEsalv_t_column_ref,ls_column_refTYPEsalv_s_column_ref.
**declarationforLayoutSettingsDATA:gr_layoutTYPEREFTOcl_salv_layout,gr_layout_keyTYPEsalv_s_layout_key,ls_layoutTYPEsalv_s_layout,lt_layout_infoTYPEsalv_t_layout_info.
**DeclarationforGlobalDisplaySettingsDATA:gr_displayTYPEREFTOcl_salv_display_settings,lv_titleTYPElvc_title.
**DeclarationforAggregateFunctionSettingsDATA:gr_aggrTYPEREFTOcl_salv_aggregations.
**DeclarationforSortFunctionSettingsDATA:gr_sortTYPEREFTOcl_salv_sorts.
**DeclarationforTableSelectionsettingsDATA:gr_selectTYPEREFTOcl_salv_selections.
**DeclarationforTopofListsettingsDATA:gr_contentTYPEREFTOcl_salv_form_element.
**ClassforhandlingEventsCLASS:lcl_handle_eventsDEFINITIONDEFERRED.DATA:gr_eventsTYPEREFTOlcl_handle_events,lr_eventsTYPEREFTOcl_salv_events_table.
**ColoringofDatecolumns**DATA:lt_coloTYPESTANDARDTABLEOFlvc_s_colo,ls_coloTYPElvc_s_colo.
**ColorStructureofcolumns**DATA:lt_colorTYPElvc_t_scol,ls_colorTYPElvc_s_scol.*----------------------------------------------------------------------**CLASSlcl_handle_eventsDEFINITION*----------------------------------------------------------------------*CLASSlcl_handle_eventsDEFINITION.PUBLICSECTION.METHODS:on_double_clickFOREVENTdouble_clickOFcl_salv_events_tableIMPORTINGrowcolumn.METHODS:on_link_clickFOREVENTlink_clickOFcl_salv_events_tableIMPORTINGrowcolumn.ENDCLASS."lcl_handle_eventsDEFINITION*----------------------------------------------------------------------**CLASSlcl_handle_eventsIMPLEMENTATION*----------------------------------------------------------------------*CLASSlcl_handle_eventsIMPLEMENTATION.METHODon_double_click.PERFORMget_ord_infoUSINGrowcolumn.ENDMETHOD."on_double_clickMETHODon_link_click.PERFORMget_ord_infoUSINGrowcolumn.ENDMETHOD."on_link_clickENDCLASS."lcl_handle_eventsIMPLEMENTATIONSELECTION-SCREENBEGINOFBLOCKb1.SELECT-OPTIONS:p_erdatFORvbak-erdat.PARAMETER:p_varTYPEslis_vari.SELECTION-SCREENENDOFBLOCKb1.
ATSELECTION-SCREENONVALUE-REQUESTFORp_var.CLEAR:ls_layout.TRY.CALLMETHODcl_salv_table=>factoryEXPORTINGlist_display=if_salv_c_bool_sap=>falseIMPORTINGr_salv_table=gr_tableCHANGINGt_table=lt_vbak.CATCHcx_salv_msg.ENDTRY.
IFgr_tableISNOTINITIAL.MOVEsy-repidTOgr_layout_key-report."SetLayoutKeyasReportID"gr_layout=gr_table->get_layout()."GetLayoutoftheTable"gr_layout->set_key(gr_layout_key)."SetLayoutkeytoLayout"lt_layout_info=gr_layout->get_layouts()."GettheLayoutsofreport"IFlt_layout_info[]ISNOTINITIAL.ls_layout=gr_layout->f4_layouts()."ActivateF4HelpforLayouts"IFls_layoutISNOTINITIAL.MOVEls_layout-layoutTOp_var.ENDIF.ENDIF.ENDIF.
START-OF-SELECTION.REFRESH:lt_vbak.SELECT*FROMvbakINTOCORRESPONDINGFIELDSOFTABLElt_vbakWHEREerdatINp_erdat.
IFsy-subrcEQ0.DESCRIBETABLElt_vbakLINESl_rec.PERFORMset_color.PERFORMalv_grid_display.ENDIF.
*&---------------------------------------------------------------------**&Formalv_grid_display*&---------------------------------------------------------------------**text*----------------------------------------------------------------------*FORMalv_grid_display.CLEAR:gr_table.TRY.CALLMETHODcl_salv_table=>factoryEXPORTINGlist_display=if_salv_c_bool_sap=>falseIMPORTINGr_salv_table=gr_tableCHANGINGt_table=lt_vbak.CATCHcx_salv_msg.ENDTRY.IFgr_tableISINITIAL.MESSAGE'ErrorCreatingALVGrid'TYPE'I'DISPLAYLIKE'E'.STOP.ENDIF.**Getfunctionsdetailsgr_functions=gr_table->get_functions().
**ActivateAllButtonsinToolBargr_functions->set_all(if_salv_c_bool_sap=>true).
*******LayoutSettings*******CLEAR:gr_layout,gr_layout_key.MOVEsy-repidTOgr_layout_key-report."SetReportIDasLayoutKey"
gr_layout=gr_table->get_layout()."GetLayoutofTable"gr_layout->set_key(gr_layout_key)."SetReportIdtoLayout"gr_layout->set_save_restriction(if_salv_c_layout=>restrict_none)."NoRestrictiontoSaveLayout"IFp_varISINITIAL.gr_layout->set_default(if_salv_c_bool_sap=>true)."SetDefaultVariant"ELSE.gr_layout->set_initial_layout(p_var)."SettheSelectedVariantasInitial"ENDIF.
*******GlobalDisplaySettings*******CLEAR:gr_display.MOVE'SalesOrderDetails'TOlv_title.gr_display=gr_table->get_display_settings()."GlobalDisplaysettings"gr_display->set_striped_pattern(if_salv_c_bool_sap=>true)."ActivateStripPattern"gr_display->set_list_header(lv_title)."ReportHeader"
*******AggregateFunctionSettings*******gr_aggr=gr_table->get_aggregations()."GetAggregateFunctions"
*******SortFunctions*******gr_sort=gr_table->get_sorts().IFgr_sortISNOTINITIAL.TRY.gr_sort->add_sort(columnname='ERNAM'position=1sequence=if_salv_c_sort=>sort_upsubtotal=if_salv_c_bool_sap=>truegroup=if_salv_c_sort=>group_noneobligatory=if_salv_c_bool_sap=>false).CATCHcx_salv_not_found.CATCHcx_salv_existing.CATCHcx_salv_data_error.ENDTRY.
TRY.gr_sort->add_sort(columnname='ERDAT'position=2sequence=if_salv_c_sort=>sort_downsubtotal=if_salv_c_bool_sap=>falsegroup=if_salv_c_sort=>group_noneobligatory=if_salv_c_bool_sap=>false).CATCHcx_salv_not_found.CATCHcx_salv_existing.CATCHcx_salv_data_error.ENDTRY.ENDIF.*******TableSelectionSettings*******gr_select=gr_table->get_selections().IFgr_selectISNOTINITIAL.gr_select->set_selection_mode(if_salv_c_selection_mode=>row_column)."AllowsinglerowSelection"ENDIF.
*******TopofListsettings*******PERFORMtop_of_pageCHANGINGgr_content.gr_table->set_top_of_list(gr_content).
*******EventRegistersettings*******lr_events=gr_table->get_event().CREATEOBJECTgr_events.SETHANDLERgr_events->on_double_clickFORlr_events.SETHANDLERgr_events->on_link_clickFORlr_events.
**GetthecolumnsfromALVTablegr_columns=gr_table->get_columns().IFgr_columnsISNOTINITIAL.REFRESH:lt_column_ref.CLEAR:ls_column_ref.lt_column_ref=gr_columns->get().
**Getcolumnspropertiesgr_columns->set_optimize(if_salv_c_bool_sap=>true).gr_columns->set_key_fixation(if_salv_c_bool_sap=>true).TRY.gr_columns->set_color_column('T_COLOR').CATCHcx_salv_data_error.ENDTRY.**IndividualColumnProperties.PERFORMcolumn_settings.ENDIF.CALLMETHODgr_table->display.ENDFORM."alv_grid_display
*&---------------------------------------------------------------------**&Formcolumn_settings*&---------------------------------------------------------------------**text*----------------------------------------------------------------------*FORMcolumn_settings.LOOPATlt_column_refINTOls_column_ref.TRY.gr_column?=gr_columns->get_column(ls_column_ref-columnname).CATCHcx_salv_not_found.ENDTRY.IFgr_columnISNOTINITIAL.**MakeMandtcolumninvisible**IFgr_column->get_ddic_datatype()='CLNT'.gr_column->set_technical(if_salv_c_bool_sap=>true).ENDIF.**CreateAggregatefunctiontotalforAllNumeric/CurrencyFields**IFgr_column->get_ddic_inttype()EQ'P'ORgr_column->get_ddic_datatype()EQ'CURR'.IFgr_aggrISNOTINITIAL.TRY.gr_aggr->add_aggregation(columnname=ls_column_ref-columnnameaggregation=if_salv_c_aggregation=>total).CATCHcx_salv_data_error.CATCHcx_salv_not_found.CATCHcx_salv_existing.ENDTRY.ENDIF.ENDIF.**CreateCheckboxforfieldswithdomain"XFELD"IFgr_column->get_ddic_domain()EQ'XFELD'.gr_column->set_cell_type(if_salv_c_cell_type=>checkbox).ENDIF.
**SetcolortoDateColumns**IFgr_column->get_ddic_datatype()EQ'DATS'.CLEAR:ls_colo.MOVE2TOls_colo-col.MOVE1TOls_colo-int.MOVE1TOls_colo-inv.gr_column->set_color(ls_colo).ENDIF.
**AddHotspot&HyperLinktothecolumnvbelnIFls_column_ref-columnnameEQ'VBELN'.gr_column->set_cell_type(if_salv_c_cell_type=>hotspot).gr_column->set_key(if_salv_c_bool_sap=>true).ENDIF.
ENDIF.ENDLOOP.ENDFORM."column_settings
*&---------------------------------------------------------------------**&Formtop_of_page*&---------------------------------------------------------------------*FORMtop_of_pageCHANGINGlr_contentTYPEREFTOcl_salv_form_element.DATA:lr_gridTYPEREFTOcl_salv_form_layout_grid,lr_textTYPEREFTOcl_salv_form_text,lr_labelTYPEREFTOcl_salv_form_label,lr_headTYPEstring.
MOVE'SalesOrderList'TOlr_head.CREATEOBJECTlr_grid.**HeaderofTopofPage**lr_grid->create_header_information(row=1column=1text=lr_headtooltip=lr_head).**AddRow**lr_grid->add_row().
**AddLabelinGrid**lr_label=lr_grid->create_label(row=2column=1text='NoofRecords'tooltip='NoofRecords').
**AddTextinTheGrid**lr_text=lr_grid->create_text(row=2column=2text=l_rectooltip=l_rec).**SetLabelandTextLink**lr_label->set_label_for(lr_text).
**Movelr_gridtolr_content**lr_content=lr_grid.ENDFORM."top_of_page
*&---------------------------------------------------------------------**&Form*&---------------------------------------------------------------------*FORMget_ord_infoUSINGrowTYPEsalv_de_rowcolumnTYPEsalv_de_column.IFcolumnEQ'VBELN'.CLEAR:ls_vbak.READTABLElt_vbakINTOls_vbakINDEXrow.IFsy-subrcEQ0.SETPARAMETERID'AUN'FIELDls_vbak-vbeln.CALLTRANSACTION'VA03'ANDSKIPFIRSTSCREEN.ENDIF.ENDIF.ENDFORM."get_ord_info
*&---------------------------------------------------------------------**&Formset_color*&---------------------------------------------------------------------**SetcolortothecolumnVBELN&NETWRforOrderValue>1000*----------------------------------------------------------------------*FORMset_color.LOOPATlt_vbakASSIGNING.IF-netwrGT1000.REFRESH:lt_color.
CLEAR:ls_color.MOVE'VBELN'TOls_color-fname.MOVE3TOls_color-color-col.MOVE0TOls_color-color-int.MOVE0TOls_color-color-inv.APPENDls_colorTOlt_color.
CLEAR:ls_color.MOVE'NETWR'TOls_color-fname.MOVE3TOls_color-color-col.MOVE0TOls_color-color-int.MOVE0TOls_color-color-inv.APPENDls_colorTOlt_color.
MOVElt_colorTO-t_color.ENDIF.ENDLOOP.ENDFORM."set_color
exampleDATA:G_DOCKING_CONTAINER_1 TYPE REF TO
CL_GUI_DOCKING_CONTAINER, g_grid TYPE REF TO CL_GUI_ALV_GRID.
DATA:itab like sflight occurs 0 with header line, okcode like
sy-ucomm.
select * from sflight into table itab.
set screen 101.
MODULE STATUS_0101 OUTPUT. SET PF-STATUS 'MENU'. SET TITLEBAR
'TIT'. perform create_and_init_controls.ENDMODULE. " STATUS_0101
OUTPUT
FORM create_and_init_controls . CREATE OBJECT
G_DOCKING_CONTAINER_1 EXPORTING REPID = sy-repid DYNNR = '101' SIDE
= cl_gui_docking_container=>DOCK_AT_top EXTENSION = 100.
CREATE OBJECT G_GRID EXPORTING I_PARENT =
G_DOCKING_CONTAINER_1.
CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING
I_STRUCTURE_NAME = 'SFLIGHT' CHANGING IT_OUTTAB = itab[].ENDFORM. "
create_and_init_controls
MODULE user_command_0101 INPUT. CASE okcode. WHEN 'BACK'. SET
SCREEN 0. ENDCASE.ENDMODULE. " user_command_0101 INPUTflow logic of
screen 101:PROCESS BEFORE OUTPUT. MODULE STATUS_0101.
PROCESS AFTER INPUT. MODULE user_command_0101. Re: ALV grid
using oops concepts
Bharath SrinivasApr 16, 2008 7:27 AM(in response to kushagra
sharma)REPORT z_alv_using_oops_conepts MESSAGE-ID z_OOPS.TABLES:
ekko, ekpo.CLASS lcl_event_receiver DEFINITION DEFERRED.DATA:
ok_code TYPE sy-ucomm, gx_fcat1 TYPE lvc_s_fcat, gt_fcat1 TYPE
STANDARD TABLE OF lvc_s_fcat, gx_fcat2 TYPE lvc_s_fcat, gt_fcat2
TYPE STANDARD TABLE OF lvc_s_fcat, gx_layout1 TYPE lvc_s_layo,
gx_layout2 TYPE lvc_s_layo, gx_variant TYPE disvariant,
g_custom_container1 TYPE REF TO cl_gui_custom_container,
g_custom_container2 TYPE REF TO cl_gui_custom_container, grid1 TYPE
REF TO cl_gui_alv_grid, grid2 TYPE REF TO cl_gui_alv_grid,
g_container1 TYPE scrfname VALUE 'MAIN_REPORT_LIST', g_container2
TYPE scrfname VALUE 'SECOND_REPORT_LIST', gv_event_rec1 TYPE REF TO
lcl_event_receiver, gv_event_rec2 TYPE REF TO lcl_event_receiver,
gv_repid TYPE sy-repid, gt_final1 TYPE STANDARD TABLE OF ekko,
gt_final2 TYPE STANDARD TABLE OF ekpo, gt_final3 TYPE STANDARD
TABLE OF ekpo, gx_final TYPE ekko, gx_final1 TYPE
ekpo.INITIALIZATION.----
SELECTION-SCREEN *----
SELECTION-SCREEN BEGIN OF BLOCK blk3 WITH FRAME .SELECT-OPTIONS:
s_ebeln FOR ekko-ebeln obligatory, s_ebelp FOR ekpo-ebelp, s_bukrs
FOR ekko-bukrs, s_bsart FOR ekko-bsart.SELECTION-SCREEN END OF
BLOCK
blk3.****************************************************************
LOCAL CLASSES:
Definition*****************************************************************===============================================================
class lcl_event_receiver: local class to define and handle own
functions.* Definition: ~~~~~~~~~~~CLASS lcl_event_receiver
DEFINITION. PUBLIC SECTION. METHODS: hotspot_click1 FOR EVENT
hotspot_click OF cl_gui_alv_grid IMPORTING e_row_id e_column_id,
hotspot_click2 FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING
e_row_id e_column_id. PRIVATE SECTION.ENDCLASS. "lcl_event_receiver
DEFINITION----
CLASS lcl_event_receiver IMPLEMENTATION----
*----
CLASS lcl_event_receiver IMPLEMENTATION.*----
METHOD hotspot_click1. DATA: lv_tabix TYPE sy-tabix, lx_final
TYPE ekko. READ TABLE gt_final1 INTO gx_final INDEX e_row_id. IF
sy-subrc = 0. gt_final3 = gt_final2. DELETE gt_final3 WHERE ebeln
NE gx_final-ebeln. IF NOT g_custom_container2 IS INITIAL. CALL
METHOD grid2->refresh_table_display. CALL METHOD
grid1->refresh_table_display. ENDIF. ELSE. MESSAGE s000 WITH
text-003. LEAVE LIST-PROCESSING. ENDIF. ENDMETHOD. "hotspot_click1
METHOD hotspot_click2. READ TABLE gt_final3 INTO gx_final1 INDEX
e_row_id. IF sy-subrc = 0. SET PARAMETER ID 'BES' FIELD
gx_final-ebeln. CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDIF. ENDMETHOD. "button_click1ENDCLASS. "lcl_event_receiver
IMPLEMENTATION----
START-OF-SELECTION *----
START-OF-SELECTION. SELECT * FROM ekko INTO TABLE gt_final1
WHERE ebeln IN s_ebeln AND bukrs IN s_bukrs AND bsart IN s_bsart.
IF sy-subrc = 0. SELECT * FROM ekpo INTO TABLE gt_final2 FOR ALL
ENTRIES IN gt_final1 WHERE ebeln = gt_final1-ebeln AND ebelp IN
s_ebelp. IF sy-subrc = 0. gt_final3 = gt_final2. ENDIF. ENDIF.
PERFORM sub_get_fieldcat CHANGING gt_fcat1. PERFORM
sub_get_fieldcat CHANGING gt_fcat2.----
END-OF-SELECTION *----
END-OF-SELECTION. PERFORM display_process. CALL SCREEN
9000.----
MODULE pbo OUTPUT----
*----
MODULE pbo OUTPUT. SET PF-STATUS 'MAIN100'.
gx_layout1-grid_title = 'Purchase Order Header'. gx_layout1-zebra =
'X'. gx_layout1-info_fname = 'COLOR_LINE'. gx_layout1-sel_mode =
'X'. gx_layout2-grid_title = 'Purchase Order Items'.
gx_layout2-zebra = 'X'. gx_layout1-stylefname = 'CB'.
gs_layout1-excp_led = gc_check. gs_layout1-excp_group = gc_check.
gv_repid = sy-repid. gx_variant-report = gv_repid. READ TABLE
gt_final1 INTO gx_final INDEX 1. IF sy-subrc = 0. DELETE gt_final3
WHERE ebeln NE gx_final-ebeln. ENDIF. IF g_custom_container1 IS
INITIAL. CREATE OBJECT g_custom_container1 EXPORTING container_name
= g_container1. CREATE OBJECT grid1 EXPORTING i_parent =
g_custom_container1. CALL METHOD
grid1->set_table_for_first_display EXPORTING is_layout =
gx_layout1 is_variant = gx_variant i_save = 'U' i_default = 'X'
i_structure_name = 'EKKO' CHANGING it_outtab = gt_final1
it_fieldcatalog = gt_fcat1. CALL METHOD
cl_gui_control=>set_focus EXPORTING control = grid1. ENDIF. IF
g_custom_container2 IS INITIAL. CREATE OBJECT g_custom_container2
EXPORTING container_name = g_container2. CREATE OBJECT grid2
EXPORTING i_parent = g_custom_container2. CALL METHOD
grid2->set_table_for_first_display EXPORTING is_layout =
gx_layout2 is_variant = gx_variant i_save = 'U' i_default = 'X'
i_structure_name = 'EKPO' CHANGING it_outtab = gt_final3
it_fieldcatalog = gt_fcat2. CALL METHOD
cl_gui_control=>set_focus EXPORTING control = grid2. ENDIF.
CREATE OBJECT gv_event_rec1. SET HANDLER
gv_event_rec1->hotspot_click1 FOR grid1. CREATE OBJECT
gv_event_rec2. SET HANDLER gv_event_rec1->hotspot_click2 FOR
grid2. IF gt_final2 IS INITIAL. MESSAGE i000 WITH 'No Items exist
for the Purchase Order'. ENDIF.ENDMODULE. "PBO OUTPUT----
MODULE PAI INPUT *----
MODULE pai INPUT. To react on oi_custom_events: CALL METHOD
cl_gui_cfw=>dispatch. CASE ok_code. WHEN 'EXIT'. PERFORM
exit_program. LEAVE PROGRAM. WHEN 'BACK'. LEAVE TO SCREEN 0. WHEN
'CANCEL'. LEAVE TO SCREEN 0. ENDCASE. CLEAR ok_code.ENDMODULE. "PAI
INPUT----
FORM EXIT_PROGRAM *----
FORM exit_program. CALL METHOD grid1->free. CALL METHOD
grid2->free. CALL METHOD cl_gui_cfw=>flush. IF sy-subrc NE 0.
CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = gv_repid txt2 =
sy-subrc txt1 = 'Error in Flush'(009). ENDIF.ENDFORM.
"EXIT_PROGRAM&----
*& Form display_process&----
text----
--> p1 text GET_SELECTED_ROWS IMPORTING ET_INDEX_ROWS =
LT_ROWS* ET_ROW_NO = . IF SY-SUBRC NE 0. CALL FUNCTION
'POPUP_TO_INFORM' EXPORTING TITEL = 'Message' TXT1 = 'Please choose
a row' TXT2 = ''* TXT3 = ' '* TXT4 = ' ' .
ENDIF. endcase.endmethod.
method handle_toolbar.data : wtoolbar type stb_button.clear
wtoolbar.wtoolbar-butn_type = 3.append wtoolbar to
e_object->mt_toolbar.clear wtoolbar.wtoolbar-function =
'DETAIL'.wtoolbar-ICON = ICON_OVERVIEW.wtoolbar-QUICKINFO = 'Detail
list'.wtoolbar-TEXT = 'Detail list'.append wtoolbar to
e_object->mt_toolbar.endmethod.
ENDCLASS. "lcl_application_f4 IMPLEMENTATION
START-OF-SELECTION. PERFORM FILL_EKKO. PERFORM FILL_EKPO.
PERFORM FILL_MAKT. PERFORM BUILD_FINALTAB. PERFORM BUILD_FIELDCAT.
PERFORM BUILD_SORT. PERFORM BUILD_LAYOUT. CALL SCREEN
100.*&---------------------------------------------------------------------**&
Form
fill_ekko*&---------------------------------------------------------------------**
text*----------------------------------------------------------------------**
--> p1 text* p1 text* p1 text* set_borderEXPORTINGborder =
space.
CALL METHOD split->get_containerEXPORTINGrow = 1column =
1RECEIVINGcontainer = contaner1.
CALL METHOD split->set_row_heightEXPORTINGid = 1height =
1EXCEPTIONScntl_error = 1cntl_system_error = 2OTHERS = 3 .
CREATE OBJECT split1EXPORTINGparent = contaner1SASH_POSITION =
15with_border = 1EXCEPTIONScntl_error = 1cntl_system_error =
2others = 3.IF sy-subrc 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER
sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.
contaner3 = split1->top_left_container.contaner4 =
split1->bottom_right_container.
*contaner3 = container->SCREEN0. "DEFAULT_SCREEN."
PARENT.
CREATE OBJECT GRID EXPORTING* I_SHELLSTYLE = 0* I_LIFETIME =
I_PARENT = CONTANER4* I_APPL_EVENTS = space* I_PARENTDBG =*
I_APPLOGPARENT =* I_GRAPHICSPARENT =* I_NAME = EXCEPTIONS
ERROR_CNTL_CREATE = 1 ERROR_CNTL_INIT = 2 ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4 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.
CREATE OBJECT o_event_receiver.SET HANDLER
o_event_receiver->handle_top_of_page FOR GRID.set handler
o_event_receiver->handle_user_command for grid.set handler
o_event_receiver->handle_toolbar for grid.
CREATE OBJECT o_dd_doc EXPORTING style = 'ALV_GRID'no_margins =
'X'.
CALL METHOD GRID->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING*
I_BUFFER_ACTIVE =* I_BYPASSING_BUFFER =* I_CONSISTENCY_CHECK =*
I_STRUCTURE_NAME =* IS_VARIANT =* I_SAVE =* I_DEFAULT = 'X'
IS_LAYOUT = ILAYOUT* IS_PRINT =* IT_SPECIAL_GROUPS =*
IT_TOOLBAR_EXCLUDING =* IT_HYPERLINK =* IT_ALV_GRAPHICS =*
IT_EXCEPT_QINFO = CHANGING IT_OUTTAB = IFINAL[] IT_FIELDCATALOG =
IFIELDCAT* IT_SORT = ISORT* IT_FILTER = 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.
CALL METHOD GRID->SET_TOOLBAR_INTERACTIVE.
CALL METHOD GRID->list_processing_eventsEXPORTINGi_event_name
= 'TOP_OF_PAGE'i_dyndoc_id = o_dd_doc.
ENDMODULE. " PBO
OUTPUT*&---------------------------------------------------------------------**&
Module PAI
INPUT*&---------------------------------------------------------------------**
text*----------------------------------------------------------------------*MODULE
PAI INPUT.CASE OKCODE.WHEN 'BACK' OR 'EXIT'.LEAVE
PROGRAM.ENDCASE.ENDMODULE. " PAI
INPUT*&---------------------------------------------------------------------**&
Form
BUILD_LAYOUT*&---------------------------------------------------------------------**
text*----------------------------------------------------------------------**
--> p1 text*