‎2008 Feb 22 9:23 AM
Hi,
I want a simple program that will display the contents of an internal table in a tree format.
Thanx
Amrita
‎2008 Feb 22 9:29 AM
‎2008 Feb 22 9:29 AM
‎2008 Feb 22 9:41 AM
Check the sample code
&---------------------------------------------------------------------
*& Report ZUS_SDN_THREE_ALV_GRIDS
*&
&---------------------------------------------------------------------
*&
*&
&---------------------------------------------------------------------
REPORT zus_sdn_three_alv_grids.
DATA:
gd_okcode TYPE ui_func,
*
go_docking TYPE REF TO cl_gui_docking_container,
go_splitter TYPE REF TO cl_gui_splitter_container,
go_splitter_2 TYPE REF TO cl_gui_splitter_container,
go_cell_top TYPE REF TO cl_gui_container,
go_cell_bottom TYPE REF TO cl_gui_container,
go_cell_left TYPE REF TO cl_gui_container,
go_cell_right TYPE REF TO cl_gui_container,
go_grid1 TYPE REF TO cl_gui_alv_grid,
go_grid2 TYPE REF TO cl_gui_alv_grid,
go_grid3 TYPE REF TO cl_gui_alv_grid.
DATA:
gt_knb1 TYPE STANDARD TABLE OF knb1,
gt_vbak TYPE STANDARD TABLE OF vbak,
gt_vbap TYPE STANDARD TABLE OF vbap.
PARAMETERS:
p_bukrs TYPE bukrs DEFAULT '1000'.
---------------------------------------------------------------------
CLASS lcl_eventhandler DEFINITION
---------------------------------------------------------------------
*
---------------------------------------------------------------------
CLASS lcl_eventhandler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING
e_row
e_column
es_row_no
sender.
ENDCLASS. "lcl_eventhandler DEFINITION
---------------------------------------------------------------------
CLASS lcl_eventhandler IMPLEMENTATION
---------------------------------------------------------------------
*
---------------------------------------------------------------------
CLASS lcl_eventhandler IMPLEMENTATION.
METHOD handle_double_click.
define local data
DATA:
ls_knb1 TYPE knb1,
ls_vbak TYPE vbak,
ls_vbap TYPE vbap.
CASE sender.
WHEN go_grid1.
READ TABLE gt_knb1 INTO ls_knb1 INDEX e_row-index.
CHECK ( ls_knb1-kunnr IS NOT INITIAL ).
CALL METHOD go_grid1->set_current_cell_via_id
EXPORTING
IS_ROW_ID =
IS_COLUMN_ID =
is_row_no = es_row_no.
Triggers PAI of the dynpro with the specified ok-code
CALL METHOD cl_gui_cfw=>set_new_ok_code( 'ORDERS' ).
WHEN go_grid2.
READ TABLE gt_vbak INTO ls_vbak INDEX e_row-index.
CHECK ( ls_vbak-vbeln IS NOT INITIAL ).
CALL METHOD go_grid1->set_current_cell_via_id
EXPORTING
IS_ROW_ID =
IS_COLUMN_ID =
is_row_no = es_row_no.
Triggers PAI of the dynpro with the specified ok-code
CALL METHOD cl_gui_cfw=>set_new_ok_code( 'ORDER_DETAILS' ).
WHEN go_grid3.
READ TABLE gt_vbap INTO ls_vbap INDEX e_row-index.
CHECK ( ls_vbap-matnr IS NOT INITIAL ).
SET PARAMETER ID 'MAT' FIELD ls_vbap-matnr.
CALL TRANSACTION 'MM02' AND SKIP FIRST SCREEN.
WHEN OTHERS.
RETURN.
ENDCASE.
ENDMETHOD. "handle_double_click
ENDCLASS. "lcl_eventhandler IMPLEMENTATION
START-OF-SELECTION.
SELECT * FROM knb1 INTO TABLE gt_knb1
WHERE bukrs = p_bukrs.
Create docking container
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0
ratio = 90
EXCEPTIONS
OTHERS = 6.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Create splitter container
CREATE OBJECT go_splitter
EXPORTING
parent = go_docking
rows = 1
columns = 2
NO_AUTODEF_PROGID_DYNNR =
NAME =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Get cell container
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_cell_left.
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 2
RECEIVING
container = go_cell_right.
Create 2nd splitter container
CREATE OBJECT go_splitter_2
EXPORTING
parent = go_cell_left
rows = 2
columns = 1
NO_AUTODEF_PROGID_DYNNR =
NAME =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Get cell container
CALL METHOD go_splitter_2->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_cell_top.
CALL METHOD go_splitter_2->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = go_cell_bottom.
Create ALV grids
CREATE OBJECT go_grid1
EXPORTING
i_parent = go_cell_top
EXCEPTIONS
OTHERS = 5.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT go_grid2
EXPORTING
i_parent = go_cell_bottom
EXCEPTIONS
OTHERS = 5.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT go_grid3
EXPORTING
i_parent = go_cell_right
EXCEPTIONS
OTHERS = 5.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Set event handler
SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid1.
SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid2.
SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid3.
Display data
CALL METHOD go_grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'KNB1'
CHANGING
it_outtab = gt_knb1
EXCEPTIONS
OTHERS = 4.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
REFRESH: gt_vbak.
CALL METHOD go_grid2->set_table_for_first_display
EXPORTING
i_structure_name = 'VBAK'
CHANGING
it_outtab = gt_vbak " empty !!!
EXCEPTIONS
OTHERS = 4.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
REFRESH: gt_vbap.
CALL METHOD go_grid3->set_table_for_first_display
EXPORTING
i_structure_name = 'VBAP'
CHANGING
it_outtab = gt_vbap " empty !!!
EXCEPTIONS
OTHERS = 4.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Link the docking container to the target dynpro
CALL METHOD go_docking->link
EXPORTING
repid = syst-repid
dynnr = '0100'
CONTAINER =
EXCEPTIONS
OTHERS = 4.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
NOTE: dynpro does not contain any elements
CALL SCREEN '0100'.
Flow logic of dynpro:
*
*PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
END-OF-SELECTION.
&---------------------------------------------------------------------
*& Module STATUS_0100 OUTPUT
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'. " contains push button "ORDERS"
SET TITLEBAR 'xxx'.
Refresh display of detail ALV list
CALL METHOD go_grid2->refresh_table_display
EXPORTING
IS_STABLE =
I_SOFT_REFRESH =
EXCEPTIONS
OTHERS = 2.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Refresh display of detail ALV list
CALL METHOD go_grid3->refresh_table_display
EXPORTING
IS_STABLE =
I_SOFT_REFRESH =
EXCEPTIONS
OTHERS = 2.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
&---------------------------------------------------------------------
*& Module USER_COMMAND_0100 INPUT
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
MODULE user_command_0100 INPUT.
CASE gd_okcode.
WHEN 'BACK' OR
'END' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
User has pushed button "Display Orders"
WHEN 'ORDERS'.
PERFORM customer_show_orders.
WHEN 'ORDER_DETAILS'.
PERFORM order_show_details.
WHEN OTHERS.
ENDCASE.
CLEAR: gd_okcode.
ENDMODULE. " USER_COMMAND_0100 INPUT
&---------------------------------------------------------------------
*& Form CUSTOMER_SHOW_ORDERS
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
--> p1 text
<-- p2 text
----------------------------------------------------------------------
FORM customer_show_orders .
define local data
DATA:
ld_row TYPE i,
ls_knb1 TYPE knb1.
CALL METHOD go_grid1->get_current_cell
IMPORTING
e_row = ld_row.
READ TABLE gt_knb1 INTO ls_knb1 INDEX ld_row.
CHECK ( syst-subrc = 0 ).
SELECT * FROM vbak INTO TABLE gt_vbak
WHERE kunnr = ls_knb1-kunnr.
REFRESH: gt_vbap.
ENDFORM. " CUSTOMER_SHOW_ORDERS
&---------------------------------------------------------------------
*& Form ORDER_SHOW_DETAILS
&---------------------------------------------------------------------
text
----------------------------------------------------------------------
--> p1 text
<-- p2 text
----------------------------------------------------------------------
FORM order_show_details .
define local data
DATA:
ld_row TYPE i,
ls_vbak TYPE vbak.
CALL METHOD go_grid1->get_current_cell
IMPORTING
e_row = ld_row.
READ TABLE gt_vbak INTO ls_vbak INDEX ld_row.
CHECK ( syst-subrc = 0 ).
SELECT * FROM vbap INTO TABLE gt_vbap
WHERE vbeln = ls_vbak-vbeln.
ENDFORM. " ORDER_SHOW_DETAILS.
Regards
‎2008 Feb 22 9:44 AM
hi
good
you can't display the internal table data in a tree format in the classical report, for that you have to use the alv report which will help you to display your internal table data in a tree format.
thanks
mrutyun^
‎2008 Feb 22 8:48 PM
Try this one...It uses OO ALV Tree...
*&---------------------------------------------------------------------*
*& Report ZDUMMY_ATG_2
*&
*&---------------------------------------------------------------------*
REPORT zdummy_atg_2.
TYPES: BEGIN OF ty_header,
carrid TYPE spfli-carrid,
END OF ty_header.
TYPES: BEGIN OF ty_scarr,
carrid TYPE scarr-carrid,
carrname TYPE scarr-carrname,
END OF ty_scarr.
TYPES: BEGIN OF ty_tree,
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,
END OF ty_tree.
DATA: t_spfli TYPE STANDARD TABLE OF spfli,
w_spfli LIKE LINE OF t_spfli,
lt_f4 TYPE lvc_t_f4 WITH HEADER LINE,
return_tab TYPE STANDARD TABLE OF ddshretval WITH HEADER LINE,
t_stable TYPE STANDARD TABLE OF lvc_s_stbl WITH HEADER LINE,
t_header TYPE STANDARD TABLE OF ty_header,
t_scarr TYPE STANDARD TABLE OF ty_scarr,
t_tree TYPE STANDARD TABLE OF ty_tree WITH HEADER LINE.
DATA: g_alv_tree TYPE REF TO cl_gui_alv_tree,
g_custom_container TYPE REF TO cl_gui_custom_container,
gs_fieldcat TYPE lvc_s_fcat,
gt_fieldcat_tree TYPE lvc_t_fcat,
l_hierarchy_header TYPE treev_hhdr,
it_node_key TYPE lvc_t_nkey,
w_index TYPE sy-tabix.
DATA: ok_code LIKE sy-ucomm,
gt_fieldcat TYPE lvc_t_fcat.
FIELD-SYMBOLS: <fs_spfli> LIKE LINE OF t_spfli,
<fs_header> LIKE LINE OF t_header,
<fs_scarr> LIKE LINE OF t_scarr.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM cargar_datos.
PERFORM init_tree.
CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*& Form CARGAR_DATOS *
*&---------------------------------------------------------------------*
FORM cargar_datos.
SELECT mandt carrid connid countryfr cityfrom
airpfrom countryto cityto airpto
fltime deptime arrtime distance
distid fltype period
INTO TABLE t_spfli
FROM spfli.
SELECT carrid carrname
INTO TABLE t_scarr
FROM scarr
FOR ALL ENTRIES IN t_spfli
WHERE carrid EQ t_spfli-carrid.
DELETE ADJACENT DUPLICATES FROM t_scarr
COMPARING carrid.
LOOP AT t_scarr ASSIGNING <fs_scarr>.
APPEND INITIAL LINE TO t_header
ASSIGNING <fs_header>.
MOVE <fs_scarr> TO <fs_header>.
ENDLOOP.
ENDFORM. " CARGAR_DATOS
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT *
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'MAIN_STATUS'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT *
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
ok_code = sy-ucomm.
CASE ok_code.
WHEN 'BACK' OR 'STOP' OR 'CANCEL'.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*---------------------------------------------------------------------*
* FORM init_tree *
*---------------------------------------------------------------------*
FORM init_tree.
DATA: l_tree_container_name(30) TYPE c.
l_tree_container_name = 'CUSTOM_ALV'.
CREATE OBJECT g_custom_container
EXPORTING
container_name = l_tree_container_name
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
CREATE OBJECT g_alv_tree
EXPORTING
parent = g_custom_container
node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
item_selection = ''
no_html_header = 'X'
no_toolbar = ''
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
illegal_node_selection_mode = 5
failed = 6
illegal_column_name = 7.
PERFORM fill_catalog_tree.
PERFORM build_hierarchy_header CHANGING l_hierarchy_header.
CALL METHOD g_alv_tree->set_table_for_first_display
EXPORTING
is_hierarchy_header = l_hierarchy_header
CHANGING
it_outtab = t_tree[]
it_fieldcatalog = gt_fieldcat_tree.
PERFORM create_hierarchy.
ENDFORM. "INIT_TREE
*&---------------------------------------------------------------------*
*& Form FILL_CATALOG_TREE *
*&---------------------------------------------------------------------*
FORM fill_catalog_tree.
DATA: gs_fieldcat TYPE lvc_s_fcat.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 1.
gs_fieldcat-fieldname = 'CARRID'.
gs_fieldcat-scrtext_s = 'CompañÃa'.
gs_fieldcat-tabname = 'T_SPFLI'.
gs_fieldcat-edit = 'X'.
gs_fieldcat-f4availabl = 'X'.
gs_fieldcat-outputlen = '8'.
APPEND gs_fieldcat TO gt_fieldcat_tree.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 2.
gs_fieldcat-fieldname = 'CONNID'.
gs_fieldcat-scrtext_s = 'Conexión'.
gs_fieldcat-tabname = 'T_SPFLI'.
gs_fieldcat-edit = 'X'.
gs_fieldcat-outputlen = '8'.
APPEND gs_fieldcat TO gt_fieldcat_tree.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 3.
gs_fieldcat-fieldname = 'COUNTRYFR'.
gs_fieldcat-scrtext_s = 'PaÃs'.
gs_fieldcat-tabname = 'T_SPFLI'.
gs_fieldcat-edit = 'X'.
gs_fieldcat-outputlen = '4'.
APPEND gs_fieldcat TO gt_fieldcat_tree.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 4.
gs_fieldcat-fieldname = 'CITYFROM'.
gs_fieldcat-scrtext_s = 'Ciudad Salida'.
gs_fieldcat-tabname = 'T_SPFLI'.
gs_fieldcat-edit = space.
gs_fieldcat-outputlen = '20'.
APPEND gs_fieldcat TO gt_fieldcat_tree.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 5.
gs_fieldcat-fieldname = 'AIRPFROM'.
gs_fieldcat-scrtext_s = 'Arp. Salida'.
gs_fieldcat-tabname = 'T_SPFLI'.
gs_fieldcat-edit = 'X'.
gs_fieldcat-outputlen = '10'.
APPEND gs_fieldcat TO gt_fieldcat_tree.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 6.
gs_fieldcat-fieldname = 'COUNTRYTO'.
gs_fieldcat-scrtext_s = 'PaÃs'.
gs_fieldcat-tabname = 'T_SPFLI'.
gs_fieldcat-edit = 'X'.
gs_fieldcat-outputlen = '4'.
APPEND gs_fieldcat TO gt_fieldcat_tree.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 7.
gs_fieldcat-fieldname = 'CITYTO'.
gs_fieldcat-scrtext_s = 'Ciudad Llegada'.
gs_fieldcat-tabname = 'T_SPFLI'.
gs_fieldcat-edit = space.
gs_fieldcat-outputlen = '20'.
APPEND gs_fieldcat TO gt_fieldcat_tree.
ENDFORM. " FILL_CATALOG_TREE
*---------------------------------------------------------------------*
* FORM build_hierarchy_header *
*---------------------------------------------------------------------*
FORM build_hierarchy_header CHANGING
p_hierarchy_header TYPE treev_hhdr.
CLEAR p_hierarchy_header.
p_hierarchy_header-heading = 'Código'(300).
p_hierarchy_header-width = 60.
p_hierarchy_header-width_pix = ' '.
ENDFORM. "BUILD_HIERARCHY_HEADER
*---------------------------------------------------------------------*
* FORM create_hierarchy *
*---------------------------------------------------------------------*
FORM create_hierarchy.
DATA: l_root_key TYPE lvc_nkey,
l_next_key TYPE lvc_nkey,
l_last_key TYPE lvc_nkey,
header TYPE string,
w_menge_text(13) TYPE c.
CLEAR l_root_key.
LOOP AT t_header ASSIGNING <fs_header>.
READ TABLE t_scarr WITH KEY carrid = <fs_header>-carrid
ASSIGNING <fs_scarr>.
IF sy-subrc EQ 0.
header = <fs_scarr>-carrname.
ENDIF.
CLEAR l_root_key.
CLEAR l_next_key.
PERFORM add_node USING header l_root_key
CHANGING l_next_key.
LOOP AT t_spfli ASSIGNING <fs_spfli>
WHERE carrid EQ <fs_header>-carrid.
MOVE-CORRESPONDING <fs_spfli> TO t_tree.
PERFORM add_leaf USING t_tree l_next_key
CHANGING l_last_key.
ENDLOOP.
ENDLOOP.
CALL METHOD g_alv_tree->frontend_update.
ENDFORM. "CREATE_HIERARCHY
*---------------------------------------------------------------------*
* FORM ADD_NODE *
*---------------------------------------------------------------------*
FORM add_node USING l_name l_root_key
CHANGING l_next_key.
DATA: l_node_text TYPE lvc_value,
ls_tree TYPE ty_tree.
l_node_text = l_name.
CALL METHOD g_alv_tree->add_node
EXPORTING
i_relat_node_key = l_root_key
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = l_node_text
is_outtab_line = ls_tree
IMPORTING
e_new_node_key = l_next_key.
ENDFORM. "ADD_NODE
*---------------------------------------------------------------------*
* FORM ADD_LEAF *
*---------------------------------------------------------------------*
FORM add_leaf USING l_tree TYPE ty_tree
l_next_key
CHANGING l_last_key.
CALL METHOD g_alv_tree->add_node
EXPORTING
i_relat_node_key = l_next_key
i_relationship = cl_gui_column_tree=>relat_last_child
is_outtab_line = t_tree
IMPORTING
e_new_node_key = l_last_key.
ENDFORM. "ADD_LEAF
Greetings,
Blag.