Thursday 14 June 2012

OO ALV WITH CONTAINERS

1. OO ALV USING DOCKING CONTAINER

data : o_dock type ref to cl_gui_docking_container,
          o_alv 
type ref to cl_gui_alv_grid,
          it_spfli 
type table of spfli,
          wa_spfli 
type spfli,
          ok_code 
type sy-ucomm.

select-options  : p_carr for wa_spfli-carrid.

start-of-selection.
perform data_fetch.
call screen 100.

form DATA_FETCH .
select from spfli into table it_spfli where carrid in p_carr.
endform.                    
" DATA_FETCH

module STATUS_0100 output.
  
SET PF-STATUS 'STATUS'.
  
SET TITLEBAR 'TITLE'.
endmodule.                 
" STATUS_0100  OUTPUT

module USER_COMMAND_0100 input.
case ok_code.
  
when 'BACK' OR 'EXIT' OR 'CANCEL'.
    
LEAVE TO SCREEN 0.
  endcase.
endmodule.                 
" USER_COMMAND_0100  INPUT

module DISPLAY_ALV output.
if  o_dock is initial.


  * EITHER PROVIDE SIDE AND EXTENSION OR RATIO TO CREATE A DOCKING CONTAINER*


  
CREATE OBJECT  o_dock
    
EXPORTING
    side       = o_dock->dock_at_left " dock_at_right,dock_at_top,dock_at_bottom

    extension  = 2000.
 


 * CREATE OBJECT  o_dock
 *  
EXPORTING 

 *    ratio                       = 60.

 endif.

  if o_alv is  initial.
    
CREATE OBJECT o_alv
      
EXPORTING
        i_parent          = o_dock.


CALL METHOD o_alv->set_table_for_first_display
  
EXPORTING
    i_structure_name              = 
'SPFLI'
  
CHANGING
    it_outtab                     = it_spfli.

    endif.
endmodule.                 
" DISPLAY_ALV  OUTPUT


 SCREEN FLOW LOGIC



PROCESS BEFORE OUTPUT.
 
MODULE STATUS_0100.
 
MODULE DISPLAY_ALV.

PROCESS AFTER INPUT.
 
MODULE USER_COMMAND_0100.

----------------------------------------------------------------------------

2. OO ALV USING CUSTOM CONTAINER

DATA : o_cust TYPE REF TO cl_gui_custom_container,
          o_alv 
TYPE REF TO cl_gui_alv_grid,
          it_spfli 
TYPE TABLE OF spfli,
          wa_spfli 
TYPE spfli,
          ok_code 
TYPE sy-ucomm.

SELECT-OPTIONS  : p_carr FOR wa_spfli-carrid.

START-OF-SELECTION.
  
PERFORM data_fetch.
  
CALL SCREEN 100.


FORM data_fetch .
  
SELECT FROM spfli INTO TABLE it_spfli WHERE carrid IN p_carr.
ENDFORM.                    
" DATA_FETCH


MODULE status_0100 OUTPUT.
  
SET PF-STATUS 'STATUS'.
  
SET TITLEBAR 'TITLE'.

ENDMODULE.                 
" STATUS_0100  OUTPUT


MODULE user_command_0100 INPUT.
  
CASE ok_code.
    
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      
LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 
" USER_COMMAND_0100  INPUT


MODULE display_alv OUTPUT.

  
CREATE OBJECT o_cust
    
EXPORTING
      container_name              = 
'CUSTOM'.

    
CREATE OBJECT o_alv
      
EXPORTING
        i_parent          = O_CUST.

CALL METHOD o_alv->set_table_for_first_display
  
EXPORTING
    i_structure_name              = 
'SPFLI'
  
CHANGING
    it_outtab                     = IT_SPFLI.

ENDMODULE.                 
" DISPLAY_ALV  OUTPUT

 SCREEN FLOW LOGIC
PROCESS BEFORE OUTPUT.
 
MODULE STATUS_0100.
 
MODULE DISPLAY_ALV.

PROCESS AFTER INPUT.
 
MODULE USER_COMMAND_0100.



 

3. OO ALV USING CUSTOM CONTAINER WITH DOUBLE CLICK EVENT


TYPES BEGIN OF tab,
        carrid 
TYPE spfli-carrid,
        connid 
TYPE spfli-connid,
        countryfr 
TYPE spfli-countryfr,
        cityfrom 
TYPE spfli-cityfrom,
        airpfrom 
TYPE spfli-airpfrom,
        countryto 
TYPE spfli-countryto,
         cityto 
TYPE spfli-cityto,
         airpto 
TYPE spfli-airpto,
        
END OF tab.

DATA : it_spfli TYPE TABLE OF tab,
          wa_spfli 
TYPE tab,
          ok_code 
TYPE sy-ucomm,
          o_cust 
TYPE REF TO cl_gui_custom_container,
          o_alv 
TYPE REF TO cl_gui_alv_grid,
          it_fcat 
TYPE lvc_t_fcat,
          wa_fcat 
TYPE lvc_s_fcat .


DATA : IT_SFLIGHT TYPE TABLE OF SFLIGHT.
DATA : O_DOCK TYPE REF TO CL_GUI_DOCKING_CONTAINER,
          O_ALV1 
TYPE REF TO CL_GUI_ALV_GRID.

SELECT-OPTIONS : s_carr FOR wa_spfli-carrid.

CLASS HANDLE_EVENT DEFINITION.
 
PUBLIC SECTION.
  
CLASSMETHODS : HANDLE_DOUBLE_CLICK  
                 FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING e_row .
ENDCLASS.

  
CLASS HANDLE_EVENT IMPLEMENTATION.
    
METHOD handle_double_click.
     
READ TABLE IT_SPFLI INTO WA_SPFLI INDEX E_ROW.
 
SELECT FROM SFLIGHT INTO TABLE IT_SFLIGHT WHERE CARRID = WA_SPFLI-CARRID.
      
CALL SCREEN 200.
      ENDMETHOD.
    ENDCLASS.

START-OF-SELECTION.

PERFORM DATA_FETCH.
PERFORM BUILD_FIELDCATALOG.
CALL SCREEN 100.

form DATA_FETCH .
  
SELECT carrid
         connid
         countryfr
         cityfrom
         airpfrom
         countryto
          cityto
          airpto 
FROM spfli INTO TABLE it_spfli WHERE carrid IN s_carr.
endform.                    
" DATA_FETCH

form BUILD_FIELDCATALOG .
CLEAR wa_fcat.
WA_FCAT-col_pos = 
1.
WA_FCAT-fieldname = 
'CARRID'.
WA_FCAT-tabname = 
'IT_SPFLI'.
WA_FCAT-COLTEXT = 
'CARRID'.
APPEND wa_fcat TO IT_FCAT.
CLEAR wa_fcat.

WA_FCAT-col_pos = 
2.
WA_FCAT-fieldname = 
'CONNID'.
WA_FCAT-tabname = 
'IT_SPFLI'.
WA_FCAT-COLTEXT = 
'CONNID'.
APPEND wa_fcat TO IT_FCAT.
CLEAR wa_fcat.

WA_FCAT-col_pos = 
3.
WA_FCAT-fieldname = 
'COUNTRYFR'.
WA_FCAT-tabname = 
'IT_SPFLI'.
WA_FCAT-COLTEXT = 
'COUNTRY FROM'.
APPEND wa_fcat TO IT_FCAT.
CLEAR wa_fcat.

WA_FCAT-col_pos = 
4.
WA_FCAT-fieldname = 
'CITYFROM'.
WA_FCAT-tabname = 
'IT_SPFLI'.
WA_FCAT-COLTEXT = 
'COUNTRY TO'..
APPEND wa_fcat TO IT_FCAT.
CLEAR wa_fcat.

WA_FCAT-col_pos = 
5.
WA_FCAT-fieldname = 
'AIRPFROM'.
WA_FCAT-tabname = 
'IT_SPFLI'.
WA_FCAT-COLTEXT = 
'AIRPORT FROM'.
APPEND wa_fcat TO IT_FCAT.
CLEAR wa_fcat.

WA_FCAT-col_pos = 
6.
WA_FCAT-fieldname = 
'COUNTRYTO'.
WA_FCAT-tabname = 
'IT_SPFLI'.
WA_FCAT-COLTEXT = 
'COUNTRY TO'.
APPEND wa_fcat TO IT_FCAT.
CLEAR wa_fcat.


WA_FCAT-col_pos = 
7.
WA_FCAT-fieldname = 
'CITYTO'.
WA_FCAT-tabname = 
'IT_SPFLI'.
WA_FCAT-COLTEXT = 
'CITY TO'.
APPEND wa_fcat TO IT_FCAT.
CLEAR wa_fcat.

WA_FCAT-col_pos = 
8.
WA_FCAT-fieldname = 
'AIRPTO'.
WA_FCAT-tabname = 
'IT_SPFLI'.
WA_FCAT-COLTEXT = 
'AIRPORT TO'.
APPEND wa_fcat TO IT_FCAT.
CLEAR wa_fcat.
endform.                    
" BUILD_FIELDCATALOG

module STATUS_0100 output.
  
SET PF-STATUS 'STAT'.
  
SET TITLEBAR 'TITLT'.

endmodule.                 
" STATUS_0100  OUTPUT

module DISPLAY_ALV output.

IF o_cust IS NOT BOUND.
  
CREATE OBJECT o_cust
    
EXPORTING
      container_name              = 
'CONTAINER'.
  ENDIF.

  
IF O_ALV IS NOT BOUND.
    
CREATE OBJECT o_alv
      
EXPORTING
        i_parent          = O_CUST.

 
SET HANDLER HANDLE_EVENT=>HANDLE_DOUBLE_CLICK FOR O_ALV.

        
CALL METHOD o_alv->set_table_for_first_display
          
CHANGING
            it_outtab                     = IT_SPFLI
            it_fieldcatalog               = IT_FCAT.

    ENDIF.
endmodule.                 
" DISPLAY_ALV  OUTPUT

module USER_COMMAND_0100 input.
CASE  OK_CODE.
  
WHEN 'BACK'.
  
LEAVE TO SCREEN 0.
ENDCASE.
endmodule.                 
" USER_COMMAND_0100  INPUT

module STATUS_0200 output.
  
SET PF-STATUS 'STSA'.
*  SET TITLEBAR 'xxx'.
IF O_DOCK IS NOT BOUND.
CREATE OBJECT o_dock
  
EXPORTING
    side              = CL_GUI_DOCKING_CONTAINER=>dock_at_left
    extension         = 
5000.
ENDIF.


IF O_ALV1 IS NOT BOUND.
CREATE OBJECT o_alv1
  
EXPORTING
    i_parent          = O_DOCK.

CALL METHOD o_alv1->set_table_for_first_display
  
EXPORTING
    i_structure_name              = 
'SFLIGHT'
  
CHANGING
    it_outtab                     = IT_SFLIGHT.

ENDIF.
 
CALL METHOD o_alv1->refresh_table_display.

endmodule.                 
" STATUS_0200  OUTPUT

module USER_COMMAND_0200 input.
CASE OK_CODE.
  
WHEN  'BACK'.
    
LEAVE TO SCREEN 0.
ENDCASE.
endmodule.                 
" USER_COMMAND_0200  INPUT

  SCREEN 100 FLOW LOGIC

PROCESS BEFORE OUTPUT.
 
MODULE STATUS_0100.
MODULE 
DISPLAY_ALV.
PROCESS AFTER INPUT.

 
MODULE USER_COMMAND_0100.
































SCREEN 200 FLOW LOGIC

PROCESS BEFORE OUTPUT.
 
MODULE STATUS_0200.
PROCESS AFTER INPUT.
 
MODULE USER_COMMAND_0200.

4. SPLITTING CUSTOM CONTAINER BY SPLITTER CONTAINER AND DISPLAYING INTERACTIVE ALV

DATA : it_spfli TYPE TABLE OF spfli,
       wa_spfli 
TYPE spfli,
       it_sflight 
TYPE TABLE OF sflight,
       wa_sflight 
TYPE sflight,
       o_cust 
TYPE REF TO cl_gui_custom_container,
       o_spli 
TYPE REF TO cl_gui_splitter_container,
       o_ref1 
TYPE REF TO cl_gui_container,
       o_ref2 
TYPE REF TO cl_gui_container,
       o_alv1 
TYPE REF TO cl_gui_alv_grid,
       o_alv2 
TYPE REF TO cl_gui_alv_grid,
       ok_code 
TYPE sy-ucomm.

CLASS handle_event DEFINITION.
  
PUBLIC SECTION.
    
CLASS-METHODS handle_double_click
                  
FOR EVENT double_click OF cl_gui_alv_grid 

                  IMPORTING e_row.
ENDCLASS.                    
"HANDLE_EVENT DEFINITION

CLASS handle_event IMPLEMENTATION.
  
METHOD handle_double_click.
    
READ TABLE it_spfli INTO wa_spfli INDEX e_row.SELECT FROM sflight INTO TABLE it_sflight WHERE carrid = wa_spfli-carrid.
    
IF o_alv2 IS NOT BOUND.
      
CREATE OBJECT o_alv2
        
EXPORTING
          i_parent = o_ref2.

      
CALL METHOD o_alv2->set_table_for_first_display
        
EXPORTING
          i_structure_name = 
'SFLIGHT'
        
CHANGING
          it_outtab        = it_sflight.
    ENDIF.

  
CALL METHOD o_alv2->refresh_table_display.
  ENDMETHOD.                    
"HANDLE_DOUBLE_CLICK
ENDCLASS.                    
"HANDLE_EVENT IMPLEMENTATION

START-OF-SELECTION.
  
PERFORM fetch_data_from_spfli.
  
CALL SCREEN 100.

*----------------------------------------------------------------------*
FORM fetch_data_from_spfli .
  
SELECT FROM spfli INTO TABLE it_spfli.
ENDFORM.                    
" FETCH_DATA_FROM_SPFLI

MODULE status_0100 OUTPUT.
  
SET PF-STATUS 'STATUS'.
  
SET TITLEBAR 'TITLE'.

ENDMODULE.                 
" STATUS_0100  OUTPUT

MODULE split_container OUTPUT.
  
IF o_cust IS NOT BOUND.
    
CREATE OBJECT o_cust
      
EXPORTING
        container_name = 
'CONTAINER'.

    
CREATE OBJECT o_spli
      
EXPORTING
        parent  = o_cust
        
rows    2
        columns = 
1.
    
CALL METHOD o_spli->get_container
      
EXPORTING
        row       = 
1
        column    = 
1
      RECEIVING
        container = o_ref1.

    
CALL METHOD o_spli->get_container
      
EXPORTING
        row       = 
2
        column    = 
1
      RECEIVING
        container = o_ref2.

  ENDIF.
ENDMODULE.                 
" SPLIT_CONTAINER  OUTPUT

MODULE display_alv OUTPUT.
  
IF o_alv1 IS NOT BOUND.
    
CREATE OBJECT o_alv1
      
EXPORTING
        i_parent = o_ref1.
    
SET HANDLER handle_event=>handle_double_click FOR o_alv1.
    
CALL METHOD o_alv1->set_table_for_first_display
      
EXPORTING
        i_structure_name = 
'SPFLI'
      
CHANGING
        it_outtab        = it_spfli.
  ENDIF.
ENDMODULE.                 
" DISPLAY_ALV  OUTPUT

MODULE user_command_0100 INPUT.
  
CASE  ok_code.
    
WHEN 'BACK'.
      
LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 
" USER_COMMAND_0100  INPUT

  SCREEN 100 FLOW LOGIC
PROCESS BEFORE OUTPUT.
  
MODULE status_0100.
  
MODULE split_container.
  
MODULE display_alv.

PROCESS AFTER INPUT.
  
MODULE user_command_0100.





















5. OO ALV WITH TOP_OF_PAGE EVENT TO DISPLAY HEADER

DATA : it_spfli TYPE TABLE OF spfli,
          wa_spfli 
TYPE spfli,
          o_cust 
TYPE REF TO cl_gui_custom_container,
          o_spli 
TYPE REF TO cl_gui_splitter_container,
          o_ref1 
TYPE REF TO cl_gui_container,
          o_ref2 
TYPE REF TO cl_gui_container,
          o_alv 
TYPE REF TO cl_gui_alv_grid,
          o_docu 
TYPE REF TO cl_dd_document,
          ok_code 
TYPE sy-ucomm.

*----------------------------------------------------------------------*
CLASS handle_event DEFINITION.
  
PUBLIC SECTION.

    
CLASSMETHODS : page_head FOR EVENT  

                   top_of_page OF cl_gui_alv_grid  
                   IMPORTING e_dyndoc_id table_index.
                                                                                  
ENDCLASS.                    
"HANDLE_EVENT DEFINITION

*----------------------------------------------------------------------*
CLASS handle_event IMPLEMENTATION.

  
METHOD page_head.

*----------------try this one---------------------------------*

    DATA text TYPE sdydo_text_element.
    
text 'FLIGHT DETAILS'.
    
CALL METHOD o_docu->add_text
      
EXPORTING
        
text         text
        sap_color    = cl_dd_document=>list_positive
        sap_fontsize = cl_dd_document=>large.

    
CALL METHOD o_docu->add_picture
      
EXPORTING
        picture_id = 
'HEADER'. " Object uploaded by OAER Transaction
    
CALL METHOD o_docu->display_document
      
EXPORTING
        parent = o_ref1.


*----------------------or try this --------------------------------*

    DATA text TYPE sdydo_text_element .
    
DATA date TYPE char10.
    
WRITE sy-datum TO date USING EDIT MASK '__/__/____'.  CONCATENATE 'FLIGHT DETAILS ON ' date INTO text SEPARATED BY space.
    
CALL METHOD o_docu->add_text
      
EXPORTING
        
text         text
        sap_style    
cl_dd_document=>heading
        sap_color    
cl_dd_document=>list_heading_int
        sap_fontsize 
cl_dd_document=>large.
    
CALL METHOD o_docu->new_line.
    
CLEAR text.
    
CONCATENATE 'BY USER :' sy-uname INTO text SEPARATED BY space.
    
CALL METHOD o_docu->add_text
      
EXPORTING
        
text         text
        sap_style    
cl_dd_document=>heading
        sap_color    
cl_dd_document=>list_heading_int
        sap_fontsize 
cl_dd_document=>large.
 
  CALL METHOD o_docu->set_document_background
    
EXPORTING
      picture_id 
'HEADER1'. " Object uploaded by OAER Transaction
  
CALL METHOD o_docu->display_document
    
EXPORTING
      reuse_control 
'X'
      parent        
o_ref1.


  ENDMETHOD.                    "PAGE_HEAD
ENDCLASS.                    
"HANDLE_EVENT IMPLEMENTATION

START-OF-SELECTION.
  
PERFORM fetch_data_from_spfli.
  
CALL SCREEN 100.
*&---------------------------------------------------------------------*
FORM fetch_data_from_spfli .
  
SELECT FROM spfli INTO TABLE it_spfli.
ENDFORM.                    
" FETCH_DATA_FROM_SPFLI
*&---------------------------------------------------------------------*

MODULE status_0100 OUTPUT.
  
SET PF-STATUS 'STATUS'.
  
SET TITLEBAR 'TITLE'.
ENDMODULE.                 
" STATUS_0100  OUTPUT

*----------------------------------------------------------------------*
MODULE split_container OUTPUT.
  
IF o_cust IS NOT BOUND.
    
CREATE OBJECT o_cust
      
EXPORTING
        container_name = 
'CONTAINER'.
    
CREATE OBJECT o_spli
      
EXPORTING
        parent  = o_cust
        
rows    2
        columns = 
1.
    
CALL METHOD o_spli->get_container
      
EXPORTING
        row       = 
1
        column    = 
1
      RECEIVING
        container = o_ref1.
    
CALL METHOD o_spli->set_row_height
      
EXPORTING
        
id     1
        height = 
35.
    
CALL METHOD o_spli->get_container
      
EXPORTING
        row       = 
2
        column    = 
1
      RECEIVING
        container = o_ref2.

    
CREATE OBJECT o_docu
      
EXPORTING
        style = 
'ALV_GRID'.
  ENDIF.
ENDMODULE.                 
" SPLIT_CONTAINER  OUTPUT
*----------------------------------------------------------------------*
MODULE display_alv OUTPUT.
  
IF o_alv IS NOT BOUND.
    
CREATE OBJECT o_alv
      
EXPORTING
        i_parent = o_ref2.

    
SET HANDLER handle_event=>page_head FOR o_alv.

    
CALL METHOD o_alv->set_table_for_first_display
      
EXPORTING
        i_structure_name = 
'SPFLI'
      
CHANGING
        it_outtab        = it_spfli.

    
CALL METHOD o_alv->list_processing_events
      
EXPORTING
        i_event_name = 
'TOP_OF_PAGE'
        i_dyndoc_id  = o_docu.
  ENDIF.
ENDMODULE.                 
" DISPLAY_ALV  OUTPUT
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  
CASE  ok_code.
    
WHEN 'BACK'.
      
LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 
" USER_COMMAND_0100  INPUT
  SCREEN 100 FLOW LOGIC

PROCESS BEFORE OUTPUT.
  
MODULE status_0100.
  
MODULE split_container.
  
MODULE display_alv.

PROCESS AFTER INPUT.
  
MODULE user_command_0100.



6. OO ALV WITH SUBTOTAL AND TOTAL TEXT

TYPES BEGIN OF tab,
        carrid TYPE sflight-carrid,
        connid TYPE sflight-connid,
        fldate TYPE sflight-fldate,
        price TYPE sflight-price,
        text1(20), " FOR TOTAL TEXT
        text2(20), " FOR SUBTOTAL TEXT
        END OF tab.

DATA : it_flight TYPE TABLE OF tab,
       wa_flight TYPE tab,
       it_fcat  TYPE lvc_t_fcat,
       wa_fcat TYPE lvc_s_fcat,
       wa_layo TYPE lvc_s_layo,
       it_sort TYPE lvc_t_sort,
       wa_sort TYPE lvc_s_sort,
       o_cust TYPE REF TO cl_gui_custom_container,
       o_alv TYPE REF TO cl_gui_alv_grid,
       ok_code TYPE sy-ucomm.

START-OF-SELECTION.
  PERFORM fetch_data.
  PERFORM build_text.
  PERFORM build_fieldcat.
  PERFORM build_layout.
  PERFORM build_sort.

END-OF-SELECTION.
  CALL SCREEN 100.
*----------------------------------------------------------------------*
FORM fetch_data .
  SELECT carrid
         connid
         fldate      price FROM sflight INTO CORRESPONDING FIELDS OF TABLE it_flight.
  SORT it_flight BY carrid ASCENDING.
ENDFORM.                    " FETCH_DATA

*----------------------------------------------------------------------*
FORM build_text .
  DATA : carr TYPE sflight-carrid,
         txt TYPE char20.
  LOOP AT it_flight INTO wa_flight.
    wa_flight-text1 = 'Total Price = '.
    IF wa_flight-carrid NE carr.
      carr = wa_flight-carrid.
CONCATENATE 'Subtotal (' carr ') =' INTO txt SEPARATED BY space.
    ENDIF.
    wa_flight-text2 = txt.
    MODIFY it_flight FROM wa_flight.
  ENDLOOP.
ENDFORM.                    " BUILD_TEXT

*----------------------------------------------------------------------*
FORM build_fieldcat .
  wa_fcat-col_pos  = 1.
  wa_fcat-fieldname = 'TEXT1'.
  wa_fcat-tech = 'X'.
  wa_fcat-no_out = 'X'.
  APPEND wa_fcat TO it_fcat.
  CLEAR wa_fcat.

  wa_fcat-col_pos  = 2.
  wa_fcat-fieldname = 'TEXT2'.
  wa_fcat-tech = 'X'.
  wa_fcat-no_out = 'X'.
  APPEND wa_fcat TO it_fcat.
  CLEAR wa_fcat.

  wa_fcat-col_pos  = 3.
  wa_fcat-fieldname = 'CARRID'.
  wa_fcat-tabname = 'IT_FLIGHT'.
  wa_fcat-scrtext_m = 'CARRID'.
  APPEND wa_fcat TO it_fcat.
  CLEAR wa_fcat.

  wa_fcat-col_pos  = 4.
  wa_fcat-fieldname = 'CONNID'.
  wa_fcat-tabname = 'IT_FLIGHT'.
  wa_fcat-scrtext_m = 'CONNID'.
  APPEND wa_fcat TO it_fcat.
  CLEAR wa_fcat.

  wa_fcat-col_pos  = 5.
  wa_fcat-fieldname = 'FLDATE'.
  wa_fcat-tabname = 'IT_FLIGHT'.
  wa_fcat-scrtext_m = 'FLIGHT DATE'.
  APPEND wa_fcat TO it_fcat.
  CLEAR wa_fcat.

  wa_fcat-col_pos  = 6.
  wa_fcat-fieldname = 'PRICE'.
  wa_fcat-tabname = 'IT_FLIGHT'.
  wa_fcat-scrtext_m = 'PRICE'.
  wa_fcat-do_sum = 'X'.
  APPEND wa_fcat TO it_fcat.
  CLEAR wa_fcat.

ENDFORM.                    " BUILD_FIELDCAT
*------------------------------------------------------------*
FORM build_layout .
  wa_layo-cwidth_opt = 'X'.
  wa_layo-zebra = 'X'.
  wa_layo-no_totline = 'X'.
ENDFORM.                    " BUILD_LAYOUT
*-------------------------------------------------------------*
FORM build_sort .
  wa_sort-spos = 1.
  wa_sort-fieldname = 'TEXT1'.
  wa_sort-up = 'X'.
  wa_sort-subtot = 'X'.
  APPEND wa_sort TO it_sort.
  CLEAR wa_sort.

  wa_sort-spos = 2.
  wa_sort-fieldname = 'TEXT2'.
  wa_sort-up = 'X'.
  wa_sort-subtot = 'X'.
  APPEND wa_sort TO it_sort.
  CLEAR wa_sort.
ENDFORM.                    " BUILD_SORT
*-------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS'.
ENDMODULE.                 " STATUS_0100  OUTPUT
*------------------------------------------------------------*
MODULE display_alv_grid OUTPUT.
  IF o_cust IS NOT BOUND.
    CREATE OBJECT o_cust
      EXPORTING 

 container_name = 'CONT'."CREATE A CUSTOM CONT WITH NAME 'CONT'
  ENDIF.
  IF o_alv IS  NOT BOUND.
    CREATE OBJECT o_alv
      EXPORTING
        i_parent = o_cust.
  ENDIF.
  CALL METHOD o_alv->set_table_for_first_display
    EXPORTING
      is_layout       = wa_layo
    CHANGING
      it_outtab       = it_flight
      it_fieldcatalog = it_fcat
      it_sort         = it_sort.

ENDMODULE.                 " DISPLAY_ALV_GRID  OUTPUT
*-----------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE  ok_code.
    WHEN 'BACK'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*------------------------------------------------------------*
  SCREEN 100 FLOW LOGIC
PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  MODULE display_alv_grid.

PROCESS AFTER INPUT.
  MODULE user_command_0100. 

*---------------------------------------------------------------*
6. OO ALV WITH HIDING TOOLBAR
DATA : it_spfli         TYPE TABLE OF spfli,
           wa_spfli         TYPE spfli,
           ok_code          TYPE sy-ucomm,
           o_cust           TYPE REF TO cl_gui_custom_container,
           o_alv            TYPE REF TO cl_gui_alv_grid,
           lt_exclude       TYPE ui_functions,
           ls_exclude       TYPE ui_func,
           ls_layo          TYPE lvc_s_layo.

START-OF-SELECTION.
  PERFORM data_fetch.
  PERFORM build_layout.
  PERFORM fill_fcode.

END-OF-SELECTION.
  CALL SCREEN 100.
*--------------------------------------------------------------*
FORM data_fetch .
  SELECT FROM spfli INTO TABLE it_spfli .
  SORT it_spfli BY carrid connid.
ENDFORM.                    " DATA_FETCH
*-------------------------------------------------------------*
FORM build_layout .
*ls_layo-no_toolbar = 'X'. " To hide all toolbar buttons
ENDFORM.
*-------------------------------------------------------------*
FORM fill_fcode .
  ls_exclude = cl_gui_alv_grid=>mc_fc_subtot.
  APPEND ls_exclude TO lt_exclude.
  CLEAR ls_exclude.

  ls_exclude = cl_gui_alv_grid=>mc_fc_sort_asc.
  APPEND ls_exclude TO lt_exclude.
  CLEAR ls_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_sort_dsc.
  APPEND ls_exclude TO lt_exclude.
  CLEAR ls_exclude.

  ls_exclude = cl_gui_alv_grid=>mc_fc_filter.
  APPEND ls_exclude TO lt_exclude.
  CLEAR ls_exclude.

  ls_exclude = cl_gui_alv_grid=>mc_fc_detail.
  APPEND ls_exclude TO lt_exclude.
  CLEAR ls_exclude.

ENDFORM.                    " FILL_FCODE
*-------------------------------------------------------------*
MODULE display_alv OUTPUT.
  IF o_cust IS NOT BOUND.
    CREATE OBJECT o_cust
      EXPORTING
        container_name = 'CONT'.
  ENDIF.
  IF o_alv IS NOT BOUND.
    CREATE OBJECT o_alv
      EXPORTING
        i_parent = o_cust.
  ENDIF.
  CALL METHOD o_alv->set_table_for_first_display
    EXPORTING
      i_structure_name     = 'SPFLI'
      it_toolbar_excluding = lt_exclude
      is_layout            = ls_layo
    CHANGING
      it_outtab            = it_spfli.

ENDMODULE.                 " DISPLAY_ALV  OUTPUT
                 " BUILD_LAYOUT
SCREEN 100 FLOW LOGIC 
PROCESS BEFORE OUTPUT.
*  MODULE status_0100.
  MODULE display_alv.

PROCESS AFTER INPUT.

*  MODULE user_command_0100. 
*---------------------------------------------------------------*  
OUTPUT  BEFORE & AFTER HIDING TOOLBAR BUTTONS








*--------------------------------------------------------------* 
6. OO ALV WITH EDIT & SAVE FUNCTIONALITY & ADDING BUTTON IN ALV TOOLBAR
TYPE-POOLS : icon.
TYPES BEGIN OF tab,
         carrid         TYPE spfli-carrid,
         connid         TYPE spfli-connid,
         countryfr      TYPE spfli-countryfr,
         cityfrom       TYPE spfli-cityfrom,
         airpfrom       TYPE spfli-airpfrom,
         countryto      TYPE spfli-countryto,
         cityto         TYPE spfli-cityto,
         airpto         TYPE spfli-airpto,
         END OF tab.
DATA  : it_spfli         TYPE TABLE OF tab,
        it_spfli_old     TYPE TABLE OF tab,
        it_spfli_new     TYPE TABLE OF spfli,
        wa_spfli_new     TYPE spfli,
        wa_spfli         TYPE tab,
        ok_code          TYPE sy-ucomm,
        o_cust           TYPE REF TO cl_gui_custom_container,
        o_alv            TYPE REF TO cl_gui_alv_grid,
        it_fcat          TYPE lvc_t_fcat,
        is_fcat          TYPE lvc_s_fcat,
        is_layo          TYPE lvc_s_layo,
        check.
*----------------------------------------------------------*
*       CLASS HANDLE_EVENT DEFINITION
*-------------------------------------------------------------*
*
*-------------------------------------------------------------*
CLASS  handle_event DEFINITION.
   PUBLIC SECTION.
    CLASS-METHODS : handle_toolbar
                    FOR EVENT toolbar OF cl_gui_alv_grid
                    IMPORTING e_object
                              e_interactive.
    CLASS-METHODS : handle_user_command
                    FOR EVENT user_command OF cl_gui_alv_grid
                    IMPORTING e_ucomm.
ENDCLASS.                    "HANDLE_EVENT DEFINITION
*-------------------------------------------------------------*
CLASS  handle_event IMPLEMENTATION.
  METHOD handle_toolbar.
*    *ADDING A SAVE BUTTONN TO THE ALV TOOLBAR *
    DATA : is_btn TYPE stb_button.
    is_btn-function = 'SAVE'.
    is_btn-icon = icon_system_save.
    is_btn-text = 'SAVE'.
    is_btn-quickinfo = 'SAVE'.
    is_btn-disabled = ' '.
    APPEND is_btn TO e_object->mt_toolbar.
  ENDMETHOD.                    "handle_toolbar
  METHOD handle_user_command .
    CASE e_ucomm.
      WHEN 'SAVE'. " WILL TRIGGER WHEN CLICK ON ALV TOOLBAR 'SAVE' BUTTON
        PERFORM update_data_base.
    ENDCASE.
  ENDMETHOD.                    "handle_user_command
ENDCLASS.                    "HANDLE_EVENT IMPLEMENTATION
START-OF-SELECTION.
  PERFORM data_fetch.
  PERFORM buld_fieldcat.
  PERFORM buld_layout.
END-OF-SELECTION.
  CALL SCREEN 100.
*-------------------------------------------------------------*
FORM  data_fetch .
  SELECT carrid
         connid
         countryfr
         cityfrom
         airpfrom
         countryto
         cityto
         airpto FROM spfli INTO TABLE it_spfli .
  SORT it_spfli BY carrid connid.
  it_spfli_old = it_spfli.
ENDFORM.                    " DATA_FETCH
*--------------------------------------------------------------*
MODULE  display_alv OUTPUT.
  IF o_cust IS NOT BOUND.
    CREATE OBJECT o_cust
      EXPORTING
        container_name = 'CONT'.
  ENDIF.
  IF o_alv IS NOT BOUND.
    CREATE OBJECT o_alv
      EXPORTING
        i_parent = o_cust.
    SET HANDLER  handle_event=>handle_toolbar FOR o_alv.
    SET HANDLER  handle_event=>handle_user_command FOR o_alv.
    CALL METHOD o_alv->set_table_for_first_display
      EXPORTING
        is_layout       = is_layo
      CHANGING
        it_outtab       = it_spfli
        it_fieldcatalog = it_fcat.
    CALL METHOD o_alv->set_toolbar_interactive .
  ENDIF.
  CALL METHOD o_alv->refresh_table_display.
ENDMODULE.                 " DISPLAY_ALV  OUTPUT
*------------------------------------------------------------*
FORM  buld_fieldcat .
  is_fcat-col_pos = .
  is_fcat-fieldname = 'CARRID'.
  is_fcat-tabname = 'IT_SPFLI'.
  is_fcat-scrtext_l = 'Carrer No.'.
  is_fcat-key = 'X'.
  APPEND  is_fcat TO it_fcat.
  CLEAR is_fcat.
  is_fcat-col_pos = .
  is_fcat-fieldname = 'CONNID'.
  is_fcat-tabname = 'IT_SPFLI'.
  is_fcat-scrtext_l = 'Conn No.'.
  is_fcat-key = 'X'.
  APPEND  is_fcat TO it_fcat.
  CLEAR is_fcat.
  is_fcat-col_pos = .
  is_fcat-fieldname = 'COUNTRYFR'.
  is_fcat-tabname = 'IT_SPFLI'.
  is_fcat-scrtext_l = 'Country From'.
  APPEND  is_fcat TO it_fcat.
  CLEAR is_fcat.
  is_fcat-col_pos = .
  is_fcat-fieldname = 'CITYFROM'.
  is_fcat-tabname = 'IT_SPFLI'.
  is_fcat-scrtext_l = 'City From'.
  is_fcat-edit = 'X'" MAKES ONLY THIS FIELD AS EDITABLE
  APPEND  is_fcat TO it_fcat.
  CLEAR is_fcat.
  is_fcat-col_pos = .
  is_fcat-fieldname = 'AIRP FROM'.
  is_fcat-tabname = 'IT_SPFLI'.
  is_fcat-scrtext_l = 'Airp From'.
  APPEND  is_fcat TO it_fcat.
  CLEAR is_fcat.
  is_fcat-col_pos = 6.
  is_fcat-fieldname = 'COUNTRYTO'.
  is_fcat-tabname = 'IT_SPFLI'.
  is_fcat-scrtext_l = 'Country To'.
  APPEND  is_fcat TO it_fcat.
  CLEAR is_fcat.
  is_fcat-col_pos = .
  is_fcat-fieldname = 'CITYTO'.
  is_fcat-tabname = 'IT_SPFLI'.
  is_fcat-scrtext_l = 'City To'.
  is_fcat-edit = 'X'" MAKES ONLY THIS FIELD AS EDITABLE
  APPEND  is_fcat TO it_fcat.
  CLEAR is_fcat.
  is_fcat-col_pos = .
  is_fcat-fieldname = 'AIRPTO'.
  is_fcat-tabname = 'IT_SPFLI'.
  is_fcat-scrtext_l = 'Airport To'.
  APPEND  is_fcat TO it_fcat.
  CLEAR is_fcat.
ENDFORM.                     " BULD_FIELDCAT
*--------------------------------------------------------------*
FORM  buld_layout .
  is_layo-col_opt = 'X'.
*  is_layo-edit = 'X'. " ALL FIELDS ARE EDITABLE
ENDFORM.                    " BULD_LAYOUT
*--------------------------------------------------------------*
MODULE  status_0100 OUTPUT.
  SET PF-STATUS 'STATUS'.
ENDMODULE.                 " STATUS_0100  OUTPUT
*-----------------------------------------------------------*
MODULE  user_command_0100 INPUT.
  CASE  ok_code.
    WHEN 'SAVE'. " WILL TRIGGER WHEN CLICK ON STANDARD TOOLBAR SAVE BUTTON
   PERFORM UPDATE_DATA_BASE.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*-------------------------------------------------------------*
form  UPDATE_DATA_BASE .
      CALL METHOD o_alv->check_changed_data
        IMPORTING
          e_valid = check.
      IF it_spfli NE it_spfli_old.
        LOOP AT it_spfli INTO wa_spfli.
          MOVE-CORRESPONDING wa_spfli TO wa_spfli_new.
          APPEND wa_spfli_new TO it_spfli_new.
        ENDLOOP.
        MODIFY spfli FROM TABLE it_spfli_new.
        IF  sy-subrc = 0..
          MESSAGE 'DATABASE TABLE SPFLI UPDATED' TYPE 'S'.
        ENDIF.
      ENDIF.
endform.                    " UPDATE_DATA_BASE

7.WORK WITH TEXT EDITOR IN CUSTOM CONTAINER
  TYPE-POOLS : abap.
  DATA : o_text TYPE REF TO cl_gui_textedit,
             o_cust TYPE REF TO cl_gui_custom_container,
             ok_code TYPE sy-ucomm,
             mode TYPE VALUE cl_gui_textedit=>false,
             it_text TYPE TABLE OF char65,
              wa_text TYPE char65.

START-OF-SELECTION.

  wa_text = '*---------------------Write Your Comment --------*'.
  APPEND wa_text TO it_text.
  CALL SCREEN 100.
*-----------------------------------------------------------*
MODULE create_comment_box OUTPUT.
  IF o_cust IS NOT BOUND.
    CREATE OBJECT o_cust
      EXPORTING
        container_name = 'CONT'.
  ENDIF.
  IF o_text IS NOT BOUND.
    CREATE OBJECT o_text
      EXPORTING
        parent = o_cust.

    CALL METHOD o_text->set_toolbar_mode

      EXPORTING
        toolbar_mode = 0.

    CALL METHOD o_text->set_statusbar_mode

      EXPORTING
        statusbar_mode = 0.
  ENDIF.

  CALL METHOD o_text->set_text_as_stream

    EXPORTING
      text = it_text.

ENDMODULE.                 " CREATE_COMMENT_BOX  OUTPUT

*--------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
    WHEN 'SAVE'.
      CALL METHOD o_text->get_text_as_stream
        EXPORTING
          only_when_modified = cl_gui_textedit=>true
        IMPORTING
          text               = it_text.

    WHEN 'TOGG'.

      IF mode = cl_gui_textedit=>true ).
        mode = cl_gui_textedit=>false.
      ELSE.
        mode = cl_gui_textedit=>true.
      ENDIF.
      CALL METHOD o_text->set_readonly_mode
        EXPORTING
          readonly_mode = mode.

  ENDCASE.

ENDMODULE.                 " USER_COMMAND_0100  INPUT
*------------------------------------------------------------*
   
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS'. " SET (SAVE, BACK,EXIT,CANCEL) IN PF-STATUS
ENDMODULE.                 " STATUS_0100  OUTPUT
            SCREEN 100 FLOW LOGIC
PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  MODULE create_comment_box.

PROCESS AFTER INPUT.

  MODULE user_command_0100.  


*-----------------------------------------------------------* 
8. OO ALV USING DOCKING CONTAINER & COLORING ROWS BASED ON CONDITION
*coloring particular rows in alv on condition*
TYPE-POOLS : col.
TYPES BEGIN OF tab,
        carrid     TYPE sflight-carrid,
        connid     TYPE sflight-connid,
        fldate     TYPE sflight-fldate,
        price      TYPE sflight-price,
        seatsmax   TYPE sflight-seatsmax,
        seatsocc   TYPE sflight-seatsocc,
        color(4),
        END OF   tab.

DATA : it_flight   TYPE TABLE OF tab,
           wa_flight   TYPE tab,
           ok_code     TYPE syst-ucomm,
           o_alv       TYPE REF TO cl_gui_alv_grid,
           o_dock      TYPE REF TO cl_gui_docking_container,
           is_layo     TYPE lvc_s_layo,
           it_fcat     TYPE lvc_t_fcat,
           is_fcat     TYPE lvc_s_fcat.

START-OF-SELECTION.
  PERFORM data_fetch.
  PERFORM build_fieldcatalog.
  PERFORM build_layout.

END-OF-SELECTION.
  CALL SCREEN 100.
*-------------------------------------------------------------*
FORM data_fetch .
  SELECT carrid
         connid
         fldate
         price
         seatsmax  seatsocc FROM sflight INTO CORRESPONDING FIELDS OF TABLE it_flight.

  CONCATENATE 'C' col_group '10' INTO wa_flight-color.
MODIFY it_flight FROM wa_flight TRANSPORTING color WHERE price > 5000.
ENDFORM.                    " DATA_FETCH

*------------------------------------------------------------*
FORM build_fieldcatalog .
  is_fcat-col_pos = 1.
  is_fcat-fieldname = 'CARRID'.
  is_fcat-tabname = 'IT_FLIGHT'.
  is_fcat-key = 'X'.
  APPEND is_fcat TO it_fcat.
  CLEAR is_fcat.

  is_fcat-col_pos = 1.
  is_fcat-fieldname = 'CONNID'.
  is_fcat-tabname = 'IT_FLIGHT'.
  is_fcat-key = 'X'.
  APPEND is_fcat TO it_fcat.
  CLEAR is_fcat.

  is_fcat-col_pos = 3.
  is_fcat-fieldname = 'FLDATE'.
  is_fcat-tabname = 'IT_FLIGHT'.
  is_fcat-key = 'X'.
  APPEND is_fcat TO it_fcat.
  CLEAR is_fcat.

  is_fcat-col_pos = 4.
  is_fcat-fieldname = 'PRICE'.
  is_fcat-tabname = 'IT_FLIGHT'.
  APPEND is_fcat TO it_fcat.
  CLEAR is_fcat.

  is_fcat-col_pos = 5.
  is_fcat-fieldname = 'SEATSMAX'.
  is_fcat-tabname = 'IT_FLIGHT'.
  APPEND is_fcat TO it_fcat.
  CLEAR is_fcat.

  is_fcat-col_pos = 6.
  is_fcat-fieldname = 'SEATSOCC'.
  is_fcat-tabname = 'IT_FLIGHT'.
  APPEND is_fcat TO it_fcat.
  CLEAR is_fcat.


ENDFORM.                    " BUILD_FIELDCATALOG

*-----------------------------------------------------------*
FORM build_layout .
  is_layo-info_fname = 'COLOR'.
ENDFORM.                    " BUILD_LAYOUT
*------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS'.
*  SET TITLEBAR 'xxx'.

ENDMODULE.                 " STATUS_0100  OUTPUT

*----------------------------------------------------------*
MODULE display_alv OUTPUT.
  IF o_dock IS NOT BOUND.
    CREATE OBJECT o_dock
      EXPORTING
        side      = cl_gui_docking_container=>dock_at_left
        extension = 500.
  ENDIF.

  if o_alv is not bound.
    CREATE OBJECT o_alv
      EXPORTING
        i_parent          = o_dock.
    CALL METHOD o_alv->set_table_for_first_display
      EXPORTING
        is_layout                     = is_layo
      CHANGING
        it_outtab                     = it_flight
        it_fieldcatalog               = it_fcat.
    endif.
ENDMODULE.                 " DISPLAY_ALV  OUTPUT
*-----------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE  ok_code.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*-------------------------------------------------------------*
SCREEN 100 FLOW LOGIC
  PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  MODULE display_alv.

PROCESS AFTER INPUT.
  MODULE user_command_0100.
*-------------------------------------------------------------*
9. OO ALV USING DIALOGBOX CONTAINER
TYPES BEGIN OF tab1,
        carrid     TYPE sflight-carrid,
        connid     TYPE sflight-connid,
        fldate     TYPE sflight-fldate,
        price      TYPE sflight-price,
        seatsmax   TYPE sflight-seatsmax,
        seatsocc   TYPE sflight-seatsocc,
        END OF tab1.
DATA : it_spfli    TYPE TABLE OF spfli,
           wa_spfli    LIKE LINE OF it_spfli,
           it_flight   TYPE TABLE OF tab1,
           wa_flight   LIKE LINE OF it_flight,
          ok_code     TYPE ui_func,
          o_alv1      TYPE REF TO cl_gui_alv_grid,
          o_alv2      TYPE REF TO cl_gui_alv_grid,
          o_dock      TYPE REF TO cl_gui_docking_container,
          o_dial      TYPE REF TO cl_gui_dialogbox_container,
          it_fcat     TYPE lvc_t_fcat,
          is_fcat     TYPE lvc_s_fcat,

          alv_ok_code    TYPE sy-ucomm VALUE 'INCLUDE'.

*-----------------------------------------------------------*
CLASS handle DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS : handle_double_click
                    FOR EVENT double_click OF cl_gui_alv_grid
                    IMPORTING e_row.
    CLASS-METHODS : handle_close
                    FOR EVENT close OF cl_gui_dialogbox_container
                    IMPORTING sender. "triggers when user clicks                              " the close button on the dialog box
    CLASS-METHODS : on_toolbar
                    FOR EVENT toolbar OF cl_gui_alv_grid
                    IMPORTING e_object.
    CLASSMETHODS : on_user_command
                   FOR EVENT user_command OF cl_gui_alv_grid
                   IMPORTING e_ucomm.  
ENDCLASS.                    "handle DEFINITION
*----------------------------------------------------------*
CLASS handle IMPLEMENTATION.
  METHOD handle_double_click.
    READ TABLE it_spfli INTO wa_spfli INDEX e_row-index.
    IF sy-subrc = 0.
      SELECT carrid
             connid
             fldate
             price
             seatsmax
             seatsocc FROM sflight INTO TABLE it_flight WHERE carrid = wa_spfli-carrid.
    ENDIF.
    PERFORM build_fieldcat.
    CREATE OBJECT o_dial
      EXPORTING
        width   = 800
        height  = 200
        top     = 120
        left    120
        caption = 'Flight Details'.
    SET HANDLER handle=>handle_close FOR o_dial.
    CREATE OBJECT o_alv2
      EXPORTING
        i_parent = o_dial.
    CALL METHOD o_alv2->set_table_for_first_display
      CHANGING
        it_outtab       = it_flight
        it_fieldcatalog = it_fcat.

    CALL METHOD o_alv2->refresh_table_display.

    REFRESH it_fcat.
  ENDMETHOD.                    "handle_double_click

  METHOD handle_close.

    CALL METHOD sender->set_visible
      EXPORTING
        visible = space.
  ENDMETHOD.                    "handle_close

  METHOD on_toolbar.

    DATA btn TYPE stb_button.
    CASE alv_ok_code.
      WHEN 'INCLUDE'.
        btn-function = 'EXCLUDE'.
        btn-icon = icon_pdir_foreward_switch.
      WHEN 'EXCLUDE'.
        CLEAR e_object->mt_toolbar.
        btn-function = 'INCLUDE'.
        btn-icon = icon_pdir_back_switch.
    ENDCASE.
    INSERT btn INTO TABLE e_object->mt_toolbar.
  ENDMETHOD.                    "on_toolbar

  METHOD on_user_command.

    CASE e_ucomm.
      WHEN 'INCLUDE' OR 'EXCLUDE'.
        alv_ok_code = e_ucomm.
        CALL METHOD o_alv1->set_toolbar_interactive.
    ENDCASE.
  ENDMETHOD.                    "on_user_command
 

ENDCLASS.                    "handle IMPLEMENTATION

START-OF-SELECTION.

  PERFORM data_fetch.

END-OF-SELECTION.

  CALL SCREEN 100.

*-----------------------------------------------------------*

FORM data_fetch .
  SELECT FROM spfli INTO TABLE it_spfli UP TO 20 ROWS.
ENDFORM.                    " DATA_FETCH
*&----------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&-----------------------------------------------------------*
*       text
*--------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS'.
*  SET TITLEBAR 'xxx'.
ENDMODULE.                 " STATUS_0100  OUTPUT
*-----------------------------------------------------------*
MODULE display_alv OUTPUT.
  IF o_dock IS NOT BOUND.
    CREATE OBJECT o_dock
      EXPORTING
        side      = cl_gui_docking_container=>dock_at_left
        extension = 5000.
  ENDIF.
  IF o_alv1 IS NOT BOUND.
    CREATE OBJECT o_alv1
      EXPORTING
        i_parent = o_dock.
    SET HANDLER handle=>handle_double_click FOR o_alv1.
     SET HANDLER handle=>on_toolbar FOR o_alv1.
     SET HANDLER handle=>on_user_command FOR o_alv1. 
    CALL METHOD o_alv1->set_table_for_first_display
      EXPORTING
        i_structure_name = 'SPFLI'
      CHANGING
        it_outtab        = it_spfli.

  ENDIF.

ENDMODULE.                 " DISPLAY_ALV  OUTPUT
*-----------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE  ok_code.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT

*------------------------------------------------------------*

FORM build_fieldcat .
  is_fcat-col_pos = 1.
  is_fcat-fieldname = 'CARRID'.
  is_fcat-tabname = 'IT_FLIGHT'.
  is_fcat-scrtext_l = 'CARRID'.
  is_fcat-key = 'X'.
  APPEND is_fcat TO it_fcat.
  CLEAR is_fcat.

  is_fcat-col_pos = 1.

  is_fcat-fieldname = 'CONNID'.
  is_fcat-tabname = 'IT_FLIGHT'.
  is_fcat-key = 'X'.
  is_fcat-scrtext_l = 'CONNID'.
  APPEND is_fcat TO it_fcat.
  CLEAR is_fcat.

  is_fcat-col_pos = 3.

  is_fcat-fieldname = 'FLDATE'.
  is_fcat-tabname = 'IT_FLIGHT'.
  is_fcat-key = 'X'.
  is_fcat-scrtext_l = 'FLDATE'.
  APPEND is_fcat TO it_fcat.
  CLEAR is_fcat.

  is_fcat-col_pos = 4.

  is_fcat-fieldname = 'PRICE'.
  is_fcat-tabname = 'IT_FLIGHT'.
  is_fcat-scrtext_l = 'PRICE'.
  APPEND is_fcat TO it_fcat.
  CLEAR is_fcat.

  is_fcat-col_pos = 5.

  is_fcat-fieldname = 'SEATSMAX'.
  is_fcat-tabname = 'IT_FLIGHT'.
  is_fcat-scrtext_l = 'MAX SEAT'.
  APPEND is_fcat TO it_fcat.
  CLEAR is_fcat.

  is_fcat-col_pos = 6.

  is_fcat-fieldname = 'SEATSOCC'.
  is_fcat-tabname = 'IT_FLIGHT'.
  is_fcat-scrtext_l = 'OCCUPIED SEAT'.
  APPEND is_fcat TO it_fcat.
  CLEAR is_fcat.
ENDFORM.                    " BUILD_FIELDCAT
*------------------------------------------------------------*
SCREEN 100 FLOW LOGIC
PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  MODULE display_alv.

PROCESS AFTER INPUT.
  MODULE user_command_0100.
*----------------------------------------------------------*
10. OO TREE ALV USING CL_SIMPLE_TREE_MODEL

DATA : it_scarr TYPE TABLE OF scarr,
           wa_scarr TYPE scarr,
           it_spfli TYPE TABLE OF spfli,
          wa_spfli TYPE spfli,
          it_flight TYPE TABLE OF sflight,
          wa_flight TYPE sflight,
          ok_code TYPE sy-ucomm,
          o_tree TYPE REF TO cl_simple_tree_model,
          o_dock TYPE REF TO cl_gui_docking_container.

START-OF-SELECTION.

  PERFORM data_fetch.

END-OF-SELECTION.

  CALL SCREEN 100.
*-----------------------------------------------------------*
FORM data_fetch .
  SELECT FROM scarr INTO TABLE it_scarr.
  IF it_scarr  IS NOT INITIAL.
    SELECT FROM spfli INTO TABLE  it_spfli
     FOR ALL ENTRIES IN it_scarr WHERE carrid = it_scarr-carrid.
  IF it_spfli IS NOT INITIAL.
  SELECT FROM sflight INTO TABLE  it_flight
   FOR ALL ENTRIES IN it_spfli WHERE carrid = it_spfli-carrid
                                                 
                                 AND connid = it_spfli-connid.
    ENDIF.
  ENDIF.
ENDFORM.                    " DATA_FETCH
*------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS'.
*  SET TITLEBAR 'xxx'.
ENDMODULE.                 " STATUS_0100  OUTPUT
*-------------------------------------------------------------*
MODULE process_container OUTPUT.
  IF o_dock IS NOT BOUND.
    CREATE OBJECT o_dock
      EXPORTING
        ratio = 30.
  ENDIF.
ENDMODULE.                 " PROCESS_CONTAINER  OUTPUT
*------------------------------------------------------------*
MODULE process_tree OUTPUT.
 IF o_tree IS NOT BOUND.
 CREATE OBJECT o_tree
  EXPORTING     node_selection_mode = cl_simple_tree_model=>node_sel_mode_single.
CALL METHOD o_tree->create_tree_control
 EXPORTING
   parent = o_dock.
    PERFORM add_nodes USING o_tree.
  ENDIF.
ENDMODULE.                 " PROCESS_TREE  OUTPUT
*&-------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&-------------------------------------------------------------*
*       text
*-----------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*------------------------------------------------------------*
FORM add_nodes  USING obj_tree TYPE REF TO cl_simple_tree_model.
  DATA : wa_node TYPE treemsnodt.
  DATA : date_text TYPE char10.
  CALL METHOD obj_tree->add_node
    EXPORTING
      node_key = 'ROOT'
      isfolder = 'X'
      text     'FLIGHT DETAILS'
      expander = 'X'.
  LOOP AT it_scarr INTO wa_scarr.
    wa_node-node_key = wa_scarr-carrid.
    wa_node-text = wa_scarr-carrname.

    CALL METHOD obj_tree->add_node

      EXPORTING
        node_key          = wa_node-node_key
        relative_node_key = 'ROOT'
   relationship = cl_simple_tree_model=>relat_last_child
        isfolder          = 'X'
        text              = wa_node-text
        expander          = 'X'.
  ENDLOOP.

  LOOP AT it_spfli INTO wa_spfli.

    CONCATENATE wa_spfli-carrid
                 wa_spfli-connid
                 INTO wa_node-node_key SEPARATED BY space.
    wa_node-relatkey = wa_spfli-carrid.
    CONCATENATE wa_spfli-carrid
                wa_spfli-connid ':'
                wa_spfli-cityfrom '->'
                wa_spfli-cityto INTO wa_node-text SEPARATED BY space.
    CALL METHOD obj_tree->add_node
      EXPORTING
        node_key          = wa_node-node_key
        relative_node_key = wa_node-relatkey
    relationship = cl_simple_tree_model=>relat_last_child
        isfolder          = 'X'
        text              = wa_node-text
        expander          = 'X'.
  ENDLOOP.

  LOOP AT it_flight INTO wa_flight.

    CONCATENATE wa_flight-carrid
                wa_flight-connid
                wa_flight-fldate INTO wa_node-node_key 
                SEPARATED BY space.
    CONCATENATE wa_flight-carrid
                 wa_flight-connid INTO wa_node-relatkey  

                 SEPARATED BY space.
    WRITE wa_flight-fldate TO date_text.
    wa_node-text = date_text.
    CALL METHOD obj_tree->add_node
      EXPORTING
        node_key          = wa_node-node_key
        relative_node_key = wa_node-relatkey
    relationship = cl_simple_tree_model=>relat_last_child
        isfolder          = space
        text              = wa_node-text
        expander          = space.
  ENDLOOP.
ENDFORM.                    " ADD_NODES
*------------------------------------------------------------*
SCREEN 100 FLOW LOGIC


  PROCESS BEFORE OUTPUT.
   MODULE status_0100.
   MODULE process_container.
   MODULE process_tree.

  PROCESS AFTER INPUT.

   MODULE user_command_0100.

*-----------------------------------------------------------*
OUTPUT
 *-------------------------------------------------------------*
11. OO COLUMNTREE ALV USING CL_COLUMN_TREE_MODEL



TYPE-POOLS : icon.
DATA : it_scarr TYPE SORTED TABLE OF scarr
                WITH UNIQUE KEY carrid,
       wa_scarr LIKE LINE OF it_scarr,
       it_spfli TYPE SORTED TABLE OF spfli
                 WITH UNIQUE KEY carrid connid,
                                                                   wa_spfli LIKE LINE OF it_spfli,
       it_flight TYPE SORTED TABLE OF sflight
                 WITH UNIQUE KEY carrid connid fldate,
                                                                                                                      
       wa_flight LIKE LINE OF it_flight,
       ok_code TYPE sy-ucomm,
       o_dock TYPE REF TO cl_gui_docking_container,
       o_col_tree TYPE REF TO cl_column_tree_model,
       wa_header TYPE treemhhdr.

START-OF-SELECTION.

  PERFORM data_fetch.

END-OF-SELECTION.

  CALL SCREEN 100.
*----------------------------------------------------------------------*
FORM data_fetch .
  SELECT FROM scarr INTO TABLE it_scarr.
  IF it_scarr  IS NOT INITIAL.
    SELECT FROM spfli INTO TABLE  it_spfli
    FOR ALL ENTRIES IN it_scarr WHERE carrid = it_scarr-carrid.
    IF it_spfli IS NOT INITIAL.
    SELECT FROM sflight INTO TABLE  it_flight
    FOR ALL ENTRIES IN it_spfli WHERE carrid = it_spfli-carrid
                                  AND connid = it_spfli-connid.
    ENDIF.
  ENDIF.
ENDFORM.                    " DATA_FETCH
*-------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS'.
*  SET TITLEBAR 'xxx'.

ENDMODULE.                 " STATUS_0100  OUTPUT

*-----------------------------------------------------------*
MODULE container_processing OUTPUT.
  IF o_dock IS NOT BOUND.
    CREATE OBJECT o_dock
      EXPORTING
        ratio = 80.
  ENDIF.
ENDMODULE.                 " CONTAINER_PROCESSING  OUTPUT
*---------------------------------------------------------*
MODULE columntree_processing OUTPUT.
  wa_header-heading = 'Flight Details'.
  wa_header-t_image = icon_ws_plane .
  wa_header-tooltip = 'PLANE'.
  wa_header-width = 65.
  CREATE OBJECT o_col_tree
  EXPORTING
 node_selection_mod = cl_column_tree_model=>node_sel_mode_single
 hierarchy_column_name = 'MAIN'
hierarchy_header      = wa_header.

  CALL METHOD o_col_tree->create_tree_control

    EXPORTING
      parent = o_dock.
  PERFORM add_columns USING o_col_tree.
  PERFORM add_nodes USING o_col_tree.
ENDMODULE.                 " COLUMNTREE_PROCESSING  OUTPUT
*-----------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*-----------------------------------------------------------*
FORM add_columns USING col_tree TYPE REF TO cl_column_tree_model.
  CALL METHOD col_tree->add_column
    EXPORTING
      name        = 'PRICE'
      width       = 40
      header_text = 'Ticket Price'.
  CALL METHOD col_tree->add_column
    EXPORTING
      name        = 'CURRENCY'
      width       = 20
      header_text = 'Currency In:'.
  CALL METHOD col_tree->add_column
    EXPORTING
      name        = 'PLANETYPE'
      width       = 20
      header_text = 'Type Of Plane'.
  CALL METHOD col_tree->add_column
    EXPORTING
      name        = 'ICON'
      width       = 15
      header_text = 'Icon'.
  CALL METHOD col_tree->add_column
    EXPORTING
      name        = 'SEATSFREE'
      width       = 40
      header_text = 'available Seats'.

ENDFORM.                    " ADD_COLUMNS

*-----------------------------------------------------------*
FORM add_nodes USING col_tree TYPE REF TO cl_column_tree_model.
  DATA : wa_node TYPE treemcnodt,
         it_item TYPE treemcitab,
         text1   TYPE char40,
         text2   type char10,
         text3   type char40,
         text4   type char40.
  PERFORM fill_item_table USING 'FLIGHTS'
                                 space
                                 space
                                 space
                                 space
                        CHANGING it_item.

  CALL METHOD col_tree->add_node

    EXPORTING
      node_key   = 'ROOT'
      isfolder   = 'X'
      item_table = it_item.
  REFRESH it_item.

  LOOP AT  it_scarr INTO wa_scarr.

    CLEAR wa_node.
    wa_node-node_key = wa_scarr-carrid.
    PERFORM fill_item_table USING wa_scarr-carrname
                                  space
                                  space
                                  space
                                  space
                        CHANGING it_item.


    CALL METHOD col_tree->add_node

      EXPORTING
        node_key          = wa_node-node_key
        relative_node_key = 'ROOT'
     relationship      = cl_column_tree_model=>relat_last_child
        isfolder          = 'X'
        expander          = 'X'
        item_table        = it_item.
    REFRESH it_item.
  ENDLOOP.

  LOOP AT  it_spfli INTO wa_spfli.

    CLEAR wa_node.
    CONCATENATE wa_spfli-carrid wa_spfli-connid
           INTO wa_node-node_key SEPARATED BY space.
    wa_node-relatkey = wa_spfli-carrid.
    CONCATENATE wa_spfli-carrid wa_spfli-connid ':'
                wa_spfli-cityfrom '->' wa_spfli-cityto
          INTO text1 SEPARATED BY space.
    PERFORM fill_item_table USING  text1
                                  space
                                  space
                                  space
                                  space
                        CHANGING it_item.

    CALL METHOD col_tree->add_node

      EXPORTING
        node_key          = wa_node-node_key
        relative_node_key = wa_node-relatkey
   relationship      = cl_column_tree_model=>relat_last_child
        isfolder          = 'X'
        expander          = 'X'
        item_table        = it_item.
    REFRESH it_item.
  ENDLOOP.


  LOOP AT  it_flight INTO wa_flight.

    CLEAR wa_node.
    CONCATENATE wa_flight-carrid
                wa_spfli-connid
                wa_flight-fldate
           INTO wa_node-node_key SEPARATED BY space.
    concatenate wa_flight-carrid
                wa_flight-connid
           into wa_node-relatkey separated by space.
    write wa_flight-fldate to text2.
    write wa_flight-price to text3 currency wa_flight-currency.
    if wa_flight-seatsmax >= wa_flight-seatsocc.
      text4 = wa_flight-seatsmax - wa_flight-seatsocc.
      endif.

    PERFORM fill_item_table USING text2

                                  text3
                                  wa_flight-currency
                                  wa_flight-planetype
                                  text4
                        CHANGING it_item.

    CALL METHOD col_tree->add_node

      EXPORTING
        node_key          = wa_node-node_key
        relative_node_key = wa_node-relatkey
   relationship      = cl_column_tree_model=>relat_last_child
        isfolder          = space
        expander          = space
        item_table        = it_item.
    REFRESH it_item.
  ENDLOOP.

ENDFORM.                    " ADD_NODES

*--------------------------------------------------------------*
FORM fill_item_table  USING    p_space1 TYPE c
                               p_space2 TYPE c
                               p_space3 TYPE c
                               p_space4 TYPE c
                               p_space5 TYPE c
                      CHANGING it_item TYPE treemcitab.


  DATA : wa_item TYPE  treemcitem.

  CLEAR wa_item.

  wa_item-class = cl_column_tree_model=>item_class_text.


  wa_item-item_name = 'MAIN'.

  wa_item-text = p_space1.
  INSERT wa_item INTO TABLE it_item.

  wa_item-item_name = 'PRICE'.

  wa_item-text = p_space2.
  INSERT wa_item INTO TABLE it_item.

  wa_item-item_name = 'CURRENCY'.

  wa_item-text = p_space3.
  INSERT wa_item INTO TABLE it_item.

  wa_item-item_name = 'PLANETYPE'.

  wa_item-text = p_space4.
  INSERT wa_item INTO TABLE it_item.

  wa_item-item_name = 'ICON'.

  IF NOT p_space5 IS INITIAL.
    IF p_space5 CO ' 0'.
      wa_item-t_image = icon_red_light.
    ELSE.
      wa_item-t_image = icon_green_light.
    ENDIF.
    CLEAR wa_item-text.
    INSERT wa_item INTO TABLE it_item.
  ENDIF.

  wa_item-item_name = 'SEATSFREE'.

  wa_item-text = p_space5.
  wa_item-t_image = space.
  INSERT wa_item INTO TABLE it_item.
ENDFORM.                    " FILL_ITEM_TABLE
*------------------------------------------------------------*
SCREEN 100 FLOW LOGIC
PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  MODULE container_processing.
  MODULE columntree_processing.

PROCESS AFTER INPUT.

  MODULE user_command_0100.

*-------------------------------------------------------------*
OUTPUT
 *----------------------------------------------------------------------------------------------------------*

4 comments:

Unknown said...

Very useful info with almost all required ALV functionalities

Unknown said...

Superb Notes its very useful.

Unknown said...

excellent blog

Unknown said...

Very useful and easy to understand.

Comments system

Disqus Shortname