Implementing tree control in third level navigation
Hello
1. Is it possible to Implement a tree control inside third level navigation ?
2. How can I make selecting one of the nodes change the display in another iview on the same page ?
(How do they pass data to one another)
3. Is it possible to select several nodes at once ?
P.S
Is there a how to guid out there ?
Thanks
Ziv.
Hi,
I undestand you want to hide/show tree nodes on demand.
in the standard DTN (detailed navigation) it isn't possible.
There are two options -
1. As suggested you can modify the DTN provided by SAP - all the code is under com.sap.portal.navigation.detailedtree.par and the iView name is also com.sap.portal.detailedNavigationTree
2. create this tree from scratch, and put it on the left side instead of the DTN or as a dynamic navigation iView.
For creating navigation iViews by yourself, you can start from here:
http://help.sap.com/saphelp_nw70/helpdata/EN/43/0174a642406db7e10000000a422035/frameset.htm
Regards,
Tal.
Edited by: Tal Haviv on Aug 15, 2008 12:55 PM
Similar Messages
-
Can we control the top level navigation in portal from a java application
Hello,
I am having a scenario where User logged in to portal and assigned with 2 roles (HOME , ISA(Java application)). When user opened a form in ISA (Java application) and tried to enter the data in form and moved to another tab (e.g. HOME) in top level navigation.
When user come back to ISA (Java application) TAB , we show the page where he left earlier. I would like to know if user click any other TAB in top level navigation (Role assigned to him) while working on a page in ISA(Java application) is there any way we can catch that event before he leaves from ISA (Java application JSP page) to other TAB?
How can we control the top level navigation events in the portal from a java application .Since Top level navigation is seperate par file.
Thanks,
RNDear Rajesh,
Top Level and detailed navigation values comes with iteration in the respective par file.
Please check the par file and based on the value (i.e tab name) selected, you can write your code.
Best Regards
Arun Jaiswal -
Single click on tree control navigation
Hello I have a tree control where I have include the navigation, I know that there is a method
HANDLE_NODE_DOUBLE_CLICK FOR G_TREE
but is there an method for only one click, I want to change my alv grid data when I click on several nodes in my tree controlHello Muhammet
I have re-written my sample report ZUS_SDN_TWO_ALV_GRIDS into ZUS_SDN_TREE_AND_GRID_CONTROL which is now display a tree control together with the ALV grid.
When you analyze this new report you will see that every step of the program logic is as I described in my previous e-mails.
*& Report ZUS_SDN_TWO_ALV_GRIDS
*& Screen '0100' contains no elements.
*& ok_code -> assigned to GD_OKCODE
*& Flow logic:
* PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
* PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
*& Thread: single click on tree control navigation
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="1143770"></a>
REPORT zus_sdn_tree_and_grid_control.
TYPE-POOLS: abap, cntl.
TYPES: node_table_type LIKE STANDARD TABLE OF mtreesnode
WITH DEFAULT KEY.
* CAUTION: MTREESNODE is the name of the node structure which must
* be defined by the programmer. DO NOT USE MTREESNODE!
CONSTANTS:
BEGIN OF c_nodekey,
root TYPE tv_nodekey VALUE 'Root', "#EC NOTEXT
child1 TYPE tv_nodekey VALUE 'Child1', "#EC NOTEXT
* child2 type tv_nodekey value 'Child2', "#EC NOTEXT
new1 TYPE tv_nodekey VALUE 'New1', "#EC NOTEXT
new2 TYPE tv_nodekey VALUE 'New2', "#EC NOTEXT
* new3 type tv_nodekey value 'New3', "#EC NOTEXT
* new4 type tv_nodekey value 'New4', "#EC NOTEXT
END OF c_nodekey.
DATA:
gd_okcode TYPE ui_func,
gd_repid TYPE syst-repid,
go_docking TYPE REF TO cl_gui_docking_container,
go_splitter TYPE REF TO cl_gui_splitter_container,
go_cell_left TYPE REF TO cl_gui_container,
go_cell_right TYPE REF TO cl_gui_container,
go_tree TYPE REF TO cl_gui_simple_tree,
go_grid1 TYPE REF TO cl_gui_alv_grid,
** go_grid2 TYPE REF TO cl_gui_alv_grid,
gs_layout TYPE lvc_s_layo.
DATA:
gt_knb1 TYPE STANDARD TABLE OF knb1,
gt_knvv TYPE STANDARD TABLE OF knvv.
* 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.
CHECK ( sender = 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( 'DETAIL' ).
ENDMETHOD. "handle_double_click
ENDCLASS. "lcl_eventhandler IMPLEMENTATION
* CLASS LCL_APPLICATION DEFINITION
CLASS lcl_application DEFINITION.
PUBLIC SECTION.
CLASS-DATA:
md_event TYPE string READ-ONLY,
md_node_key TYPE tv_nodekey READ-ONLY.
CLASS-METHODS:
handle_node_double_click
FOR EVENT node_double_click
OF cl_gui_simple_tree
IMPORTING node_key,
handle_expand_no_children
FOR EVENT expand_no_children
OF cl_gui_simple_tree
IMPORTING node_key.
ENDCLASS. "LCL_APPLICATION DEFINITION
* CLASS LCL_APPLICATION IMPLEMENTATION
CLASS lcl_application IMPLEMENTATION.
METHOD handle_node_double_click.
" this method handles the node double click event of the tree
" control instance
" show the key of the double clicked node in a dynpro field
md_event = 'NODE_DOUBLE_CLICK'.
md_node_key = node_key.
" Trigger PAI and set ok-code = 'DETAIL'
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'DETAIL'
* IMPORTING
* rc =
MESSAGE md_node_key TYPE 'I'.
ENDMETHOD. "HANDLE_NODE_DOUBLE_CLICK
METHOD handle_expand_no_children.
" this method handles the expand no children event of the tree
" control instance
DATA: node_table TYPE node_table_type,
node TYPE mtreesnode.
" show the key of the double clicked node in a dynpro field
md_event = 'EXPAND_NO_CHILDREN'.
md_node_key = node_key.
IF node_key = 'Child1'.
* add two nodes to the tree control (the children of 'Child1')
* Node with key 'New1'
CLEAR node.
node-node_key = c_nodekey-new1.
node-relatkey = c_nodekey-child1.
node-relatship = cl_gui_simple_tree=>relat_last_child.
node-isfolder = ' '.
node-text = 'New1'(ne1).
APPEND node TO node_table.
* Node with key 'New2'
CLEAR node.
node-node_key = c_nodekey-new2.
node-relatkey = c_nodekey-child1.
node-relatship = cl_gui_simple_tree=>relat_last_child.
node-n_image = '@10@'.
node-expander = ' '.
node-text = 'New2'(ne2).
APPEND node TO node_table.
CALL METHOD go_tree->add_nodes
EXPORTING
table_structure_name = 'MTREESNODE'
node_table = node_table
EXCEPTIONS
failed = 1
error_in_node_table = 2
dp_error = 3
table_structure_name_not_found = 4
OTHERS = 5.
IF sy-subrc <> 0.
** MESSAGE A000.
ENDIF.
ENDIF.
ENDMETHOD. "HANDLE_EXPAND_NO_CHILDREN
ENDCLASS. "LCL_APPLICATION IMPLEMENTATION
START-OF-SELECTION.
SELECT * FROM knb1 INTO TABLE gt_knb1 UP TO 100 ROWS
WHERE bukrs = '1000'.
PERFORM init_controls.
* Display data
gs_layout-grid_title = 'Customers: Sales Areas'.
CALL METHOD go_grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'KNVV'
is_layout = gs_layout
CHANGING
it_outtab = gt_knvv
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
gd_repid = syst-repid.
CALL METHOD go_docking->link
EXPORTING
repid = gd_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 (does not contain any dynpro elements):
*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 "DETAIL"
* SET TITLEBAR 'xxx'.
* Refresh display of detail ALV list
CALL METHOD go_grid1->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.
TRANSLATE gd_okcode TO UPPER CASE.
CASE gd_okcode.
WHEN 'BACK' OR
'END' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
* User has pushed button "Display Details"
WHEN 'DETAIL'.
MESSAGE gd_okcode TYPE 'I'.
PERFORM entry_show_details.
WHEN OTHERS.
ENDCASE.
CLEAR: gd_okcode.
ENDMODULE. " USER_COMMAND_0100 INPUT
*& Form ENTRY_SHOW_DETAILS
* text
* --> p1 text
* <-- p2 text
FORM entry_show_details .
* define local data
DATA:
ld_row TYPE i,
ls_knb1 TYPE knb1.
IF ( gt_knvv IS INITIAL ).
SELECT * FROM knvv INTO TABLE gt_knvv
FOR ALL ENTRIES IN gt_knb1
WHERE kunnr = gt_knb1-kunnr.
ELSE.
REFRESH: gt_knvv.
ENDIF.
ENDFORM. " ENTRY_SHOW_DETAILS
*& Form INIT_CONTROLS
* text
* --> p1 text
* <-- p2 text
FORM init_controls .
* 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 ALV grids
CREATE OBJECT go_grid1
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.
PERFORM create_and_init_tree.
ENDFORM. " INIT_CONTROLS
*& Form CREATE_AND_INIT_TREE
* text
* --> p1 text
* <-- p2 text
FORM create_and_init_tree .
DATA: lt_node_table TYPE node_table_type,
lt_events TYPE cntl_simple_events,
ls_event TYPE cntl_simple_event.
* create a tree control
CREATE OBJECT go_tree
EXPORTING
parent = go_cell_left
node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single " single node selection is used
EXCEPTIONS
lifetime_error = 1
cntl_system_error = 2
create_error = 3
failed = 4
illegal_node_selection_mode = 5.
IF sy-subrc <> 0.
** MESSAGE a000.
ENDIF.
* define the events which will be passed to the backend
" node double click
ls_event-eventid = cl_gui_simple_tree=>eventid_node_double_click.
** ls_event-appl_event = 'X'. " process PAI if event occurs
" NOTE: Do NOT register as application event !!!!!
APPEND ls_event TO lt_events.
CALL METHOD go_tree->set_registered_events
EXPORTING
events = lt_events
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3.
IF sy-subrc <> 0.
** MESSAGE a000.
ENDIF.
SET HANDLER:
lcl_application=>handle_node_double_click FOR go_tree,
lcl_application=>handle_expand_no_children FOR go_tree.
* add some nodes to the tree control
* NOTE: the tree control does not store data at the backend. If an
* application wants to access tree data later, it must store the
* tree data itself.
PERFORM build_node_table USING lt_node_table.
* node_table_structure_name = 'MTREESNODE'
* A programmer using the tree control must create a structure in the
* dictionary. This structure must include the structure TREEV_NODE
* and must contain a character field with the name 'TEXT'.
CALL METHOD go_tree->add_nodes
EXPORTING
table_structure_name = 'MTREESNODE'
node_table = lt_node_table
EXCEPTIONS
failed = 1
error_in_node_table = 2
dp_error = 3
table_structure_name_not_found = 4
OTHERS = 5.
IF sy-subrc <> 0.
** MESSAGE a000.
ENDIF.
ENDFORM. " CREATE_AND_INIT_TREE
*& Form build_node_table
* text
* --> p1 text
* <-- p2 text
FORM build_node_table
USING
node_table TYPE node_table_type.
DATA: node LIKE mtreesnode.
* Build the node table.
* Caution: The nodes are inserted into the tree according to the order
* in which they occur in the table. In consequence, a node must not
* occur in the node table before its parent node.
* Node with key 'Root'
node-node_key = c_nodekey-root.
" Key of the node
CLEAR node-relatkey. " Special case: A root node has no parent
CLEAR node-relatship. " node.
node-hidden = ' '. " The node is visible,
node-disabled = ' '. " selectable,
node-isfolder = 'X'. " a folder.
CLEAR node-n_image. " Folder-/ Leaf-Symbol in state "closed":
" use default.
CLEAR node-exp_image. " Folder-/ Leaf-Symbol in state "open":
" use default
CLEAR node-expander. " see below.
node-text = 'Root'(roo).
APPEND node TO node_table.
* Node with key 'Child1'
node-node_key = c_nodekey-child1.
" Key of the node
" Node is inserted as child of the node with key 'Root'.
node-relatkey = c_nodekey-root.
node-relatship = cl_gui_simple_tree=>relat_last_child.
node-hidden = ' '.
node-disabled = ' '.
node-isfolder = 'X'.
CLEAR node-n_image.
CLEAR node-exp_image.
node-expander = 'X'. " The node is marked with a '+', although
" it has no children. When the user clicks on the
" + to open the node, the event
" expand_no_children is fired. The programmer can
" add the children of the
" node within the event handler of the
" expand_no_children event
" (see method handle_expand_no_children
" of class lcl_application)
node-text = 'Child1'(ch1).
node-style = cl_gui_simple_tree=>style_emphasized_positive.
APPEND node TO node_table.
ENDFORM. " build_node_table
Regards
Uwe -
Tree Control - Design Mode - Indent Level
Hi!
In edit mode tree control has indent / outdent level right - click menu. I need this functionality. Indenting and outdenting items. I've implemented, but the in/out Denting does not works well, it the tag has children.
I am wondering, is it possible to call indent/outdent level right-click menu in run mode?
+++ In God we believe, in Trance we Trust +++
[Hungary]Interesting challenge! The key involves creating your own custom run-time menu items and defining the actions of those items. Consider the following code, attached as an image and LV2010 VI:
a.lia-user-name-link[href="/t5/user/viewprofilepage/user-id/88938"] {color: black;} a.lia-user-name-link[href="/t5/user/viewprofilepage/user-id/88938"]:after {content: '';} .jrd-sig {height: 80px; overflow: visible;} .jrd-sig-deploy {float:left; opacity:0.2;} .jrd-sig-img {float:right; opacity:0.2;} .jrd-sig-img:hover {opacity:0.8;} .jrd-sig-deploy:hover {opacity:0.8;}
Attachments:
TreeIndentOutdent.vi 17 KB -
Show portal top level navigation in tab format to a tree fromat
hi all,
whn i assign roles to the portal they are displayed in the top level navigation in the tab format.''
Inspite of showing it in the tab format i want to show it in left croner in the tree format
>role1
>attri1
>attri2
>role2
>attri1
>attri2
Please help me in this...Awaiting for your response.Hi, you can change the Look & Feel of Portal.
See link below to create a new Portal Desktop
http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/e549a890-0201-0010-3f8b-d3b852457ebd&overridelayout=true
Regards,
Edson Thomaz -
Controlling visibility of Second Level navigation tabs in portal
Hello,
I have a request to create second level navigation based on user authorizations. The first level nav is called Applications, the second level navs under it are called SAP and BI. I only want to show SAP for some users and BI for others, and in some cases both.
When I created workset Application and assigned SAP and BI worksets under it, no matter that what authorization I give or not give to the user, both of them show up, unless I remove the role for Application worset, then nothing shows up.
If I remove SAP and BI worksets from Application workset, no matter what I do with roles, they do not show up. I kinda guessed that this will happen but just tried something anyway.
Can someone please explain who this can be done or is it not possible?
Thanks,
AlexHi Alex,
The navigation structure does not depend on authorizations but only on the roles assigned to the user (directly or through groups).
For your structure, you would create two roles, one SAP role and one BI role. Both roles start with an RoleFolder "Applications" as the role EntryPoint, where the child of this node within the SAP role is the SAP workset and the child of this node within the BI role is the BI workset. To get them merged, you will have to maintain the mergeID property on the corresponding elements; see http://help.sap.com/saphelp_nw04s/helpdata/en/53/89503ede925441e10000000a114084/frameset.htm for details of the merging concept and properties (that is what you are looking for).
Hope it helps
Detlev -
every example you see online is trivial and utterly useless
for practical programming purposes...typically you'll see something
like this:
<mx:XML format="e4x" id="myMenuModel">
<root label="Menu">
<menuitem label="MenuItem A">
<menuitem label="SubMenuItem 1-A"/>
<menuitem label="SubMenuItem 2-A" />
</menuitem>
<menuitem label="MenuItem B"/>
<menuitem label="MenuItem C" type="check"/>
<menuitem type="separator"/>
<menuitem label="MenuItem D">
<menuitem label="SubMenuItem 1-D" type="radio"
groupName="one"/>
<menuitem label="SubMenuItem 2-D" type="radio"
groupName="one"/>
<menuitem label="SubMenuItem 3-D" type="radio"
groupName="one"/>
</menuitem>
</root>
</mx:XML>
...just hard coded simplistic xml which is fine and dandy if
you have a simple xml schema and all the leaves of your tree can be
keyed off the same "label" attribute. But what if you have a
complex, deeply nested XML file that doesn't follow this nice
pattern? What if I want to pull different attributes from different
levels in the tree to display, is that even possible? Or what if I
dont want to use the attribute at all for my display label in the
tree, what if I want to use an element node name? Like for example,
say I had:
<department label="marketing">
<employee name="Eric Cartman" Age="8">
<interest>
<type>food</type>
<name>cheesiepoofs</name>
</interest>
<interest>
<type>pets</type>
<name>mr. kitty</name>
</interest>
</employee>
Is there a way I can build my tree to use the department
'label' attribute for the top level, the employee 'name' attribute
for the second level and the <type> element nested under
<interest> for the third level?
I confess I'm a Flex newbie but any other language I've
worked provides a mechanism to tailor this sort of thing to
individual business cases. Any insight would be greatly
appreciated.
thank you.
SAnother approach is parse your complex xml into objects and
then create your own
tree datadescriptor. This is described in the help. Search on
"custom tree datadescriptor"
We use this approach because the xml we want to display in a
tree does not fit nicely. So we wrote a parser that converts the
xml into "TreeObjects" (our class) and created the custom tree
datadescriptor to handle it. When we create the tree object we can
control the data used for the label so it displays correctly. -
Levels in "top level navigation"
Hi All,
As of now our portal consists of 2 levels in "top level navigation"
Now, I am trying to increase the no of levels to 3
I tried this by performing the bleow navigations
1 Logged on to portal
2 Content administration
3 Expanded Poratl Content
4 Expanded Content Provided by SAP
5 Expanded End User Content
6 Expanded Standard Poratl Users
7 Selected "Default Frame work Page"
8 In that selected Top Level navigation Iview and the iveiw properties I changed the property "Number of Display Levels " to 3 and choose save
Restarted the Server
Still I see the 2 levels only
Can anyone help me out...
Thanks in advanceHi,
You can have more than two levels of navigation in TLN. But This is not possible without custom implementation.
http://help.sap.com/saphelp_nw04/helpdata/en/5a/33befa45ca7f459b24d0c5d51d0749/frameset.htm
In I-4 says:
"In the Navigation property category, scroll to the Number of Display Levels property and enter the value 0, 1, or 2, depending on how many navigation levels, if any, you want for top-level navigation".
From the third level role, is displayed in the DLN.
regards,
Pradeep -
Drop down menu for top level navigation
Dear All,
I recently had a quick peek at SAP's corporate Portal, which has a drop down menu in the top level navigation that dynamically changes the secondary level navigation based on the option selected.
We are currently running a standard portal (<b>not</b> an external facing lightweight framework portal), does anyone know how to achieve a similar result so that we can provide a drop-down menu to allow the user to dynamically change their role structure?
Many thanks
JamesHi James,
We have implemented such thing two years ago, also without EFP (with the light framework, it's easy). It took some days (more than 5) to change every JS, JSP etc which has to be touched for this. In the end, the first level of the navigation had been moved up into the dropdownbox, so that when changing the ddb, the two lines of the originabl TLN showed in fact the second and the third level (and the DTN starting with the fourth level).
It was really nice, but keep in mind that this means modifying the standard and maintaining this solution with new SPS coming up...
Hope it helps
Detlev -
How can I save the all the values of a tree control ?
I have a problem, in run time, I adds new items on a tree control, but i don´t know how I can save the values of the child text of each item in a file.
Thanks.I'm no expert on the tree control, but I made a small example to save all items to a textfile, including item tag, item string, and indent level. One drawback of this method is that it fully expands the tree regardless how the user left it. To go the other direction, you'd have to write a routine to go through the text file and programmatically build the tree.
To master the tree control, I think you have to resort to creating a control reference for it and using the Invoke Node to do some operations. For another approach to traversing and operating on a tree, check out the "Traversing Tree Controls and Setting Custom Symbols" (search the NI Developer Zone site).
Best of luck,
John
Attachments:
Save Tree Structure to Textfile.vi 32 KB -
Customized Top Level Navigation iView
Hello to all
We are using a customized TLN iview. Its source code was modified to admit different URLs, and do the filtering depending of the default framework page which is using the TNL iview,
I mean, the TLN would be copied inside a proyect folder on the Portal Content, where would be a DFPage that contains a copy of TNL iview, and this copy would have a different roleFilter attribute.
Then, the TLN was modified again in order to merge roles that had the same name.
Those changes doesn't seem really important, they have just declared some vars, and each of them added one code line. The first one extended the first part of an IF condition, and the second one extended it with another condition, using OR.
The problem is that after the modifications, our TLN doesn't highlight correctly the first node when accessing or refreshing the Portal, instead of it shows a default start page that doesn't belong to any of our roles
The TLN iview has a procedure named PrintNavNodes, which is called on the event OnClick (I assume), and when we accessrefresh the page too.
The iview works well when clicking its buttons, it's just the first time it is used when the wrong page is shown, that's the problem we need to correct.
This procedure (PrintNavNodes) lodges the code changes. The only var modified is String prefix, so maybe anyone could tell me a default value to it, o a way to catch that mistake in order to show another page when the default page is to appear.
Also, I would appreciate if anyone knows about an API, andor a How to... manual, or any kind of documentation about this subject.
We have no possibility of reject the changes, so we need to find an alternative solution. Here is the code...
Thanks in advance, and regards
private void PrintNavNodes(IPortalComponentRequest request, IPortalComponentResponse response)
ILogger loggerArquitectura = request.getLogger(portal_logger);
String strDataToPrint=;
NavigationEventsHelperService navHelperService = (NavigationEventsHelperService)PortalRuntime.getRuntimeResources().getService(com.sap.portal.navigation.helperservice.navigation_events_helper);
NavigationNodes initialNodes = navHelperService.getRealInitialNodes(request);
!-- Change Heiko Broker for SiteNavigation
IPortalComponentContext componentContext = request.getComponentContext();
IPortalComponentProfile profile = componentContext.getProfile();
String roleFilter = profile.getProperty(RoleFilter);
if(initialNodes != null)
INavigationNode firstChild = null;
INavigationNode firstContent = null;
String prefix=ROLESportal_content;
!-- Change Marta Alberto
PROBLEM In the new TLN, when using the merge roles feature, the
url of the merge roles is different (start with the word merge.....).
This is a wrong implementation because it filters all the nodes that do
not start with ROLES.
SOLUTION Compare with the other prefix too.
String newPrefixThatFixesTheProblem=MERGESportal_content;
String newPrefixThatFixesTheProblem=merge(;
if(initialNodes.size() 0)
for(Iterator it = initialNodes.iterator(); it.hasNext();)
INavigationNode initialNode = (INavigationNode)it.next();
strDataToPrint=initialNode.getName(),;
!-- Change Heiko Broker for SiteNavigation
if (initialNode.getName().startsWith(prefix+roleFilter)
!-- Change Marta Alberto
PROBLEM In the new TLN, when using the merge roles feature, the
url of the merge roles is different (start with the word merge.....).
This is a wrong implementation because it filters all the nodes that do
not start with ROLES.
SOLUTION Compare with the other prefix too.
initialNode.getName().startsWith(newPrefixThatFixesTheProblem + prefix + roleFilter))
firstContent = PrintNode(initialNode, request, response, 0);
if(firstChild == initialNode)
if(firstChild.getLaunchURL() != null && !firstChild.getLaunchURL().equals())
firstContent = firstChild;
else
if(firstContent == null)
try
firstContent = firstChild.getFirstChild();
catch(NamingException e)
ILogger logger = request.getLogger(navigation_logger);
if(logger != null && logger.isActive())
logger.severe(this, e, Exception in Top Level Navigation);
HttpSession httpSession = request.getServletRequest().getSession();
httpSession.setAttribute(NavFirstContentNode, firstContent);
} end FOR
response.write(););Hi,
Check authentication related properties of iView. Make sure all of them are set to lowest level or none
Regards,
Ganga -
How to make top level navigation not refresh
Hello Guys,
I have a question concerning on my External Facing Portal, my boss wants that when I click on a tab or a link in the Top Level Navigation , to load the content in the Content Area without refreshing the whole page, What I want is that when I click on a tab or link of the Top Level Navigation , the Top Level Navigation and the MasterHead not to refresh and that the content be loaded and refreshed only in the Content Area. The only way I know to do this is by making a frameset of my page and to make the masterhead and toplevel navigation a frame and the detalied navigation a frame and the content area a frame, and in the links to put the target property to the name of the content area frame, but I don't know if this is possible to do in the portal, I see that all is embedded and I don't know how to make a frameset like this in the portal.
Any highlights to solve this will sure be appreciated.
Thanks
Rewarding points will be given.
LuisHi,
When you are implementing External Facing Portal, i think you have used Light Framework Page. In Light Framework Page, only one Framework has been used, so when you click on the top level navigation, the whole page will get refresh, so there is no otherway as of my knowledge. If you use standard framework page in portal, it is possible to do (i.e. the content area only get refresh) and the concept of your External Facing Portal is eliminated here.
Regards,
Venkatesh. K
/* Points are Welcome */ -
How to render image in tree control without embed it
Hello frndz i am working on tree control and want to show imagein its node through xml list collection.i have searched a lot for this but in every example with tree control images are embeded.i dont want to hardcode the image.Need to make the image comes from database(Xml).so is there any live or demo example for tree control.
Thanks in Advance
Vineet oshoif you decompile the imaging.ear file, there is a web.xml file which you can add the following parameter:
<context-param>
<param-name>oracle.adf.view.rich.security.FRAME_BUSTING</param-name>
<param-value>never</param-value>
</context-param>
or take a look at Receiving "Warning: Unable to load content in a frame. Frame content will load at the top level." When Trying to Use the <af:inlineFrame> Component [ID 1266770.1] on Oracle Support.
Make sure you take a copy of the imaging app before you make changes. You can then upload back through the weblogic console.
Sudi -
Items in Tree control move around when data is submitted using custom ItemRenderer
I'm working on a Tree control with an XMLListCollection as
its dataProvider.
The dataProvider has information looking like this :
quote:
<?xml version='1.0' encoding='utf-8'?>
<INFO>
<FIELD label="STR_USER_NAME"
type="text"
value=""
>
</FIELD>
<FIELD label="STR_USER_EMAIL"
type="text"
value=""
>
</FIELD>
<FIELD label="STR_OPTIONAL"
type="branch"
value="0"
>
<FIELD label="STR_USER_ADDRESS"
type="text"
value=""
>
</FIELD>
<FIELD label="STR_USER_POSTAL_CODE"
type="text"
value=""
>
</FIELD>
</FIELD>
</INFO>
So in the Tree control I'd like the information to show up
with a label and
an
editable textbox for each item :
[Label] [textbox]
To do this I made a tree like this :
quote:
<mx:Tree id="userTree"
editable="true"
rendererIsEditor="true"
editorDataField="curVal"
itemRenderer="{new ClassFactory(ItemRendererUser)}"
itemEditEnd="e_ProcessData(event);"
dataDescriptor="{new DataDescriptorUsers()}"
showRoot="false"
verticalScrollPolicy="{ScrollPolicy.AUTO}"
/>
where the e_ProcessData() function looks like this (I used
http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/js/html/wwhelp.htm?href=c
elleditor_073_16.html#202105 as a guide) :
quote:
public function e_ProcessData(event:ListEvent):void
event.preventDefault();
userTree.editedItemRenderer.data.@value =
ItemRendererUsers(event.currentTarget.itemEditorInstance).curVal;
userTree.destroyItemEditor();
userTree.dataProvider.notifyItemUpdate(userTree.editedItemRenderer);
} // END OF e_ProcessData()
I attached the rest of the files because they're a little
bit longer.
When I run the program, the data shows up fine when it is
initialized the
very
first time, and I made a test button that just dumps the
contents of the
dataProvider in a trace statement to verify that the data has
been set
properly.
The problem I've run into is whenever the textfield is
edited, the item
that
I've selected jumps around the list.
For example, if I edit the item "STR_USER_NAME" after I
finish the edit, it
will move from the very first position in the Tree to the
bottom of the
Tree.
I traced the contents of the dataProvider and the
dataProvider structure
stays
the same, with the "STR_USER_NAME" at the top, but if I look
at the flex app
in
the web browser, its position is at the bottom of the Tree.
This happens for every other item I try to edit... I read in
the
documentation
that the ItemRenderers are recycled, so it means I should be
checking to
make
sure the initial states are covered, but I'm not sure how
this affects my
application.
Can anyone help me out with this ? Its very confusing - I've
tried making
an
ItemRenderer using pure actionscript, mxml and the
combination you see in
this
example and I always end up with the same behaviour - So I
must be missing
something critical...
// ItemRendererUsers.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="
http://www.adobe.com/2006/mxml"
verticalScrollPolicy="{ScrollPolicy.OFF}"
horizontalScrollPolicy="{ScrollPolicy.OFF}"
creationComplete="initItemRendererUsers();"
>
From my FAQ:
Q: I've created a custom itemRenderer component to use in a
List
based component (Datagrid, TileList, HorizontalList, etc.).
When my List
first displays, everything looks fine, but when I scroll it
or change the
dataProvider, some of the itemRenderers show values or
formatting that
aren't right. How do I fix this?
A: List-based components don't draw a renderer for every item
in the
dataProvider. Instead, they create enough to display what is
on screen now,
plus one or two more waiting in the wings. This means they
recycle the
renderers rather than creating new ones when you change
dataProvider or
scroll up and down. When you use a creationComplete event to
set up the
itemRenderer, that event doesn't happen again when the
renderer is used for
a different set of data. The solution to this is to override
the set data
protected function that most components have.
For more information, check out the following resources:
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html?devcon=f1
http://blogs.adobe.com/aharui/2007/03/thinking_about_item_renderers_1.html
Please note, I post this FAQ weekly, and you can find a
permanent copy of it
here
http://www.magnoliamultimedia.com/flex_examples/Amys_Flex_FAQ.pdf"peterh8234" <[email protected]> wrote in
message
news:gaqttd$kft$[email protected]..
> Yes - the set and get functions are listed down below.
But the quirky
> behaviour
> is the same regardless of whether I override the set and
get functions or
> not.
>
> I noticed there was another variable called listData -
should I be using
> that
> one or the data variable to read and write to the
dataProvider ?
>
> // _data
> [Bindable] public var _data:Object;
> [Bindable("dataChange")]
> //
> override public function get data():Object
> {
> trace('[ItemRendererDefault.GET data()] called for {' +
> _data.attribute("label") + '}.');
> return _data;
> } // END OF get data()
>
> //
> override public function set data(value:Object):void
> {
> _data.@value = inputText.text;
> trace('[ItemRendererDefault.SET data()] called for {' +
> _data.attribute("label") + '}.');
>
> invalidateProperties();
> } // END OF set data()
Your set data needs to set a flag that gets picked up in
commitProperties()
and does your thing that you were doing before in
creationComplete. You
should see examples of this in the links I posted. Instead of
this:
_data.@value = inputText.text;
you should look at implementing IDropInListItemRenderer,
which will allow
you to dynamically determine which field to look at, instead
of hardcoding
it. You also might wind up overwriting the stored value with
a null value
when the List passes the stored value in. I'd encourage you
to really go
through those links I posted and make sure you understand
what they're
saying. The itemRenderer life cycle is one of the hardest
things to
understand, but once you understand it, it makes many things
in Flex much
easier. It's worth investing the time. -
Report with Dynamic tree control
I have a report with a TREE CONTROL.
<p>
A Tree is referenced to: CL_GUI_ALV_TREE_SIMPLE and is located on the left side of the screen.
<p>
See diagram below. The Tree has MULTI-LEVEL nodes and the user can click on any of the nodes which will
trigger a report (rellevant for that node) to appear in the REPORT container.
<p>
Everythign is working fine.
<p>
I now have a requirement to add a TREE ON/OFF functionality. I have added this by 'Freeing' TREE
container and by initializing when the user Turns ON the TREE. It is working fine, HOWEVER, when
it initilizes the TREE it is COLLAPSED and obviously does not point to the NODE that was clicked.
<p>
My goal is to retain the value of the NODE that was pressed and EXPAND the tree to that node and
highlight it... Please note that I have MULTI-LEVEL nodes and the user can double click on NODES
and ITEMS.
<p>
I tried using GET_SELECTED_NODES, but it only works if the user selects the LOWEST level node/item.
<p>
Any advise will be appreciated.
<p>
Also, as an alternative, I was thinking of resizing TREE container to WIDTH of 1 when the user PRESSES
TREE OFF and resizing back to width 200 when the user presses TREE ON. I could not find any methods
that would work with CL_GUI_DOCKING_CONTAINER.
Please help! Thank you in advance.
<br>
<br>
<img src="http://img237.imageshack.us/img237/6684/bdccz3.jpg" border="0"/></a>
<p>
<p>I have a report with a TREE CONTROL.
<p>
A Tree is referenced to: CL_GUI_ALV_TREE_SIMPLE and is located on the left side of the screen.
<p>
See diagram below. The Tree has MULTI-LEVEL nodes and the user can click on any of the nodes which will
trigger a report (rellevant for that node) to appear in the REPORT container.
<p>
Everythign is working fine.
<p>
I now have a requirement to add a TREE ON/OFF functionality. I have added this by 'Freeing' TREE
container and by initializing when the user Turns ON the TREE. It is working fine, HOWEVER, when
it initilizes the TREE it is COLLAPSED and obviously does not point to the NODE that was clicked.
<p>
My goal is to retain the value of the NODE that was pressed and EXPAND the tree to that node and
highlight it... Please note that I have MULTI-LEVEL nodes and the user can double click on NODES
and ITEMS.
<p>
I tried using GET_SELECTED_NODES, but it only works if the user selects the LOWEST level node/item.
<p>
Any advise will be appreciated.
<p>
Also, as an alternative, I was thinking of resizing TREE container to WIDTH of 1 when the user PRESSES
TREE OFF and resizing back to width 200 when the user presses TREE ON. I could not find any methods
that would work with CL_GUI_DOCKING_CONTAINER.
Please help! Thank you in advance.
<br>
<br>
<img src="http://img237.imageshack.us/img237/6684/bdccz3.jpg" border="0"/></a>
<p>
<p>
Maybe you are looking for
-
How to import a Migration key in a Portal System.
Hi, We have a Portal System (Only Java Stack) and we have changed the existing Installation number of the System to a new one in Marketplace. We have received a new License key and Migration Key from SAP. I have imported the License Key in the System
-
ITunes 9.0 Needs Safari 4.03 - I already have it!
Did the update to iTunes 9 (with Snow Leopard), but when I try to use the store, a warning appears that says it requires Safari 4.03 or later to work and suggests I do a Software Update. I have Safari 4.03! And of course, there is no update with Soft
-
XML validating with Public ID (In Struts with Java)
I've found in my struts .jar local copies of various DTD files to validate XML files for Struts. However, I'm unable to figure out how a DOCTYPE like the following <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configu
-
Best way to give access on a table
Guys, i have a requirement by which a SQL server process needs to update a single table within Oracle. What is the most recomended way to give such access ? Is that by creating another user, say XX, granting update on the table to XX and creating pri
-
R cds for recording only music & dvds R for video and sound recording -is there more?