using basic events in oops alv

25
5/19/2018 UsingBasicEventsinOOPsALV-slidepdf.com http://slidepdf.com/reader/full/using-basic-events-in-oops-alv 1/25 Using basic events in OOPs ALV    Added by Tarun Gambhir, last edited by Tarun Gambhir on Jun 16, 2009 The 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 DECLARATION TYPES : 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 DECLARATION DATA : 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 DECLARATION DATA : v_repid TYPE sy-repid, v_okcode TYPE sy-ucomm. *CONSTANT DECLARATION CONSTANTS : c_check(1) TYPE c VALUE 'X'.

Upload: ajitmca

Post on 09-Oct-2015

133 views

Category:

Documents


2 download

DESCRIPTION

Events in SAP ABAP OOPS

TRANSCRIPT

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*