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
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.
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
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.
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.
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.
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.
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.
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
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.
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
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.
ENDMODULE. " DISPLAY_ALV_GRID OUTPUT
*-----------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'BACK'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
START-OF-SELECTION.
END-OF-SELECTION.
ls_exclude = cl_gui_alv_grid=>mc_fc_sort_asc.
ls_exclude = cl_gui_alv_grid=>mc_fc_filter.
ls_exclude = cl_gui_alv_grid=>mc_fc_detail.
ENDFORM. " FILL_FCODE
ENDMODULE. " DISPLAY_ALV OUTPUT
*--------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS'. " SET (SAVE, BACK,EXIT,CANCEL) IN PF-STATUS
ENDMODULE. " STATUS_0100 OUTPUT
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
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
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.
* 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 = 1 .
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 = 2 .
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 = 3 .
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 = 4 .
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 = 5 .
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 = 7 .
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 = 8 .
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 i 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
*------------------------------------------------------------*
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 i 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.
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
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.
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.
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.
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
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_displaySET HANDLER handle=>on_user_command FOR o_alv1.
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.
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
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.
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
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.
MODULE status_0100.
MODULE container_processing.
MODULE columntree_processing.
PROCESS AFTER INPUT.
MODULE user_command_0100.
*-------------------------------------------------------------*
OUTPUT
*----------------------------------------------------------------------------------------------------------*