Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Refresh problem in CL_GUI_ALV_TREE

Former Member
0 Kudos

Hi Experts,

I am taking an object name as input and based on the input value, fetching data from the table and displaying it in the form of a tree, using the class CL_GUI_ALV_TREE. The outtab is passed empty to the set_table_for_first_display method. Now, when I go back, enter a new object name and click on display, the data that is used to build the tree gets updated properly, all the add_node calls get executed fine, but the tree does not get refreshed. It gets refreshed properly if I restart the transaction and start with the new object. I am calling the method frontend_update to update the screen, still there is no change. I am clearing the tree object and building the tree from scratch with the new data. But it does not change.

Is there any clearing of cache required? I am missing anything that is not refreshing the tree. Any help on this would be greatly appreciated since I am stuck with this for a long time now. Thank you!

Regards,

Nithya

Edited by: Nithya S on Apr 8, 2008 8:57 AM

4 REPLIES 4

Former Member
0 Kudos

Any help with this?

Thanks,

Nithya

0 Kudos

Solved it myself. Not just the tree object, but the parent object had to be cleared too with a free method call. It works fine then.

Thanks,

Nithya

0 Kudos

Hi

Could you tell me what is this parent object and what method you use to clear the parent object

Thx

Shaos

Former Member
0 Kudos

hi nithya..........

check this code....hope it will be useful

report y13816_alv_tree_with_oops.

§1a. Define reference variables

data: g_alv_tree type ref to cl_gui_alv_tree,

g_custom_container type ref to cl_gui_custom_container,

gt_sflight type sflight occurs 0,

g_max type i value 255.

end-of-selection.

call screen 100.

*&----


*

*& Module STATUS_0100 OUTPUT

*&----


*

  • text

*----


*

module status_0100 output.

set pf-status 'MENU_BAR'.

if g_alv_tree is initial.

perform init_tree.

call method cl_gui_cfw=>flush

exceptions

cntl_system_error = 1

cntl_error = 2.

if sy-subrc <> 0.

call function 'POPUP_TO_INFORM'

exporting

titel = 'Automation Queue failure'(801)

txt1 = 'Internal error:'(802)

txt2 = 'A method in the automation queue'(803)

txt3 = 'caused a failure.'(804).

endif.

endif.

endmodule. " STATUS_0100 OUTPUT

*&----


*

*& Form init_tree

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

form init_tree .

  • §1b. Create ALV Tree Control and corresponding Container.

  • create container for alv-tree

data: l_tree_container_name(30).

l_tree_container_name = 'CONTAINER'.

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.

if sy-subrc <> 0.

message x208(00) with 'ERROR'(100).

endif.

  • Creating Tree Control

create object g_alv_tree

exporting

parent = g_custom_container

node_selection_mode = cl_gui_column_tree=>node_sel_mode_single

item_selection = 'X'

no_html_header = 'X'

no_toolbar = 'X'

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.

if sy-subrc <> 0.

message x208(00) with 'ERROR'. "#EC NOTEXT

endif.

  • §2. Create Hierarchy-header

  • The simple ALV Tree uses the text of the fields which were used

  • for sorting to define this header. When you use

  • the 'normal' ALV Tree the hierarchy is build up freely

  • by the programmer this is not possible, so he has to define it

  • himself.

data: l_hierarchy_header type treev_hhdr.

perform build_hierarchy_header changing l_hierarchy_header.

  • §3. Create empty Tree Control

  • IMPORTANT: Table 'gt_sflight' must be empty. Do not change this table

  • (even after this method call). You can change data of your table

  • by calling methods of CL_GUI_ALV_TREE.

  • Furthermore, the output table 'gt_outtab' must be global and can

  • only be used for one ALV Tree Control.

call method g_alv_tree->set_table_for_first_display

exporting

i_structure_name = 'SFLIGHT'

is_hierarchy_header = l_hierarchy_header

changing

it_outtab = gt_sflight. "table must be empty !

  • §4. Create hierarchy (nodes and leaves)

perform create_hierarchy.

  • §5. Send data to frontend.

call method g_alv_tree->frontend_update.

endform. " init_tree

*&----


*

*& Form build_hierarchy_header

*&----


*

  • text

*----


*

  • <--P_L_HIERARCHY_HEADER text

*----


*

form build_hierarchy_header changing

p_hierarchy_header type treev_hhdr.

p_hierarchy_header-heading = 'Month/Carrier/Date'.

p_hierarchy_header-tooltip = 'Flights in a Month'.

p_hierarchy_header-width = 30.

p_hierarchy_header-width_pix = ' '.

endform. " build_hierarchy_header

*&----


*

*& Form create_hierarchy

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

form create_hierarchy .

data: ls_sflight type sflight,

lt_sflight type sflight occurs 0,

l_yyyymm(6) type c,

l_yyyymm_last(6) type c,

l_carrid like sflight-carrid,

l_carrid_last like sflight-carrid,

l_month_key type lvc_nkey,

l_carrid_key type lvc_nkey,

l_last_key type lvc_nkey.

  • §4a. Select data

select * from sflight into table lt_sflight up to g_max rows.

  • §4b. Sort output table according to your conceived hierarchy

  • We sort in this order:

  • year and month (top level nodes, yyyymm of DATS)

  • carrier id (next level)

  • day of month (leaves, dd of DATS)

sort lt_sflight by fldate0(6) carrid fldate6(2).

  • Note: The top level nodes do not correspond to a field of the

  • output table. Instead we use data of the table to invent another

  • hierarchy level above the levels that can be build by sorting.

  • §4c. Add data to tree

loop at lt_sflight into ls_sflight.

  • Prerequesite: The table is sorted.

  • You add a node everytime the values of a sorted field changes.

  • Finally, the complete line is added as a leaf below the last

  • node.

l_yyyymm = ls_sflight-fldate+0(6).

l_carrid = ls_sflight-carrid.

  • Top level nodes:

if l_yyyymm <> l_yyyymm_last.

l_yyyymm_last = l_yyyymm.

*Providing no key means that the node is added on top level:

perform add_month using l_yyyymm

''

changing l_month_key.

  • The month changed, thus, there is no predecessor carrier

clear l_carrid_last.

endif.

  • Carrier nodes:

  • (always inserted as child of the last month

  • which is identified by 'l_month_key')

if l_carrid <> l_carrid_last.

l_carrid_last = l_carrid.

perform add_carrid_line using ls_sflight

l_month_key

changing l_carrid_key.

endif.

  • Leaf:

  • (always inserted as child of the last carrier

  • which is identified by 'l_carrid_key')

perform add_complete_line using ls_sflight

l_carrid_key

changing l_last_key.

endloop.

endform. " create_hierarchy

*&----


*

*& Form add_month

*&----


*

  • text

*----


*

form add_month using p_yyyymm type c

p_relat_key type lvc_nkey

changing p_node_key type lvc_nkey.

data: l_node_text type lvc_value,

ls_sflight type sflight,

l_month(15) type c.

  • get month name for node text

perform get_month using p_yyyymm

changing l_month.

l_node_text = l_month.

  • add node:

  • ALV Tree firstly inserts this node as a leaf if you do not provide

  • IS_NODE_LAYOUT with field ISFOLDER set. In form 'add_carrid_line'

  • the leaf gets a child and thus ALV converts it to a folder

  • automatically.

call method g_alv_tree->add_node

exporting

i_relat_node_key = p_relat_key

i_relationship = cl_gui_column_tree=>relat_last_child

i_node_text = l_node_text

is_outtab_line = ls_sflight

importing

e_new_node_key = p_node_key.

endform. " get_month

*&----


*

*& Form get_month

*&----


*

  • text

*----


*

  • -->P_P_YYYYMM text

  • <--P_L_MONTH text

*----


*

form get_month using p_yyyymm

changing p_month.

  • Returns the name of month according to the digits in p_yyyymm

data: l_monthdights(2) type c.

l_monthdights = p_yyyymm+4(2).

case l_monthdights.

when '01'.

p_month = 'January'.

when '02'.

p_month = 'February'.

when '03'.

p_month = 'March'.

when '04'.

p_month = 'April'.

when '05'.

p_month = 'May'.

when '06'.

p_month = 'June'.

when '07'.

p_month = 'July'.

when '08'.

p_month = 'August'.

when '09'.

p_month = 'September'.

when '10'.

p_month = 'October'.

when '11'.

p_month = 'November'.

when '12'.

p_month = 'December'.

endcase.

concatenate p_yyyymm+0(4) '->' p_month into p_month.

endform. " get_month

*&----


*

*& Form add_carrid_line

*&----


*

  • text

*----


*

  • -->P_LS_SFLIGHT text

  • -->P_L_MONTH_KEY text

  • <--P_L_CARRID_KEY text

*----


*

form add_carrid_line using ps_sflight type sflight

p_relat_key type lvc_nkey

changing p_node_key type lvc_nkey.

data: l_node_text type lvc_value,

ls_sflight type sflight.

  • add node

  • ALV Tree firstly inserts this node as a leaf if you do not provide

  • IS_NODE_LAYOUT with field ISFOLDER set. In form 'add_carrid_line'

  • the leaf gets a child and thus ALV converts it to a folder

  • automatically.

l_node_text = ps_sflight-carrid.

call method g_alv_tree->add_node

exporting

i_relat_node_key = p_relat_key

i_relationship = cl_gui_column_tree=>relat_last_child

i_node_text = l_node_text

is_outtab_line = ls_sflight

importing

e_new_node_key = p_node_key.

endform. " add_carrid_line

*&----


*

*& Form add_complete_line

*&----


*

  • text

*----


*

form add_complete_line using ps_sflight type sflight

p_relat_key type lvc_nkey

changing p_node_key type lvc_nkey.

data: l_node_text type lvc_value.

write ps_sflight-fldate to l_node_text mm/dd/yyyy.

  • add leaf:

  • ALV Tree firstly inserts this node as a leaf if you do not provide

  • IS_NODE_LAYOUT with field ISFOLDER set.

  • Since these nodes will never get children they stay leaves

  • (as intended).

*

call method g_alv_tree->add_node

exporting

i_relat_node_key = p_relat_key

i_relationship = cl_gui_column_tree=>relat_last_child

i_node_text = l_node_text

is_outtab_line = ps_sflight

importing

e_new_node_key = p_node_key.

endform. " add_complete_line

*&----


*

*& Module USER_COMMAND_0100 INPUT

*&----


*

  • text

*----


*

module user_command_0100 input.

case sy-ucomm.

when 'EXIT'.

leave program.

endcase.

endmodule. " USER_COMMAND_0100 INPUT

reward if useful

cheers,

rekha