#

#

#

# Oracle® Agile Product Lifecycle Management for Process

Navigation Configuration Guide

Extensibility Pack 3.2
E340683-01

May 2013

# Copyrights and Trademarks

Agile Product Lifecycle Management for Process

Copyright © 1995, 2013, Oracle and/or its affiliates. All rights reserved.

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

If this software or related documentation is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

This software is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications which may create a risk of personal injury. If you use this software in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure the safe use of this software. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software in dangerous applications.

Oracle and Java are registered trademarks of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.

This software and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

Contents

Preface.. 6

Audience. 6

Variability of Installations. 6

Documentation Accessibility. 6

Access to Oracle Support. 6

Software Availability. 6

Extending Navigation Panels.. 7

Overview.. 7

Platform Navigation. 7

Portal Navigation. 7

Action Navigation. 8

Supplier Portal: Primary Navigation. 8

Supplier Portal: Object Navigation. 8

Adding/Adjusting Navigation Menu Items. 9

Portal and Platform Navigation. 9

Action Navigation Menu Items. 12

Action Navigation Icons. 15

Icon Examples. 16

Supplier Portal Navigation.. 17

Primary Navigation. 17

Object Navigation. 18

Controlling Visibility and Security.. 20

Security Profile (“SecurityProfileRef” Attribute). 20

<SecurityProfile> Attributes. 21

Security Profile Mode. 21

<SecurityProfile> Evaluators. 23

Security Profile Examples. 24

Visibility (“Visible” Attribute). 25

Visibility Examples. 25

Available Server Side Variables.. 26

Referencing the Active Object.. 27

Sort Order.. 27

SiteMap-DisplayOrder.xml <MenuItem> Attributes. 28

Sort Order Examples. 28

Translation Caches.. 28

Add a New Translation. 29

Adjusting an Existing Translation. 30

#

# Preface

## Audience

This guide is intended for client programmers involved with integrating Oracle Agile Product Lifecycle Management for Process. Information about using Oracle Agile PLM for Process resides in application-specific user guides. Information about administering Oracle Agile PLM for Process resides in the Oracle Agile Product Lifecycle Management for Process Administrator User Guide.

## Variability of Installations

Descriptions and illustrations of the Agile PLM for Process user interface included in this manual may not match your installation. The user interface of Agile PLM for Process applications and the features included can vary greatly depending on such variables as:

- Which applications your organization has purchased and installed
- Configuration settings that may turn features off or on
- Customization specific to your organization
- Security settings as they apply to the system and your user account

## Doc umentation Accessibility

For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.

## Access to Oracle Support

Oracle customers have access to electronic support through My Oracle Support. For information, visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info or visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs if you are hearing impaired.

## Software Availability

Oracle Software Delivery Cloud (OSDC) provides the latest copy of the core software. Note the core software does not include all patches and hot fixes. Access OSDC at:

http://edelivery.oracle.com.

# Extending Navigation Panels

## Overview

You can extend all navigation panels throughout the application suite.

### Platform Navigation

Platform Navigation is the navigation menu available in the top right of the browser window inside the suite header. This menu can be adjusted in the following ways: 1. Add Items 2. Remove Items 3. Re-arrange Items 4. Apply Visibility and Security Controls |

### Portal Navigation

Portal Navigation is available on the portal homepage listing in the left navigation panel. This menu can be adjusted in the following ways: 1. Add Items 2. Remove Items 3. Re-arrange Items 4. Apply Visibility and Security Controls |

### Action Navigation

Action Navigation is available in the top left corner of all objects. This navigation also includes the quick access icons. This menu can be adjusted in the following ways: 1. Add Menu Items 2. Remove Menu Items 3. Add Quick Access Icons 4. Remove Quick Access Icons 5. Adjust Hot Keys 6. Re-arrange Items 7. Apply Visibility and Security Controls |

### Supplier Portal: Primary Navigation

Primary Navigation is available in the top left corner of all objects. This navigation also includes the quick access icons. This menu can be adjusted in the following ways: 1. Add Menu Items 2. Add Quick Access Icons 3. Apply Visibility and Security Controls |

### Supplier Portal: Object Navigation

Object navigation is available inline next to each specification. This menu can be adjusted in the following ways: 1. Add Menu Items 2. Apply Visibility and Security Controls |

## Adding/Adjusting Navigation Menu Items

All navigation is defined by site map configurations inside the core config directory. Each application has its own corresponding site map configuration file. For example, SiteMap-GSM.xml controls all GSM Action Navigation Menus, SiteMap-SCRM.xml controls SCRM, etc. These files are encrypted in the release, but you can find reference copies in the following directory: /ReferenceImplementations/Navigation

With the SiteMap-Extensions.xml file, located in the \Config\Extensions directory you can override existing menu items or add new menu items that are not part of the core product.

### Portal and Platform Navigation

Menu Items are shared between these two menus. Portal and Platform Navigation uses the SiteMap-[App].xml core configuration files for each Application Menu. For example, the GSM Application Menu can be found in the SiteMap-GSM.xml file. To adjust existing items, the existing menu item nodes need to be copied from the SiteMap-[App].xml file and added to the SiteMap-Extensions.xml file using the same node location. To add new items, new menu item nodes need to be added to the SiteMap-Extensions.xml file and placed in the same node location where you want it to appear.

All Portal and Platform navigation individual application menus are inside the following nodes:

<MenuItem ID="ApplicationWideMenu" DisplayText="**Application Wide Menu" >

<MenuItem ID="Applications" DisplayText="**Applications">

INSERT MENU ITEM NODE OVERRIDES HERE

</MenuItem>

</MenuItem>

Example of the GSM Parent Menu Item:

<MenuItem ID="GSMSideNav" DisplayText="**GSM" SecurityProfileRef="GSMUser" SkinRef="DefaultWithChildren" TranslationRef="" Target="" NavigateUrl="${dc:GSM}" DefaultItemTextWrap="true" SortOrder="1" ToolTip="translate:Portal/PortalGSM/lblGlobalSpecMgmt" Visible="eval:(${fc:Portal.SideNav.GSM.Enabled})">

Adjusting an Existing Node Example:

To override a node and apply different attributes (like a security profile), the following steps need to be performed:

Step 1: Open SiteMap-GSM.xml and locate the node you would like to override. In this example, it is the Action Items Node.

<MenuItem ID="lblType5000" DisplayText="**Action Items" SecurityProfileRef="" SkinRef="DefaultWithoutChildren" TranslationRef="GSMSideBar" Target=""ClientSideCommand="${ConfirmationJsStart, document.location.href=}'${dc:GSM}/baseforms/default.aspx?ContentType=5000'${ConfirmationJsEnd,;}" />

Step 2: Copy the node, including all parent nodes

PARENT NODE – [<MenuItem ID="GSMSideNav" DisplayText="**GSM" SecurityProfileRef="GSMUser" SkinRef="DefaultWithChildren" TranslationRef="" Target="" NavigateUrl="${dc:GSM}" DefaultItemTextWrap="true" SortOrder="1" ToolTip="translate:Portal/PortalGSM/lblGlobalSpecMgmt" Visible="eval:(${fc:Portal.SideNav.GSM.Enabled})"> ]

NODE TO ADJUST – [<MenuItem ID="lblType5000" DisplayText="**Action Items" SecurityProfileRef="" SkinRef="DefaultWithoutChildren" TranslationRef="GSMSideBar" Target="" ClientSideCommand="${ConfirmationJsStart, document.location.href=}'${dc:GSM}/baseforms/default.aspx?ContentType=5000'${ConfirmationJsEnd,;}" /> ]

PARENT NODE CLOSED – [</MenuItem>]

Step 3: Paste the node block into SiteMap-Extensions.xml and adjust the attributes of the node you would like to override. Add configChildKey="ID" to the parent menu items added.

<MenuItem ID="ApplicationWideMenu" DisplayText="**Application Wide Menu" >

<MenuItem ID="Applications" DisplayText="**Applications">

<MenuItem ID="GSMSideNav" DisplayText="**GSM" SecurityProfileRef="GSMUser" SkinRef="DefaultWithChildren" TranslationRef="" Target="" NavigateUrl="${dc:GSM}" DefaultItemTextWrap="true" SortOrder="1" ToolTip="translate:Portal/PortalGSM/lblGlobalSpecMgmt" Visible="eval:(${fc:Portal.SideNav.GSM.Enabled})" configChildKey="ID" >

<MenuItem ID="lblType5000" DisplayText="**Action Items" SecurityProfileRef="NEWSECURITYPROFILE" SkinRef="DefaultWithoutChildren" TranslationRef="GSMSideBar" Target="" ClientSideCommand="${ConfirmationJsStart, document.location.href=}'${dc:GSM}/baseforms/default.aspx?ContentType=5000'${ConfirmationJsEnd,;}" />

</MenuItem>

</MenuItem>

</MenuItem>

Adding a New Node Example:

To add an additional node, perform the following steps:

Step 1: Open SiteMap-GSM.xml and locate the parent nodes where you want to add your new item.

Step 2: Copy all parent nodes where the new item will reside.

Step 3: Paste the node block into SiteMap-Extensions.xml and add the new menu item node.

Step 4: Adjust the Sort Order of the node block using the SiteMap-DisplayOrder.xml file. See Section 6 Sort Order for more information. Note: If you don’t see the node block you are adjusting inside SiteMap-DisplayOrder.xml, you will need to copy the entire block and add sort order attributes.

#### <MenuItem> Attributes

Attribute | Description | Comment
ID | Specify ID of the menu item. | Override the settings of existing menu by given the existing menu ID. Add a new menu item by choosing a new ID.
configChildKey | Specify identify key of child node. | Always set to ID
DefaultItemTextWrap | Specify whether text should be allowed to wrap | Values: true/false
DisplayText | Specify text note for the menu item. | This will be used as the caption for the menu item if the node has no translation ID.
NavigateUrl | Specify the link URL of the menu item. |
SecurityProfileRef | Specify Security Profile which be configured in MenuConfig. | Can append more than one security profile. Split by “,”
SkinRef | Used by the system to style the menu item |
SortOrder | Specify an order number. |
Sortable | Specify if the child nodes is sortable | Values: true/false
Target | Specify the link target. |
ToolTip | Specify the translation cache to use for the navigation item tooltip | Example: translate:Portal/PortalGSM/lblGlobalSpecMgmt
Visible | Specify variables to evaluate the visibility of the menu item. |

#### Nested Panels

Nested panels are used and can be added (maximum 3 levels). An example follows:

Display | Menu Nodes
A B1 C1 C2 B2 C1 | <menu item ID=”A”> <menu item ID=”B1”> <menu item ID=”C1”/> <menu item ID=”C2”/> </menu item> <menu item ID=”B2”> <menu item ID=”C1”/> </menu item> </menu item>

### Action Navigation Menu Items

Action Navigation uses the SiteMap-[App].xml core configuration files for the menus in each application. For example, the GSM Action Menu can be found in the SiteMap-GSM.xml file. To add or adjust existing items, the existing menu item nodes need to be matched inside the SiteMap-Extensions.xml file.

Action Menus are in stand-alone nodes. For example, the following nodes are used for GSM Action Navigation:

Node ID | Where Used
GSMNavSpec | GSM Specifications
GSMNavActionItems | Action Items
GSMNavEQT | Specification Search
GSMNavTestingProtocol | Testing Protocols
GSMNavTSA | Temporary Signature Authority
GSMNavLIO | LIO Profiles
GSMNavSmartIssueEQT | Smart Issue Search
GSMNavSmartIssue | Smart Issue Request
GSMNavFicTermEQT | Component Catalog Search
GSMNavFicTerm | Component Catalog Term
GSMNavGlobalSuccessionEQT | Global Succession Search
GSMNavSignatureDoc | GSM Signature Document

Example of the GSM > New > Material Menu Item:

<MenuItem ID="lblTypeNav1004" CssClass="hasIcon cssxIco1004-S" DisplayText="**Material Specifications" SecurityProfileRef="NewSpecCreator1004,NewSpecCreator_Action_1004" Visible="${fc:GSM.SideNav.MaterialSpec.Enabled}" NavigateUrl="${dc:GSM}/baseforms/createNew.aspx?ContentType=1004" >

#### <MenuItem> Attributes

Attribute | Description | Required | Comment
ID | Specify ID of the menu item. | No | Override the settings of existing menu by given the existing menu ID. Add a new menu item by choosing a new ID.
Action | Specify variables to evaluate the action enable status of the menu item. | No |
AutoPostBackOnSelect | Specify if this is a auto post back menu item. | No | Values: true/false
ClientSideCommand | Specify JavaScript command to be executed when clicking on the menu item. | No |
configChildKey | Specify identify key of child node. | No | Always set to ID
CssClass | Specify css class of the menu item | No | Add “hasIcon” to CssClass attribute to specify whether an icon appears to the left of the menu item inside the panel. See menu item example above.
DisplayText | Specify text note for the menu item. | No | This will be used as caption for the menu item if the node has no translation ID.
HotKey | Specify the hot key for the menu item. | No | The following words/characters can be used: Ctrl, Alt, Shift, 0-9, a-z.
InferredVisibility | Specify the mode of inferred visibility. Only for menu split and menu item which has child. | No | For split, Value should be “group”. This will evaluate the visibility of menu items between two splits. And use that result to decide the menu-split be visible or not. For a menu item that has a child, Value should be “child”. This will evaluate visibility of the child items. And use that result to decide the current node be visible or not.
IsInEditMode | Specify a variable to let the menu know if current object is in edit mode. | No | This property only can be applied to root node.
MenuType | Specify type of the menu item | No | Default is a normal menu item. The flowing types(in low case) can be used: split: specify a split icon: specify a tool button icon-split: specify a tool bar split title: specify a text item
NavigateUrl | Specify the link URL of the menu item. | No |
SecurityProfileRef | Specify Security Profile to be configured in MenuConfig. | No | Can append more than one security profile. Split by “,”
Target | Specify the link target. | No |
Visible | Specify variables to evaluate the visibility of the menu item. | No | Can add more than one by using &amp;&amp;

#### <MenuItemReference>

When you want to reuse an existing Menu Item Node, you can use the MenuItemReference node. Use this to define a reference point to an existing menu item.

Attribute | Description | Required | Comment
path | Specify path point to an existing menu item | Yes | Example: MenuID1/ MenuID2

#### <MenuItemDynamic>

Define a placeholder for a list of menu items that would be dynamically created by code.

Attribute | Description | Required | Comment
Factory | Specify the path of the factory class which implemented IYNavMenuDynamicItemsFactory | Yes |

####

Nested Panels

Nested panels are used and can be added (maximum 3 levels). An example follows:

Display | Menu Nodes
A B1 C1 C2 B2 C1 | <menu item ID=”A”> <menu item ID=”B1”> <menu item ID=”C1”/> <menu item ID=”C2”/> </menu item> <menu item ID=”B2”> <menu item ID=”C1”/> </menu item> </menu item>

## Action Navigation Icons

Action Navigation can display quick access icons to the right of the action menu arrow. Menu Items with the MenuType of icon should be added to the specific menu nodes where you would like the icon to appear.

Example of GSM Edit Icon:

<MenuItem MenuType="icon" ID="lblEdit" DisplayText="**Edit" SecurityProfileRef="" Visible="${ShowEditButton}" ClientSideCommand="execCmd('Edit');" />

Note: The translation will be used for the tooltip that appears when the user hovers over the icon.

### Icon Examples

Example 1: Nav A will appear as an icon

<MenuItem ID="GSMNavSpec" configChildKey="ID">

<MenuItem ID="NavA" MenuType="icon" DisplayText="NavA" ClientSideCommand="alert('NavA');" />

</MenuItem>

###

We can add a style to the icons.css file to specify the icon image. Other navigation icons are in the /*ACTION Icons*/ section.

Example:

#ynavMenuToolbar #ynavToolButton-NavA

{

background-image: url(../images/navmenu/NavA.gif);

}

We also can add a property CssClass to specify a class to specify the icon image.

<MenuItem ID="GSMNavSpec" configChildKey="ID">

<MenuItem ID="NavA" MenuType="icon" CssClass="cssxIco2147-S" DisplayText="NavA" ClientSideCommand="alert('NavA');" />

</MenuItem>

In this example, the css class “cssxIco2147-S” looks like the following:

.cssxIco2147-S

{

background-image: url(../images/icons/objectTypes/2147-S.png);

background-repeat: no-repeat;

}

Example 2: Item History should appear as an icon on all specification types that support it

<MenuItem ID="GSMNavSpec" configChildKey="ID">

<MenuItem ID="lblItemHistory" MenuType="icon" DisplayText="**lblItemHistory" Visible="${ShowItemHistoryButton}" ClientSideCommand="ShowItemHistory();" />

</MenuItem>

# Supplier Portal Navigation

Supplier Portal navigation allows all of the options available to the core applications. Refer to the core app sections to understand the attributes available for each node. The following feature configurations need to be enabled to set up Supplier Portal navigation items.

Config | Comment
SupplierPortal.NavigationExtension.Primary.Enabled | Enables the Supplier Portal Primary Navigation Extension
SupplierPortal.NavigationExtension.Objects.Enabled | Enables the Supplier Portal Object Navigation Extension

Adding a New Node Example:

To add an additional node, perform the following steps:

Step 1: Open SiteMap-Extensions.xml and add the new supplier portal menu item node.

## Primary Navigation

All primary navigation nodes should be defined under

<MenuItem ID="SupplierPortalNavigation" />

Node for navigation areas

Node ID | Navigation Area
MainPortal | Main Portal Page
SpecificationAndDocumentsListing | Specification and Documents Listing
ReferenceLibrary | Reference Library
Administration | Administration

Nested Panels

Nested panels are used and can be added (maximum 3 levels).

Example 1: Add a menu item in Main Portal Page

<MenuItem ID="SupplierPortalNavigation" configChildKey="ID">

<MenuItem ID="MainPortal" configChildKey="ID">

<!-- Items here for Main portal page -->

<MenuItem ID="testItem" ClientSideCommand="alert(1);" />

</MenuItem>

</MenuItem>

Example 2: Add a quick access icon in Administration Page

<MenuItem ID="SupplierPortalNavigation" configChildKey="ID">

<MenuItem ID=" Administration" configChildKey="ID">

<MenuItem ID="testItem" MenuType="icon" ClientSideCommand="alert(1);" />

</MenuItem>

</MenuItem>

## Object Navigation

The config nodes for navigation area should be defined under

<MenuItem ID="SupplierPortalObjectNavigation" />

Node for navigation areas

Node ID | Navigation Area
ActionItemListing | Action Item Listing
SpecificationListing | Specification Listing Listing

The nodes for specification type should be defined under the navigation area node.

Node for specification types

Node ID | Specification Type
2147 | Trade Specifications
5816 | Formulation Specifications
6500 | Menu Item Specifications
5750 | Nutrient Profile
6501 | Product Specifications
1004 | Material Specifications
1009 | Packaging Material Specs
2280 | Equipment Specs
2121 | Printed Packaging Specifications
1010 | Delivered Material Packing Specs
2076 | Packing Configuration Specs
1006 | Labeling Specifications
1005 | Master Specifications

Nested Panels

Nested panels are used and can be added (maximum 2 levels).

Example 1: Add a menu item for product spec in Action Items Listing page:

<MenuItem ID="SupplierPortalObjectNavigation">

<!-- For Action Item Listing -->

<MenuItem ID="ActionItemListing">

<!-- For Product Spec -->

<MenuItem ID="6501">

<MenuItem ID="testItem" ClientSideCommand="alert(1);" />

</MenuItem>

</MenuItem>

</MenuItem>

Example 1: Add a Custom Report Link to the Primary Navigation in the Specification and Documents section

<MenuItem ID="SpecificationAndDocumentsListing" configChildKey="ID">

<MenuItem ID="lblQualityReports" Text="Quality Reports" configChildKey="ID">

<MenuItem ID="lblSampleReport" Text="Sample Report" ClientSideCommand="var win = window.open('/SupplierPortal/Popups/SimplePopup.aspx?ContentKey=SupplierReporting&amp;ReportConfig=SupplierReports|QualityReports|QualitytBIReport','Prodika_SupplierReporting','titlebar=no,width=800,height=450,left='+(((screen.width-10-800)/2)+0)+',top='+(((screen.height-35-450)/2)+0));win.focus();" />

</MenuItem>

</MenuItem>

Example 2: Add a Custom Report Link to the Object Navigation for a Material Specification.

<MenuItem ID="1004">

<MenuItem ID="lblSampleReport" ClientSideCommand="var win = window.open('/SupplierPortal/Popups/SimplePopup.aspx?ContentKey=SupplierReporting&amp;ReportConfig=SupplierReports|QualityReports|QualitytBIReport&amp;SpecId=${SpecID}','Prodika_SupplierReporting','titlebar=no,width=800,height=450,left='+(((screen.width-10-800)/2)+0)+',top='+(((screen.height-35-450)/2)+0));win.focus();" />

</MenuItem>

To learn more about supplier reporting, see the Agile Product Lifecycle Management for Process Custom Report Configuration Guide.

# Controlling Visibility and Security

There are two ways to control the visibility of a menu item: “SecurityProfileRef” and “Visible” attribute. Most of them can determine the visibility of a menu item. But there is still a difference from a business perspective. “SecurityProfileRef” is used when you are evaluating session specific attributes, like user role, user group, spec permissions etc. The “Visible” attribute is used when you are evaluating static attributes, like configurations, spec types, spec mode etc.

## Security Profile (“SecurityProfileRef” Attribute)

For a menu item, the access rules should be defined. The Security Profile is a group of rules to define application, role or group based permissions. Security profiles control access to functionality within the application. For example, only users with the role of [Spec_Creator_1004] can create blank material specifications, so only those users can see the New > Material Specification > Blank menu item.

Existing Security Profiles are inside the Core MenuConfig.xml configuration. This file is encrypted in the release, but you can find a reference copy in the following directory: /ReferenceImplementations/Navigation

You can add additional Security Profiles inside MenuConfig-Extensions.xml. Security Profiles should be added within the following node:

<Providers configChildKey="ID">

<Provider ID="SecurityProvider">

<SecurityProfiles>

INSERT SECURITY PROFILES HERE

</SecurityProfiles>

</Provider>

Example of the Material Template Creator Security Profile:

<SecurityProfile ID="CreateFromTemplate1004" Mode="Visibility">

<Allow Roles="[CREATE_FROM_TEMPLATE_1004]"/>

</SecurityProfile>

### <SecurityProfile> Attributes

Attribute | Description | Comment
ID | Specify ID of the security profile. | This is the ID referenced on the menu item
Mode | Defines whether the security profile will just control visibility alone or if it will also perform an action. | Values: Visibility/Action
Application | Evaluates the users UGM Site Access | Application = “GSM” Will check if the user has the site access GSM checkbox selected on their user profile.

### Security Profile Mode

This is used on the New > Material Specification menu item. You can hover over “Material Specification” and it will open the From Blank, From Template panel. You can also click on the label Material Specification and it will automatically create a blank Material Specification.

The Material Specification menu item uses two security profiles:

SecurityProfileRef="NewSpecCreator1004,NewSpecCreator_Action_1004" Multiple security profiles are separated by a comma “,”.

NewSpecCreator1004 (shown below) allows users with the following roles [SPEC_CREATOR],[SPEC_ADMIN],[SPEC_CREATOR_1004],[CREATE_FROM_TEMPLATE_1004] to see the menu item Material Specification.

<SecurityProfile ID="NewSpecCreator1004" Mode="Visibility">

<Allow Roles="[SPEC_CREATOR],[SPEC_ADMIN],[SPEC_CREATOR_1004],[CREATE_FROM_TEMPLATE_1004]"/>

</SecurityProfile>

NewSpecCreator_Action_1004 (shown below) allows only users with the following roles [SPEC_CREATOR],[SPEC_ADMIN],[SPEC_CREATOR_1004] to create a spec by clicking on the label Material Specification. So users with [CREATE_FROM_TEMPLATE_1004] will see the menu item Material Specification but they will not be allowed to click on the item to create a new blank specification.

<SecurityProfile ID="NewSpecCreator_Action_1004" Mode="Action">

<Allow Roles="[SPEC_CREATOR],[SPEC_ADMIN],[SPEC_CREATOR_1004]"/>

</SecurityProfile>

### <SecurityProfile> Evaluators

Some of the box evaluators exist that allow you to evaluate user role and user group. You can also specify a custom evaluator class to evaluate more complex rules.

Attribute | Description
<Allow Roles="[ROLE]"/> | List the user roles that should be allowed. Example: <Allow Roles="[SPEC_CREATOR],[SPEC_ADMIN]"/> Roles separated by commas will be evaluated using an OR condition. If multiple Allow Roles evaluators are listed the system will evaluate each line as an AND. The following example makes sure the user has SPEC CREATOR OR SPEC ADMIN AND CREATE FROM TEMPLATE 2280 before they see the menu item. <SecurityProfile ID="SpecBlankCreator2280" Mode="Visibility"> <Allow Roles="[SPEC_CREATOR],[SPEC_ADMIN]"/> <Allow Roles="[CREATE_FROM_TEMPLATE_2280]"/> </SecurityProfile>
<Deny Roles="[ROLE]"/> | List the user roles that should be denied. Example: <Deny Roles="[NPD_PARTNER]"/> Roles separated by commas will be evaluated using an OR condition. If multiple Deny Roles evaluators are listed the system will evaluate each line as an AND.
<Allow Groups=“ PKID OF UGM GROUP” /> | List the user groups that should be allowed by specifying the pkid of the UGM User Group. Groups separated by commas will be evaluated using an OR condition. If multiple Allow Groups evaluators are listed the system will evaluate each line as an AND.
<Deny Groups=“PKID of UGM”/> | List the user groups that should be denied by specifying the pkid of the UGM User Group. Groups separated by commas will be evaluated using an OR condition. If multiple Deny Groups evaluators are listed the system will evaluate each line as an AND.
<Allow EvaluatorClassURL=”ClassLocation”/> | Use a custom class to evaluate security. Example: <Allow EvaluatorClassURL="Class:prodika.MyEvaluator,GSMWebUI"/>

Note: Wildcards can be used to designate that all groups or roles are allowed or denied. The “*” is used as the wild card.

### Security Profile Examples

Example 1: Nav A should only appear on the material specification for users who are in GroupA

Step 1. Add a new security profile in MenuConfig-Extensions.xml

<SecurityProfile ID="MySecurityProfle1" Mode="Visibility" Application="GSM">

<Allow Groups="Group A"/>

</SecurityProfile>

Step 2. Add menu item node to SiteMap-Extensions.xml

<MenuItem ID="GSMNavSpec" configChildKey="ID">

<MenuItem ID="NavA" DisplayText="NavA" ClientSideCommand="alert('NavA');" SecurityProfileRef="MySecurityProfle1"

Visible="eval:${ObjectType}==1004 &amp;&amp; ${IsInReadMode}" />

</MenuItem>

Example 2: NavB should only appear when the specification is in a workflow status with the name of "Approved"

Step 1. Add a new security profile in MenuConfig-Extensions.xml

<SecurityProfile ID="MyEvaluator" Mode="Visibility" Application="GSM">

<Allow EvaluatorClassURL="Class:prodika.MyEvaluator,GSMWebUI"/>

</SecurityProfile>

Step 2. Create a plugin named MyEvaluator and compile.

Imports Xeno.Prodika.Application

Imports Xeno.Prodika.Services

Imports Xeno.Web.UI.Common.Controls.ObjectHeader

Imports Xeno.Web.UI.Providers.Security

Public Class MyEvaluator : Implements ICustomSecurityEvaluator

Private ReadOnly Property SpecService() As ISpecificationService

Get

Return AppPlatformHelper.ServiceManager(Constants.GetInstance().SPECIFICATION_SERVICE)

End Get

End Property

Public Function Evaluate() As Boolean Implements ICustomSecurityEvaluator.Evaluate

If (SpecService.Current Is Nothing) Then

Return False

End If

//<Your codes here>

Return //<Your result here>

End Function

End Class

Step 3. Add menu item node to SiteMap-Extensions.xml

<MenuItem ID="GSMNavSpec" configChildKey="ID">

<MenuItem ID="NavA" DisplayText="NavA" ClientSideCommand="alert('NavA');" SecurityProfileRef="MyEvaluator"

Visible="eval:${ObjectType}==1004 &amp;&amp; ${IsInReadMode}" />

</MenuItem>

## Visibility (“Visible” Attribute)

You can also use the menu item attribute “Visible” to control the menu item visibility. There are several out of the box server variables you can leverage (see Section 4 for a listing of server variables).

Example of the Save menu item using Visible:

<MenuItem ID="lblSave" DisplayText="**Save" Visible="${IsInEditMode}" AutoPostBackOnSelect="true" />

The previous example will only show the Save menu item if the specification is in edit mode.

### Visibility Examples

Example 1: Add NavA to a material spec

<MenuItem ID="GSMNavSpec" configChildKey="ID">

<MenuItem ID="NavA" DisplayText="NavA" ClientSideCommand="alert('NavA');" Visible="eval:${ObjectType}==1004" />

</MenuItem>

Example 2: NavA will only appear on a material specification in read mode

<MenuItem ID="GSMNavSpec" configChildKey="ID">

<MenuItem ID="NavA" DisplayText="NavA" ClientSideCommand="alert('NavA');" Visible="eval:${ObjectType}==1004 &amp;&amp; ${IsInReadMode}" />

</MenuItem>

# Available Server Side Variables

Certain properties can leverage server side values. The following syntax should be used: ${variableName[,defaultValue]}.

Function | Description
${dc:APP_NAME} | Used to insert the URL set in the environment settings config. For example, ${dc:GSM} will pull in the GSM URL set inside the environment variables config.
fc:CONFIGURATION_NAME | Used to evaluate the state of a feature configuration For example, eval:${fc:GSM.SideNav.SpecComparisonReport.Enabled} will pull true if Spec Comparison is enabled and false if it’s not.
${IsInEditMode} | Used to evaluate whether the object is in Edit Mode
${IsInReadMode} | Used to evaluate whether the object is in Read Mode
${CanEdit} | Used to evaluate whether the user can edit the object
${ObjectType}==TYPE# | Used to evaluate what object type is active. For example, ${ObjectType}==1004 will only show the menu item when the active object is a material specification.
${sp:AssociatedCompanies} | A list of company PKID separate by “^” that can be used in Supplier Portal
${sp:AssociatedFacilities} | A list of facilities PKID separate by “^” that can be used in Supplier Portal
${sp:AssociatedSpecifications} | A list of specifications PKID separate by “^” that can be used in Supplier Portal
${sp:RegistrantEmail} | Supplier registrant email address that can be used in Supplier Portal
${sp:SupplierID} | Supplier PKID that can be used in Supplier Portal

Note: If a variable is used and does not existing in that specific application, the system will display a stack trace mentioning that the system is unable to parse a Boolean.

# Referencing the Active Object

Some out of the box JavaScript functions and variables are available so you can pull the active object’s identity information. These can be used to directly attach to a URL or even to supplement code extensions. For example, you can grab the object’s pkid and use it inside custom code to pull additional data from the specification.

Function | Description
GetObjectHeader_ObjectPKID() | Pulls the active object’s pkid
GetObjectHeader_ObjectTitle() | Pulls the active object’s title. This can be up to 256 characters.
GetObjectHeader_ObjectType() | Pulls the active object’s type and returns it in number format. For example 1004 is a material specification
${SpecID} | Returns the Specification PKID for the supplier portal object listed with the object navigation.
${SourcingApprovals} | Returns a list of SourcingApprovals PKID separate by “^” for the supplier portal object.

Example 1: Opening a popup window and appending the pkid to a URL

<MenuItem ID="lblNewMenuItem" DisplayText="NavB" TranslationRef="ApplicationMenu"

ClientSideCommand="window.open('${dc:GSM}/getspec.aspx?SpecID=' + GetObjectHeader_ObjectPKID(), 'mywindow','height=350,width=400,status=no,toolbar=no,menubar=no,location=no,dependent=yes,scrollbars=yes');"/>

# Sort Order

You can use the SiteMap-DisplayOrder.xml file to change the sort order for platform, portal and application navigation items. All the menu items have a SortOrder property that is evaluated and ordered in ascending order.

For example:

<MenuItem ID="Menu1" SortOrder="10" configChildKey="ID"/>

<MenuItem ID="Menu2" SortOrder="20" configChildKey="ID"/>

The above menus are displayed as in the order Menu1, Menu2. If the sort order is transposed, then Menu2 is displayed before Menu1. The actual number or the spacing between these tags does not matter. In the above example, 10 menu items could be inserted between Menu1 and Menu2 and yet be sorted deterministically. If two menus have the same sort order, then the display order is not guaranteed between those two elements.

## SiteMap-DisplayOrder.xml <MenuItem> Attributes

Attribute | Description | Required | Comment
ID | Specify ID of the menu item. | Yes | Should be the existing menu ID
configChildKey | Specify identify key of child node. | Yes | Should be “ID”
SortOrder | Specify an order number. | Yes |
Sortable | Specify if the child nodes is sortable | Yes (if has child nodes) | Values: true/false

## Sort Order Examples

Example 1-1: Re-arrange the "New" object menu and Re-arrange "New" and "Open"

Step 1: Add the following settings to SiteMap-DisplayOrder.xml

<MenuItem ID="GSMSideNav" SortOrder="1" Sortable="true" configChildKey="ID">

<MenuItem ID="lblNew" SortOrder="2" Sortable="true" configChildKey="ID">

<MenuItem ID="lblTypeNav2147" SortOrder="10" configChildKey="ID"/>

<MenuItem ID="lblTypeNav5816" SortOrder="20" configChildKey="ID"/>

<MenuItem ID="lblTypeNav1004" SortOrder="35" configChildKey="ID"/>

</MenuItem>

<MenuItem ID="lblOpen" SortOrder="1" configChildKey="ID" />

</SiteMap>

# Translation Caches

All menu items use translatable labels. The following click streams explain how to update an existing label or add a new label to use with a new menu item.

## Add a New Translation

Step 1: Add the new menu item to the SiteMap-Extensions.xml config specifying the menu item ID you are going to use.

Step 2: Identify which translation cache is being used by that menu using the following list. In the table, you will find a list of cache paths that are used, depending on the menu’s location in the application suite.

###

Navigation Menu | Cache Path
Platform Navigation | ApplicationMenu/TopMenu
Portal Navigation | ApplicationMenu/TopMenu
GSM Action Navigation | frmMaster/ctlNavMenu1
SCRM Action Navigation | frmMaster/ctlNavMenu1
NPD Action Navigation | frmNPD/ctlSidebar
NSM Action Navigation | frmNSM/ctlSidebar
eQ Action Navigation | frmEQuestionnaire/ctlSidebar
PQS Action Navigation | frmPQS/ctlSidebar
CSS Action Navigation | frmCss/ctlSidebar
SPA Action Navigation | frmSupplierPortalAdmin/ctlSidebar
ADMN Action Navigation | Portal/DataAdmin
UGM Action Navigation | frmPrincipalManagement
RPT Action Navigation | frmReporting/ctlSidebar
Supplier Portal Primary Navigation | NavigationMenu
Supplier Portal Object Navigation | NavigationMenu

Step 3: Confirm that this translation path has been added to the commonXLAExtensionCache database table. If it has not been added, you will need to add the cache path to this table.

Example script below:

insert into commonXLAExtensionCache ( pkid, Name, InheritFrom, Category )

SELECT '105862C1FABE-E347-4E10-90EC-A2418B893380', N'CACHE PATH', N'CACHE PATH', N'Nav Extension' FROM DUAL WHERE NOT EXISTS(SELECT 1 FROM commonXLAExtensionCache WHERE pkid = '105862C1FABE-E347-4E10-90EC-A2418B893380');

Verify that the pkid that is being inserted is unique per insert. It must start with 1058.

Step 4: Add the new menu item translation item to actual menu to the commonXLAExtensionCacheItem database table. This new menu item needs to be linked to the commonXLAExtensionCache entry you created above.

Example Script

insert into commonXLAExtensionCacheItem ( pkid, fkParent, langID, Id, Value )

SELECT '1059FBECDD5B-7B39-46A2-8C36-4A35EECCEFED', 'PKID of translation path from commonXLAExtensionCache', 0, N'NEW MENU ITEM ID', N'NEW MENU ITEM LABEL' FROM DUAL WHERE NOT EXISTS(SELECT 1 FROM commonXLAExtensionCacheItem WHERE pkid = '1059FBECDD5B-7B39-46A2-8C36-4A35EECCEFED' and langID = 0);

Verify that the pkid that is being inserted is unique per insert. It must start with 1059.

## Adjusting an Existing Translation

Step 1: Identify which translation cache is being used by that menu using the list below. Below you will find a list of cache paths that are used depending on the menu’s location in the application suite.

Navigation Menu | Cache Path
Platform Navigation | ApplicationMenu/TopMenu
Portal Navigation | ApplicationMenu/TopMenu
GSM Action Navigation | frmMaster/ctlNavMenu1
SCRM Action Navigation | frmMaster/ctlNavMenu1
NPD Action Navigation | frmNPD/ctlSidebar
NSM Action Navigation | frmNSM/ctlSidebar
eQ Action Navigation | frmEQuestionnaire/ctlSidebar
PQS Action Navigation | frmPQS/ctlSidebar
CSS Action Navigation | frmCss/ctlSidebar
SPA Action Navigation | frmSupplierPortalAdmin/ctlSidebar
ADMN Action Navigation | Portal/DataAdmin
UGM Action Navigation | frmPrincipalManagement
RPT Action Navigation | frmReporting/ctlSidebar

Step 2: Use the Customer Translations toolkit widget. Find the translation cache and update the existing translation item.

More information on this widget can be found in the Agile Product Lifecycle Management for Process Data Administration Toolkit Guide.