- Key Terms
- Introduction
- Preparing to Design Services
- Configuring Categories and Service Items for Services
- Configuring Forms for a Service
- Configuring Services and Service Bundles
- Designing Plan for Delivering Services
- Configuring Rates and Accounts For Billing
- Additional Configurations For Designing Services
- Managing the Services and Attributes
- Designing Portlets and Portals Using Portal Designer
- Localizing Service Catalog
- Use Case of Designing a Service to Select Laptop
- Namespaces
- Form Rule and ISF JavaScripts UseCase Analysis
- Key Terms
- Index
- Namespaces
- References
- Nodes
- Expressions
- Namespace Usage in an Email Template
- Defining an Email Template
- Whitelist Images in Email Template
- Recipients
- Subject
- Body
- Service Manager Task Details URL
- Namespace Processing and Alternate Values
- Namespace Usage for Policy Configuration
- Namespace Usage for Authorizations and Reviews
- Delivery Plans and Tasks
- Namespace Usage for Delivery Tasks
- Conditional Statements
- Namespace Reference
- Email Namespace Elements
- Conditional Namespace Elements
- Organizational Unit-Based Namespaces
- Person-Based Namespaces
- Namespace Variables for Bundled Services
- Lightweight Namespaces
- Process Namespaces
- Requisition Namespaces
- Message Namespaces
Namespaces
This appendix contains the following topics:
Namespaces
The Business Engine provides facilities for service designers and system administrators to customize the contents of emails and to dynamically configure the progress of a requisition through the approval and delivery process by specifying conditional workflows.
In order to implement this capability, Service Catalog provides a unified way to access the values of data elements, such as a request's initiator or the service form data related to a request. This unified way is referred as the Business Engine Namespace.
Namespace functionality increases the flexibility of the service design, by allowing the delivery plan to incorporate approvals or tasks that are executed conditionally, depending on the current value of a namespace variable, or to dynamically adjust the routing of a particular task. It also allows the content, subject, and addresses of emails to be dynamically adjusted.
Note | The use of grid dictionary fields for Business Engine namespace is not supported. |
Namespace is a term used to describe a set of valid names that address the data objects used within Service Catalog, exposing these objects to service designers. This allows designers to use these elements in these contexts:
- Within an email, to dynamically resolve the recipient, subject, or references within the email body.
- To conditionally execute reviews, authorizations, or tasks in a delivery plan.
- In expressions which determine the person or queue to which an authorization or delivery task is assigned.
- In task names.
Namespaces are hierarchical. Namespace names reflect the structure of the data which defines a service, and the data entered on the service form when that service is requested. The key to manipulating namespace variables is knowledge of the hierarchy which defines Service Catalog data and the contexts in which particular Namespace variables can be used.
Each element in the hierarchy is case-insensitive. The elements are separated by periods (“.”). The last element may also be referred to as a “property”. All elements before the last one are “nodes” in the hierarchy.
This chapter describes Namespace in detail, its standards and implementation.
References
When Namespaces are used in a textual context, as in an email template or an assignment expression, delimiters are required to differentiate the Namespace from surrounding text. This delimiter is the character “#” surrounding the namespace references.
EXAMPLES:
For emails: |
Dear #Customer.Firstname#, We are pleased to inform you that the service you requested has been approved... |
For expressions: |
CN=#Service.Data.Initiator_Information.First_Name# |
For conditions: |
ActualCost > 2000.00 |
Nodes
Every node in the hierarchy has a node type. The type determines the subnodes and properties available for that element.
Node types are summarized in the table below.
Node Type |
Description |
---|---|
Activity |
Information about an activity (task), including its priority, status, and scheduled and actual start date, completion date, and duration |
Service Form Data |
Data in the fields in dictionaries used in a service |
OrganizationalUnit |
Information about an organizational unit |
Person |
Information about a person or queue, including name and, for person, company affiliation and contact information |
Process |
Information about a process (task), including its scheduled and actual dates and duration, and its current status and escalation level |
Requisition |
Information about a service request (shopping cart), including the start date and expected duration |
Service |
Information about the definition of the service requested, including form data |
Message |
Information about a failed Service Link task |
The OrganizationalUnit (OU) and Person node types have multiple instances within the Namespace. For example, the Person node appears as the requisition's Customer and Initiator, as well as in many other contexts. In this case the “PersonType” is used to reference data for the appropriate person.
The Service node, and its children, relates to a particular service request. Elements in these nodes are available only in contexts when there is a current service request. In particular, emails and design configuration details pertaining to site- and organization-level authorizations, which apply to a complete shopping cart, rather than to an individual request, should not contain Service nodes. Similarly, the Order Confirmation email Template, which pertains to the requisition rather than to individual service requests, should not contain Service nodes.
Details on PersonTypes, as well as the hierarchical structure of the namespace and the properties and subnodes available for each node are summarized in the Person-Based Namespaces.
All dates are maintained in Greenwich Mean Time (GMT). Date data includes both the date and the time. All dates are presented in the format:
YYYY-MM-DD mm:HH:ss SSS
That is, a 4-digit year, 2-digit month, 2-digit (zero-filled) day, followed by minutes, hours, seconds, and fractions of seconds using a 24-hour clock. For example, “2007-06-27 23:19:39.197” corresponds to June 27, 2007 at 11:19 PM.
Expressions
Authorizations, reviews, and delivery tasks may be assigned to a person or queue or by using an expression. The expression provides a means to identify the person or queue, stored within Organization Designer, to whom a task should be dynamically assigned.
- Configuring an Expression
- CN (Common Name) Assignments
- ID (Identifier) Assignments
- LOGINNAME Assignments
- QUEUE Assignments
Configuring an Expression
The person/queue may be identified by using one of four assignment types:
Assignment Type |
Meaning |
---|---|
CN |
“Common name” – The full name of a user, which is expressed as Firstname Lastname |
ID |
User ID; the unique numeric identifier of a user |
LOGINNAME |
The login name of a user |
QUEUE |
The name of a queue defined in Organization Designer |
Expression-based task assignments use the format:
AssignmentType=#Namespace_Expression#
The assignment statement should follow the rules below:
- The assignment operator (=) must immediately follow the AssignmentType and immediately precede the Namespace_Expression; no spaces are allowed.
- Namespaces used in the Namespace_Expression must be enclosed in hash marks (#).
- Expressions can consist of a combination of namespaces and constant data to create a person’s full name or the name of a queue. Separate expression elements by a single space.
- Do not include spaces in variable and functional position names, so that the expressions can evaluate properly.
- All lookups into the database using the result of an expression are case insensitive. For example, LOGINNAME assignment types in which the expression evaluated to “Ann” and “ann” would yield identical results; both would find a person whose login name was “ann”—or “Ann” or “ANN”.
CN (Common Name) Assignments
The CN assignment type attempts to find a person by matching the specified full name against the data stored in Organization Designer.
EXAMPLES:
CN=#Service.Data.Customer_Information.First_Name# #Service.Data.Customer_Information.Last_Name# CN=#Customer.FirstName# #Customer.LastName#
The values in the Namespace Expression must exactly match the name of the desired user as stored in Organization Designer. For example, a CN expression whose value is “Carroll Hastings” will not match a user whose name in Organization Designer is “Carol Hastings”. For this reason, you should not use dictionary fields into which users have been allowed to type data as free-format text. Instead, use dictionary fields that have been populated by using a Person data type, as this allows the user to choose people from a dialog box, eliminating typing errors. Alternatively, other Namespaces, such as the Customer, Initiator, or Performer, may be used if appropriate.
Use caution when using a CN assignment. It should not be used if two people could have identical first and last names. The assignment will always pick the first person (the one with the lowest PersonID) with the specified name.
When a field in a dictionary is defined as a Person data type, as is the “Select_Person” field in a person-based dictionary, its value is populated by choosing a person from the Select Person search box. The value is set to the unique identifier of the person in Organization Designer. This “ID” value may be referenced in a CN assignment.
EXAMPLE:
CN=#Service.Data.Approver.Select_Person#
ID (Identifier) Assignments
The PersonID for any of the Person nodes available via Namespace may be referenced in an ID assignment. Alternatively, a text field to which a PersonID has been copied or assigned may be used.
EXAMPLE:
ID=#Service.Data.TT_Contact.SupervisorID#
LOGINNAME Assignments
Login names uniquely identify a person in the application and can safely be used for assignments.
EXAMPLES:
LOGINNAME=#Service.Data.Customer_Information.Login_ID# LOGINNAME=#Customer.HomeOU.Manager.LoginName#
QUEUE Assignments
A queue must sometimes be assigned based not only on a service team, but also on the location of the customer. Such location-based queues can be accommodated by using a QUEUE assignment.
EXAMPLE:
QUEUE=#Service.Data.RC_Queue.Location# Desktop Services
This assignment would direct the task or approval to a queue named “Location Desktop Services,” where Location is the current value of the Location field in the RC_Queue dictionary on the service form. The resultant value for the QUEUE must exactly match the name assigned to a queue defined in Organization Designer. The match is case sensitive. If a match is not found, the task is directed to an Unassigned Work Queue.
Namespace Usage in an Email Template
Namespaces can be used in the following sections of an email template:
- Subject – the subject of the email
- To(s) – the addressees/recipients of the email
- Body – the text of the email
The Namespace data available depends on the context in which the email is sent. For example, task-level data (such as Process or Activity details) will not be available for use in an email that is triggered by a Requisition-level event, such as a Financial Authorization. See the Namespace Reference for details as to which Namespaces are allowable in which emails.
- Defining an Email Template
- Whitelist Images in Email Template
- Recipients
- Subject
- Body
- Service Manager Task Details URL
- Namespace Processing and Alternate Values
- Namespace Usage for Policy Configuration
- Namespace Usage for Authorizations and Reviews
- Delivery Plans and Tasks
- Namespace Usage for Delivery Tasks
- Conditional Statements
- Namespace Reference
- Email Namespace Elements
- Conditional Namespace Elements
- Organizational Unit-Based Namespaces
- Person-Based Namespaces
- Namespace Variables for Bundled Services
- Lightweight Namespaces
- Process Namespaces
- Requisition Namespaces
- Message Namespaces
Defining an Email Template
The email Template definition page is accessed from the Administration menu:
Choose
.To preview email templates:
Whitelist Images in Email Template
You can add external images to the email template for the notification emails generated from Service Catalog. If you find any missing image in the generated email template, then you must whitelist the resources so that authentication is not required to display an image. The ImageServlet generates a url with the documentId for every image that is uploaded in the request center. You can whitelist these images based on their documentId.
To display the images in email template:
Note | Add only individual image files to exclude from authentication and not the entire image folder from ImageServlet, as this will result in a security compromise. To find the documentId of a particular image, click Source in Email Template editor, after the image has been uploaded. |
Recipients
Namespaces can be used to send emails to people with an interest in the requisition.
Namespace Example |
Resolves To |
---|---|
#Requisition.Customer.Email# |
The customer’s email, maintained on the To(s): field on the Notifications tab of the Administration module. |
#Requisition.Customer.Supervisor.Email# |
The email of the customer’s supervisor. |
#Alternate.Email# |
The approver’s authorization delegate. The delegate can be assigned via the user's Profile. |
#Performer.Email# |
The task performer’s email, where the performer could be either a person or queue. The person’s and queue’s email can be found on the To(s): field on the Notifications tab of the Administration module. |
#Position.EscalationManager.Email# |
The escalation manager's email, where Escalation Manager is a user-defined functional position that has been associated, for example, with a Service Group, and to which a person on the Service Team has been assigned. |
#Service.Data.DictionaryName.FieldName# |
The current value of the specified field in the specified dictionary in the service form. The field should be validated to hold an email address. |
Subject
In addition to hard coding data into the subject line of the email template, namespaces can be used to make the template more specific to the requisition (while still maintaining a consistent look throughout services).
Namespace Example |
Resolves To |
---|---|
#Requisition.RequisitionID# |
The requisition number |
#Requisition.Customer.FirstName# |
The customer’s first name |
#Service.ServiceDefinition.Name# |
The service name |
Body
As with the subject field, the body of an email can also be configured to include requisition data, task data, service data, or service form data.
Namespace Example |
Resolves To |
---|---|
#Requisition.RequisitionID# |
The requisition number. |
#Service.Data.DictionaryName.FieldName# |
The current value of the specified field in the specified dictionary on the current service form. |
#Site.URL# |
The URL to access Service Catalog; this will resolve to the user's default view, which is set under Profiles > Preferences. |
#Site.URL#myservices/myservice.do? |
A link to the My Services module. |
#Site.URL#servicemanager/homepage.do |
A link to the Service Manager module. |
#URL# |
A link to the Task Details (service form) page of the task in Service Manager. |
Site URL Namespaces
The namespace #Site.URL# designates the URL through which Service Catalog is accessed. The URL path may also include a specific module to run as well as parameters (following the question mark) to pass to that module. The examples above generate a hyperlink in the email body that will direct the user to the My Services module, the Service Manager module or to capabilities available within those modules.
It is possible to create a namespace reference that will link to just about any page in My Services or Service Manager. The key to determining the appropriate URL is to have a site administrator temporarily turn on site debugging (but please read the caveats in the Cisco Prime Service Catalog Administration and Operations Guide carefully) and note the URL that appears when you navigate to the desired page. When embedding that URL in an email, you must use an encoded representation of characters such as ampersand (&).
Additional examples of such namespace references are given below.
Namespace Example |
Resolves To |
---|---|
#Site.URL#myservices/navigate.do?query=requisitionentry status&reqid=#Service.Requisition.RequisitionID#&reqentryid= #Service.RequisitionEntryID#&formAction= displayEntryStatus&serviceid=#Service.ServiceID#&requisitionId= #Service.Requisition.RequisitionID#&waiting=0&authTaskType=4&activityId= #ActivityID#&buttonsPresent=true& |
A link to the service authorization page within My Services with the current approval/review task selected. The Authorization Task Type of 4 refers to a Service Group authorization. |
#Site.URL#myservices/navigate.do?query=authorizationtask&taskId=#ActivityID #&return_to_url=authorizationslist& |
A link to the Service Group Authorization identified by ActivityID, which will take the user directly to the requisition containing the service requiring approval. |
#Site.URL#myservices/navigate.do?query=authorizationlist&return_to_url=portal |
A link to the authorizations list page within My Services where the user will see all the authorizations awaiting approval. |
#Site.URL#myservices/navigate.do?query=requisition&requisitionId= #Requisition.RequisitionID# |
A link the requisition confirmation page in My Services. |
Site URL Configuration
As part of the installation process, administrators specify the Service Catalog URL. This URL is stored in the configuration file newscale.properties. A sample entry is shown below.
!------------------------------------------------------------------- !Define the URL for the application !This is used in emails for constructing the various urls !------------------------------------------------------------------- ObjectCache.Application.URL=http://appsrv01.celosis.com/RequestCenter/
The entry for ObjectCache.Application.URL is the value of the namespace #Site.URL# and #URL#. The URL typically ends with “/RequestCenter/”; however, it is possible to configure the application server to automatically reroute requests to /RequestCenter/, so this portion of the path may be absent from the properties file.
In this case, the word /RequestCenter/ must be added after #Site.URL#, such as #Site.URL#/RequestCenter/myservices/myservice.do? , and to #URL#, such as #URL#/RequestCenter/myservices/myservice.do? to ensure that the namespace link resolves to the correct URL.
In order to determine if the /RequestCenter reference must be inserted, you may consult the newscale.properties file (or have the application server administrator report on its contents). An alternate method is:
- Enter #Site.URL# or #URL# by itself in an email and send the email when, for example, a task starts.
- When receiving the email, note if the URL resolves to just http://www.mycompany.com or http://www.mycompany.com/RequestCenter/.
- If the resolved URL does not include the wording /RequestCenter/, then add /RequestCenter/ after #Site.URL# or #URL# respectively.
Service Link Message Namespaces
The namespace node #Message# is available only within the body of email messages generated as a result of a Service Link failure to deliver an outbound message. The template to be used is specified as the “Failed email” in the Service Link agent definition. Elements in this node may be useful in helping a administrator diagnose the cause of the failure.
Service Manager Task Details URL
The #URL# namespace takes the user directly to the form data of a task in Service Manager. This is very nice for Ad-hoc tasks, and for teams that rarely perform tasks in Service Catalog. It can also be used for authorization tasks, but after the approver approves/denies the service, they find themselves in Service Manager, which can be confusing.
Some customers prefer this to the multistep process required to view the form data when approving via the #Site.URL#myservices/navigate.do?query=authorizationtask&taskId=#ActivityID# namespace. In fact, here, an approver can approve without seeing the form data which could be a slight audit issue depending if the data is important to the approval—they have to know to click on the name of the service to see the form data.
Any change to the ObjectCache.Application.URL in the newscale.properties file will also affect the #URL# namespace in the same way as the #Site.URL#.
Namespace Processing and Alternate Values
When a Namespace element is referenced, Service Catalog retrieves its value from the current context and replaces the reference to the Namespace in the email with the resolved value. Some Namespace elements are always guaranteed to exist and have a valid value, such as those relating to the customer or initiator of a request. Other Namespace elements, however, may be undefined at certain times. For example, a functional position may be vacant; no authorization delegate has been designated; or an employee is temporarily without a supervisor.
Any reference to a Namespace that is undefined is blank. Except for the email namespace, it is possible to provide an alternate value, by using a slash (/) immediately following the Namespace element name, and then assigning the alternate value.
EXAMPLE:
TO: #Alternate.email# #Performer.email#
- Design emails to be sent to both the designated reviewer and a possible alternate (authorization delegate). If no delegate is currently designated, the #Alternate.email# is blank
#Supervisor.LastName/Your current supervisor#
- If the person referenced currently has a supervisor, the supervisor's last name will appear in the email; otherwise, the string “Your current supervisor” will appear.
Namespace Usage for Policy Configuration
Namespaces are used when you configure an action for a service item policy. The actions that use namespaces are policy alert, send email, and order service. These namespaces are resolved during execution.
For more information about policies, see Understanding Service Items Policies.
Namespace Example |
---|
#SI.Subscription.ID# |
#SI.Subscription.OrganizationalUnit.ID# |
#SI.Subscription.OrganizationalUnit.Name# |
#SI.Subscription.Customer.Name# |
#SI.Subscription.Customer.LoginName# |
#SI.Subscription.Customer.Email# |
#SI.Subscription.AssignedDate# |
#SI.Subscription.SubmittedDate# |
#SI.Subscription.RequisitionID# |
#SI.Subscription.RequisitionEntryID# |
#SI.Subscription.Operation# |
Account Namespaces |
#SI.Subscription.Account.ID# |
#SI.Subscription.Account.Name# |
#SI.Subscription.Account.FunctionalPosition.<FPName>#.ID |
#SI.Subscription.Account.FunctionalPosition.<FPName>#.Name |
#SI.Subscription.Account.FunctionalPosition.<FPName>#.LoginName |
#SI.Subscription.Account.FunctionalPosition.<FPName>#.Email |
Agreement Namespaces |
#SI.Subscription.Agreement.ID# |
#SI.Subscription.Agreement.Name# |
Service Item Attributes Namespaces |
#SI.Type.ID# |
#SI.Type.Name# |
#SI.Type.DisplayName# |
#SI.Type.Classification.ID# |
#SI.Type.Classification.Name# |
#SI.Attribute.<AttributeName># |
Policy Attributes |
#Policy.ID# |
#Policy.Name# |
#Policy.Type# |
#Policy.Parameter.Attribute# |
#Policy.Parameter.Threshold# |
#Policy.Parameter.Operator# |
#Policy.Parameter.Hours# |
#Policy.Parameter.Value# |
Account Namespaces |
#Policy.Account.ID# |
#Policy.Account.Name# |
#Policy.Account.FunctionalPosition<FPName>.ID# |
#Policy.Account.FunctionalPosition<FPName>.Name# |
#Policy.Account.FunctionalPosition<FPName>.LoginName# |
#Policy.Account.FunctionalPosition<FPName>.Email# |
Namespace Usage for Authorizations and Reviews
Namespaces can be used in the following components of an authorization/review definition:
- Subject: Namespaces can be used to include form data in the task name
- Assign to: The authorization/review may be assigned from an expression.
- Condition: The authorization/review task may be conditionally performed
The subtab for specifying the details of an authorization or review looks like the figure below:
Subject
The subject of an authorization or review task can be configured to reflect requisition data through the use of namespaces, thus making the subject specific to the customer’s order. Simply include the namespace in the Subject field.
The most frequently used namespace is the name of the service to which the current review/authorization applies. This is typically concatenated with other descriptive text; for example:
Group Review for #Name#
The namespace #Name# is available as a shortened form for the Service Name.
Only namespaces referring to a specific attribute of the service and NOT the content of a service form can be used for Organizational Unit Reviews or Authorizations or Financial Authorizations. For instance, when using a namespace to refer to the customer’s first name:
#Requisition.Customer.FirstName# -- CORRECT #Service.Data.Customer_Information.First_Name# -- INCORRECT
Service Group Reviews and Authorizations may use #Service.Data# namespaces. Such reviews/authorizations apply to an individual service, so the service (form) data is available. Financial Authorizations and Organizational Unit Reviews/Authorizations apply to an entire requisition, which may include multiple services (requisition entries); therefore, the service data for an individual service is not available.
Assigning from an Expression
Authorization and review tasks can be assigned to:
- the person currently filling a functional position defined in Organization Designer.
- a static person or queue.
- the person or queue identified by the value of an expression .
In many cases, assigning tasks to a predefined position, individual, or queue is not a viable option. For example, the same service may be handled by different queues, depending on the location of the requestor. In cases like these, you may need to route the tasks based on requisition data entered or otherwise supplied in the ordering moment.
Delivery Plans and Tasks
The delivery plan is configured via the Plan tab of Service Designer > Services.
Each task is configured by choosing the task from the list of tasks (or clicking New to create a new task) and filling out the task-related subtabs.
For more information about delivery plan, see Configuring AMQP Tasks for Publishing Service Request to an External System.
Namespace Usage for Delivery Tasks
Configuring a service’s delivery plan and component tasks provides multiple opportunities to use expressions and namespaces.
Namespaces can be used in the following components of an authorization/review definition:
- Project Manager: May be assigned from a namespace expression.
- Subject for Monitor Plan: May include namespaces as well as literal text.
- Task name: May include namespaces as well as literal text.
- Participants: Performer and supervisor may be assigned from a namespace expression.
- Condition: The task may be performed only if the specified condition, which may use namespaces, is true.
- Project Manager for the Delivery Plan
- Monitoring Task Subject
- Delivery Task Name
- Assigning Roles (Performers and Supervisors) to the Task
Project Manager for the Delivery Plan
The Project Manager may be assigned from a person, queue, or expression. The expression may use any of the Assignment Types to identify a person in Organization Designer.
EXAMPLES:
LOGINNAME=#Service.Data.Project.ManagerLogin# ID=#Customer.Supervisor.ID#
Monitoring Task Subject
The subject for the monitoring task typically includes the #Name# namespace, to refer to the name of the service being monitored.
Monitor Plan for #Name#
Namespaces referring to performers, either people or queues, cannot be used.
Namespaces referring to the content of a service form can be used, but this may have side effects, as documented for the Delivery Task Name below.
Delivery Task Name
The delivery task name typically includes the service name, through the use of the #Name# Namespace. Service data (#Service.Data....#) can also be used. Since all tasks are created when the form is submitted, the value of the specified field must have been supplied in the ordering moment.
Note | Using form data for a task name is not best practice, since the task would no longer be groupable by the task name in a reporting environment. Further, a Service Manager query would need to use the “contains” operator to retrieve the rest of the task name, which may adversely affect performance. |
Assigning Roles (Performers and Supervisors) to the Task
As with authorizations, the service team or person assigned to tasks in the delivery plan may depend on data on each requisition, such as a customer’s location. Expressions can be used to intelligently route tasks, rather than creating different forms or workflows for each possible scenario.
Plan tasks that can be dynamically routed include the Performer and Supervisor roles found on the Participants tab of each task:
To assign “From an expression”, choose that option from the Assign drop-down list and click on the ellipsis (...) next to the “Assign to” field. The Edit Expression window appears to allow you to enter and validate the expression.
Conditional Statements
A conditional statement allows tasks to be initiated or skipped based on the condition and can be configured to evaluate at various times within the authorization, review, and delivery plan.
Namespaces used in conditional statements are not enclosed in # signs:
Service.Data.DictionaryName.FieldName=”Yes” -- CORRECT #Service.Data.DictionaryName.FieldName#=”Yes” -- INCORRECT
- Conditional Authorization and Review Tasks
- Conditional Delivery Plan Tasks
- Evaluating the Condition
- Syntax for Conditional Statements
- Tips and Techniques
Conditional Authorization and Review Tasks
Authorizations and reviews may be needed only when certain conditions exist. For example, an authorization may be required only when a unit price exceeds a specified threshold. To define a conditional authorization or review task, follow the procedure below.
Step 1 | Click on the authorization/review you are configuring. The Review/Authorization Details window appears, as shown in Review Details Window. |
Step 2 | Enter the Condition under which the particular authorization or review task should be executed. |
Step 3 | Validate the
condition by clicking
Validate.
A Validate window appears. The message “unexpected token” indicates that the namespace used is not valid in this context or, perhaps, that you have forgotten to enclose an alphanumeric literal in quotes. |
Step 4 | Click OK to dismiss the Validate window. |
Step 5 | Click Update to save the Review/Authorization Details. |
Validation checks that any namespace specified is valid for the current scope (the specific level of review/authorization or task), with the exception of dictionary fields (Data.DictionaryName.FieldName). This is perfectly legitimate, since the Review/Authorization may be defined at a site- or organization- level, independent of the service with which it is integrated. However, it may cause a runtime error: if the specified namespace, for example, Data.EUIT_ACCESS.Access_Type, does not exist.
Validation also checks that correct relational and arithmetic operators are used.
Conditional Delivery Plan Tasks
As with authorization and review tasks, a plan task in the service delivery moment may also be conditional.
Evaluating the Condition
Once the condition has been entered, you must decide when that statement will be evaluated. Each task (approval, review, or delivery) with a condition can be evaluated either
- At the beginning of a phase (Authorization or Delivery moment), or
- When the activity becomes active.
- Evaluate condition when authorization/delivery phase starts
- Evaluate condition when activity becomes active
- Re-evaluate Expressions as plan advances
- Start of a Phase and Start of a Task
Evaluate condition when authorization/delivery phase starts
The designer can choose to evaluate a conditional statement when a phase starts by choosing the “Evaluate condition when delivery phase starts (if condition evaluates to “false ”, times will be computed as zero) ” option within a specific task, as shown above for delivery tasks. A “ phase” corresponds to any of the system moments defined for processing a requisition. Each authorization or review has its own moment; all delivery tasks are performed within the Service Delivery moment.
Authorization tasks are always serial. You could put one conditional on one task saying if field= “somevalue” and a conditional on another saying field<> “somevalue”. That way, you know one authorization task will always be executed, and if you choose “when authorization phase starts ”, only one authorization task will appear in the process view. If you choose “when task becomes active”, both tasks appear, but one would be skipped.
The “if conditions evaluate to “false”, times will be computed as zero” statement means that Service Catalog will evaluate the conditions at the beginning of the phase. If these conditions are false, then the corresponding tasks will not be executed, and the Due Date for the service will be calculated without including the duration of these tasks.
Evaluate condition when activity becomes active
Alternatively, the designer can choose to evaluate a conditional statement when the task starts by choosing the “Evaluate condition when activity becomes active (times will not be affected, scheduling will be done by using these efforts) ” option.
Service Catalog will evaluate the condition at the beginning of each task. If the condition is false, the corresponding task will not be executed. Durations for any task configured with this option will be used to calculate the due date upon submission.
Re-evaluate Expressions as plan advances
The Re-evaluate Expressions feature is useful for designs in which there are multiple authorizations. It enables the person performing an authorization task to enter information in the service form which is then used to re-evaluate the expression used to assign the performer for a subsequent authorization task. If this option is not checked, all information used in expressions in the authorization task must be present during the Ordering moment.
This feature allows dynamic assignment of an approval or review task to a user (person or queue) and dynamic adjustment of the task title during the authorization or review moment. Once the authorization/review becomes active, the expression will be evaluated and the task will be assigned appropriately. This capability is available only for authorization and review tasks, not for delivery tasks.
Start of a Phase and Start of a Task
The following figure pinpoints and differentiates the start of a phase and the start of a task.
1 |
Start of Phase |
2 |
Start of Task |
Syntax for Conditional Statements
Conditional statements may include arithmetic operators as well as relational (logic) operators.
The type of logical operators you can use depend on the HTML representation of the field being tested. Most fields have (input elements) that allow only one value to be assigned; these include text, text area, radio button, single-select (drop-down) list, and radio buttons. The following logical operators can be used in conditional statements applied to such fields:
Operator |
Usage |
---|---|
< |
Less than. |
> |
Greater than. |
<= |
Less than or equal to. |
>= |
Greater than or equal to. |
<> |
Not equal to. |
= |
Equal to. |
OR |
Performs the logical OR of two or more statements. The result is true if all of the statements are true and false otherwise; that is, if any of the statements are false. |
AND |
Performs the logical AND of two or more statements. The result is true if any of the statements is true and false otherwise. |
Operators for conditionals have the standard order of operation:
- (negative) * (multiplication), / (division) + (addition), - (subtraction) <, >, >=, <=, <> (not equal), = NOT OR AND
Parentheses can be used to change the operator precedence or clarify the condition.
EXAMPLES:
ActivityID >= 50 Customer.FirstName = "Ann" Requisition.ActualCost >= 2000 Service.Quantity * Service.PricePerUnit <= 1000 Data.Approver.Custom_2 = "VP" OR Data.Approver.Custom_2 = “Director”
The INCLUDES operator can only be applied to fields that can hold multiple values. These include multi-select (drop-down boxes) and check boxes. The following logical operators can be used in conditional statements applied to such fields:
Operator |
Usage |
---|---|
OR |
Performs the logical OR of two or more statements. The result is true if all of the statements are true and false otherwise; that is, if any of the statements are false. |
AND |
Performs the logical AND of two or more statements. The result is true if any of the statements are true and false otherwise. |
NOT |
Negates the value of the condition. |
INCLUDES |
True if the specified value is a currently chosen option for the Namespace variable; applicable only to fields designated as “Multi-value” in the dictionary, typically fields with HTML representations of multi-select and check box. |
EXAMPLE:
Data.EUIT_ACCESS.AccessType INCLUDES “DSL” AND NOT Data.EUIT_ACCESS.AccessType INCLUDES “Dial-Up”
Note | No “#” signs are used to enclose the Namespace. |
- An alphanumeric value included in the condition must be enclosed within double quotation marks (“”).
- Namespace names are not case sensitive. The recommended standard is to use Title case (capitalizing the first letter of all words).
- All alphanumeric comparisons are case sensitive. For example, the condition “Data.MoveIndividual.FirstName=”Matt”” would be true only if the value of the FirstName field in the MoveIndividual dictionary were “Matt”, with an initial capital letter and the rest lower case letters.
- Any Boolean Namespaces (those whose names start with “Is”) have different values, depending on the underlying database. In SQLServer, the value of a Boolean is either true or false. In Oracle the corresponding values are 1 (for true) and 0 (for false).
- Less than and greater than operators for numeric value comparisons are not supported for dictionary fields. They are treated as text during comparisons. For example, the condition “Service.Data.VM.MemoryGB > 4” is evaluated to false if the dictionary field VM.MemoryGB has a value of 16.
- Multibyte characters are not supported for text string comparisons.
- An ampersand (“&”) included in a literal must be encoded as “&”. For example, the value “two & three” would appear in an expression as “two & three”.
- The following operators are not supported for boolean type fields:
- is greater than
- is less than
- is equal to ignore case
- begins with
- ends with
- contains
- does not contain
Tips and Techniques
Use a condition that always evaluates to false (for example, “1=2”) in a conditional statement to specify a task that will automatically be skipped.
The most common use cases for this are:
- When a service needs to “autocomplete” without having any tasks completed. The skipped task will mark the end of the delivery plan, and the requisition is marked as complete.
- When an email needs to be
sent without having to complete a task or when multiple emails are needed
during a given moment in the following ways:
- Create a parent task. On the email tab, choose an email to be sent out at completion (you may also configure one to go out when the activity becomes active).
- Create a child task with the condition 1=2. Set the condition to evaluate when the activity becomes active.
Namespace Reference
This reference section lists all Namespaces and the contexts in which each can be used.
Namespace Objects and their Relationships
The following diagram illustrates the nodes in the Namespace and the relationships between the nodes. The type of a node determines not only its own properties, but also the subcontexts (other nodes) to which it provides access.
The labeled boxes in this figure represent the types of Namespace nodes. Labeled arrows show the Namespace elements that allow the properties of one node to be accessed from another node. This figure can serve as a guide for service designers and administrators who need to navigate the Namespace to get access to Service Catalog data. For example, tracing the arrow labeled “Customer” from the Process node, we can see that the “Customer” element gives the Process node access to the properties of the Person node. So, for example, to access the Customer’s login name in a conditional statement for a task in a delivery plan, the condition would reference the namespace:
Requisition.Customer.LoginName
To access the same namespace from an email for a delivery plan, the namespace reference would be:
#Service.Requisition.Customer.LoginName#
Node relationships are not bidirectional. The fact that the Process node has access to the properties of the Person node does not imply that the properties of the Process node are also available to the Person node.
From the perspective of the service designer or administrator who wishes to use Service Catalog data in formatted emails or conditional statements, there are multiple “entry points” to the paths between nodes:
- Activities associated with Requisition Entries (services), such as delivery plan tasks, Service Group Authorizations, Service group reviews, and emails generated by any of these activities.
- Activities associated with Requisitions, such as Departmental Authorizations, Departmental Reviews, and Financial Authorizations.
These entry points determine the Namespace context that applies when a service designer or administrator is configuring email to be sent from an activity, or defining a conditional execution statement. Think of them as the starting point for navigating the paths between nodes. Where you enter the Namespace determines what nodes, and ultimately what properties and data values, will be available to you from that particular activity.
Email Namespace Elements
The # character must be used to delimit Namespace elements in email notifications.
OU-based Authorizations and Reviews
The authorizations and reviews at an organizational level may trigger an email:
- Organizational Unit Authorization
- Organizational Unit Review
- Financial Authorization
These email entry points support the Namespace elements listed below:
#ActivityID# #Priority# - priority assigned to the task: 1=high, 2=normal, 3=low #DueOn# #Subject# - the name of the task #Waiting# #ScheduledStart# #StartedOn# #CompletedOn# #ExpectedDuration# - typical task duration, in hours #ExpectedDurationUnits# - units in which task duration is displayed #ActualDuration# - actual task duration, in hours #CurrentDate# #StateName# - the status of the task #URL# #Customer.*# - where * denotes any Customer element #Performer.*# - where * denotes any Performer element #PerformerQueue.*# where * denotes any PerformerQueue element #Process.*# -- where * denotes any Process (task) element #Requisition.*# - where * denotes any Requisition element
Tasks and Service Group Authorizations/Reviews
Tasks which are part of the delivery plan, as well as service group authorizations and reviews may trigger an email:
- Service Group Authorization
- Service Group Review
- Plan Task
- Late Task
- Ad-hoc Task
- Failed Service Link Task
These email entry points support the Namespace elements listed below:
#ActivityID# #Priority# #DueOn# #Subject# #Waiting# #ScheduledStart# #StartedOn# #CompletedOn# #ExpectedDuration# #ActualDuration# #Instructions# -- for Adhoc tasks only #CurrentDate# -- the current date and time in GMT #StateName# -- the current status (state) of the activity #URL# -- the URL for directly accessing Task Details for this activity #Customer.*# -- all Customer elements; for an adhoc task only, this refers to the service performer who created the task #Performer.*# -- all Performer elements #PerformerQueue.*# -- all Queue elements #Process.*# - all Process elements #Service.ServiceID# #Service.ProcessTrackingID# #Service.Quantity# #Service.PricePerUnit# #Service.HasPrice# -- false (0) if the service has no price, 1 (true)otherwise #Service.Bundled# -- true (1)if the service is a child service in a bundle, false (0) otherwise #Service.isBundle# -- true (1) if the service is itself a bundle, false (0) otherwise #Service.BundledServices# -- the number of child services bundled with the current service #Service.ServiceDefinition.Name# #Service.ServiceDefinition.IsEntitlement# #Service.ServiceDefinition.DescriptionURL# #Service.ServiceDefinition.ExpectedDuration# #Service.ServiceDefinition.FunctionalPosition.PersonTypeElement# #Service.ServiceDefinition.ServiceGroup.Name# #Service.ServiceDefinition.ServiceGroup.FunctionalPosition .PersonElement# #Service.RequisitionEntryID# #Service.Requisition.URL# #Service.Requisition.ProcessTrackingID# #Service.Requisition.ExpectedDuration# #Service.Requisition.StartedDate# #Service.Requisition.ActualCost# #Service.Requisition.ExpectedCost# #Service.Requisition.RequisitionID# #Service.Requisition.Name# #Service.Requisition.Customer.*# --all Customer elements #Service.Requisition.Initiator.*# -- all Initiator element #Service.Requisition.ClientOU.*# -- all ClientOU elements #Service.Data.DictionaryName.FieldName#
The service data namespaces generally have the format
#Service.Data.DictionaryName.FieldName#
Conditional Namespace Elements
The # character is NOT used to access variables in conditionals. Some characters such as #, “, &, +, and – on the left side of the condition will cause database problems.
OU-based Authorizations and Reviews
The authorizations and reviews at an organizational level may be conditionally executed.
- Organizational Unit Authorization
- Organizational Unit Review
- Financial Authorization
These conditional entry points support the following Namespaces:
Site.URL Customer.* Initiator.* ClientOU.*
Tasks and Service Group Authorizations/Reviews
Service group authorizations and reviews, as well as tasks which are part of the delivery plan allow conditions to determine whether the task/review is executed:
- Service Group Authorization
- Service Group Review
- Plan Task
- Late Task
These conditional entry points support the following Namespaces:
Requisition.* Data.DictionaryName.FieldName
Organizational Unit-Based Namespaces
Information is available via Namespaces about organizational units. Organizational units may occur in many contexts, denoted by these namespace entity types:
Entity Type |
Description |
Example |
---|---|---|
ClientOU |
Organizational unit of the client for the requisition |
#Requisition.HomeOU.OrgElementType# |
HomeOU |
Home organizational unit of the performer, performer queue, or customer or of the manager of any of these people |
#Performer.HomeOU.OrgElementType# |
ParentOU |
The parent organizational unit of the current OU |
#Customer.HomeOU.ParentOU.OrgElementType# |
Organizational Unit Element Types (OrgElementType) are listed below, in the context of the ClientOU.
#ClientOU.Name# #ClientOU.Description# #ClientOU.OrganizationalUnitID# #ClientOU.OrganizationalUnitTypeID# #ClientOU.CostCenterCode# #ClientOU.FunctionalPosition.PersonElementType# #ClientOU.Manager.PersonTypeElement# #ClientOU.ParentOU.Name# #ClientOU.ParentOU.Description# #ClientOU.ParentOU.OrganizationalUnitID# #ClientOU.ParentOU.OrganizationalUnitTypeID# #ClientOU.ParentOU.CostCenterCode# #ClientOU.ParentOU.FunctionalPosition.PersonElementType#
Person-Based Namespaces
The Customer, Initiator, Alte rnate, and Performer Namespace elements expose information about a person stored in Organization Designer. Therefore, all entity types support the same variables; only the element denoting the entity type (“Customer”, “Initiator”, “Alternate”, or “Person”) will vary.
A list of person-based Namespace nodes is given below. Namespaces are available for all basic and extended person attributes. To form a valid Namespace variable, use these as the last part of the Namespace name, where the first part is the entity type. As always, the Namespace must be enclosed in hash marks (#) when used in an email.
PersonType is one of: |
|
---|---|
Alternate |
The designated delegate for the current authorization task performer. The following are the only namespaces supported for Alternate namespaces: #Alternate.FirstName# #Alternate.LastName# #Alternate.Title# #Alternate.TimeZoneID# #Alternate.Email# |
Customer |
Generally, the person for whom the current requisition was ordered; for task-based emails and escalations, the Supervisor of the task performer; for ad-hoc tasks, the task performer who created the ad-hoc task. |
Customer.Supervisor |
The supervisor of the customer for the current order. |
Customer.HomeOU.Manager |
The manager of the home organizational unit of the customer for the current order. |
Initiator |
The person who ordered the current requisition. |
Initiator.Supervisor |
The supervisor of the person who ordered the current requisition. |
Initiator.HomeOU.Manager |
The manager of the home organizational unit of the person who ordered the current requisition. |
Performer |
The person responsible for performing the current task. |
Performer.Supervisor |
The supervisor of the task performer. |
Performer.HomeOU.Manager |
The manager of the home organizational unit of the task performer. |
ClientOU.Manager |
The manager of the organizational unit for which an organizational unit review or authorization is being performed. |
FunctionalPosition |
A Service Catalog-defined functional position within an organization, service, or service group. |
Position.FunctionalPosition |
A user-defined functional position within an organization, service, or service group. |
Elements of the Person-type namespace node are listed below. If no element is specified, the expression returns the person's unique identifier in the database.
#PersonType .FirstName# #PersonType .LastName# #PersonType .Title# #PersonType .Birthdate# #PersonType .Hiredate# #PersonType .SSN# #PersonType .EmployeeCode# #PersonType .IsOffice# #PersonType .TimeZoneID# #PersonType .Email# #PersonType .CompanyAddress# -- a concatenation of all lines of the company address, including formatting into multiple lines #PersonType .PersonalAddress# -- a concatenation of all lines of the personal address, including formatting into multiple lines #PersonType .SimpleCompanyAddress# -- a concatenation of all lines of the company (business) address #PersonType .SimplePersonalAddress# -- a concatenation of all lines of the personal address #PersonType .DetailedCompanyAddress.Street1# #PersonType .DetailedCompanyAddress.Street2# #PersonType .DetailedCompanyAddress.City# #PersonType .DetailedCompanyAddress.StateProvince# #PersonType .DetailedCompanyAddress.Zip# #PersonType .DetailedCompanyAddress.Country# #PersonType .DetailedPersonalAddress.Street1# #PersonType .DetailedPersonalAddress.Street2# #PersonType .DetailedPersonalAddress.City# #PersonType .DetailedPersonalAddress.StateProvince# #PersonType .DetailedPersonalAddress.Zip# #PersonType .DetailedPersonalAddress.Country# #PersonType .Location# - a concatenation of all aspects of the location, with formatting to place elements on separate lines #PersonType .DetailedLocation.Building# #PersonType .DetailedLocation.BuildingLevel# #PersonType .DetailedLocation.Office# #PersonType .DetailedLocation.Cubicle# #PersonType .SimpleLocation# -- a concatenation of all aspects of the location, with spaces separating the elements #PersonType .WorkPhone# #PersonType .HomePhone# #PersonType .Fax# #PersonType .Mobile# #PersonType .Pager# #PersonType .LoginName# #PersonType .TimeZone# #PersonType .ExtManager# #PersonType .CompanyCode# #PersonType .Division# #PersonType .BusinessUnit# #PersonType .DepartmentNumber# #PersonType .CostCenter# #PersonType .ManagementLevel# #PersonType .Region# #PersonType .EmployeeType# #PersonType .LocationCode# #PersonType .Custom1# #PersonType .Custom2# #PersonType .Custom3# #PersonType .Custom4# #PersonType .Custom5# #PersonType .Custom6# #PersonType .Custom7# #PersonType .Custom8# #PersonType .Custom9# #PersonType .Custom10#
EXAMPLES:
#Person.FirstName# #Person.LastName# #Customer.Supervisor.Fax#
- Customer Namespaces
- Performer Namespaces
- PeformerQueue Namespaces
- Initiator Namespaces
- Functional Positions
Customer Namespaces
In delivery tasks, including escalations, the customer is the Task Supervisor. For ad-hoc tasks, the customer is the task performer who initiated the ad-hoc task. For all other tasks, and for a requisition, the customer is the person for whom the service has been requested. Customer namespaces allow access to customer information, including:
- Customer (person) information as defined in the person's profile and accessible via Organization Designer > People
- All person/profile information defined for the customer’s supervisor
- Information about the home Organizational Unit of the customer
- All person/profile information defined for the manager of the customer’s home OU
The namespaces below must be enclosed in hash marks (#) when used in emails, but entered without the hash marks when used in expressions. A complete list of person-type namespaces is listed in the Person-Based Namespaces.
Customer Namespaces.
#Customer.PersonTypeElement# #Customer.Supervisor.PersonTypeElement# #Customer.HomeOU.Name# #Customer.HomeOU.OrganizationalUnitID# #Customer.HomeOU.OrganizationalUnitTypeID# -- the type of unit, where 1=service team, and 2=business unit #Customer.HomeOU.CostCenterCode# #Customer.HomeOU.Manager.PersonTypeElement# #Customer.HomeOU.ParentOU.Name# #Customer.HomeOU.ParentOU.OrganizationalUnitID# #Customer.HomeOU.ParentOU.OrganizationalUnitTypeID# -- the type of unit, where 1=service team, and 2=business unit #Customer.HomeOU.ParentOU.CostCenterCode#
Performer Namespaces
The performer is the person responsible for performing a task in the service's delivery plan. Performer namespaces are not available in context in which no task is current—these include the email for Organization Unit reviews and authorizations; and financial authorizations.
Performer namespaces allow access to performer information, including:
- Performer (person) information as defined in the person's profile and accessible via Organization Designer > People
- All person/profile information defined for the performer’s supervisor
- Information about the home Organizational Unit of the performer
- All person/profile information defined for the manager of the performer's home OU
The namespaces below must be enclosed in hash marks (#) when used in emails, but entered without the hash marks when used in expressions. A complete list of person-type namespaces is listed in the Person-Based Namespaces.
#Performer.PersonTypeElement# #Performer.Supervisor.PersonTypeElement# #Performer.HomeOU.Name# #Performer.HomeOU.OrganizationalUnitID# #Performer.HomeOU.OrganizationalUnitTypeID# #Performer.HomeOU.CostCenterCode# #Performer.HomeOU.Manager.PersonTypeElement#
PeformerQueue Namespaces
Performer Queue namespaces provide information about the queue to which a review, authorization, or task was assigned. A subset of the Person-based namespace elements and properties are meaningful—those which are exposed in the user interface for maintaining queues in Organization Designer.
#PerformerQueue.FirstName# #PerformerQueue.LastName# #PerformerQueue.TimeZoneID# #PerformerQueue.Email# #PerformerQueue.WorkPhone# #PerformerQueue.HomePhone# #PerformerQueue.Fax# #PerformerQueue.Mobile# #PerformerQueue.Pager# #PerformerQueue.TimeZone# #PerformerQueue.HomeOU.Name# #PerformerQueue.HomeOU.OrganizationalUnitID# #PerformerQueue.HomeOU.OrganizationalUnitTypeID# #PerformerQueue.HomeOU.CostCenterCode# #PerformerQueue.HomeOU.ParentOU.Name# #PerformerQueue.HomeOU.ParentOU.OrganizationalUnitID# #PerformerQueue.HomeOU.ParentOU.OrganizationalUnitTypeID# #PerformerQueue.HomeOU.ParentOU.CostCenterCode# #PerformerQueue.HomeOU.Manager.PersonTypeElement#
Initiator Namespaces
The initiator is the person who orders a service.
Initiator namespaces allow access to initiator information, including:
- Initiator (person) information as defined in the person's profile and accessible via Organization Designer > People
- All person/profile information defined for the initiator's supervisor
- Information about the home Organizational Unit of the initiator
- All person/profile information defined for the manager of the initiator's home OU
The namespaces below must be enclosed in hash marks (#) when used in emails, but entered without the hash marks when used in expressions. A complete list of person-type namespaces is listed in the Person-Based Namespaces.
#Initiator.PersonTypeElement# #Initiator.Supervisor.PersonTypeElement# #Initiator.HomeOU.Name# #Initiator.HomeOU.OrganizationalUnitID# #Initiator.HomeOU.OrganizationalUnitTypeID# #Initiator.HomeOU.CostCenterCode# #Initiator.HomeOU.Manager.PersonTypeElement# #Initiator.HomeOU.ParentOU.Name# #Initiator.HomeOU.ParentOU.OrganizationalUnitID# #Initiator.HomeOU.ParentOU.OrganizationalUnitTypeID# #Initiator.HomeOU.ParentOU.CostCenterCode#
Functional Positions
Functional positions allow you to access the Person information for individuals who have been assigned to these positions. You can access this information both for the default functional positions, and for those that have been configured for a particular implementation.
Functional positions are defined through the module selection Organization Designer > Functional Positions. Each functional position is associated with a particular entity—this may be a service, a service group, or an organizational unit.
Once the position has been defined, you may assign a person to the position through the Positions page for the organizational unit, or on the General tab for the service or service group. Some sample usages include:
Use Requisition.Customer.HomeOU.BudgetManager.Email to access the email address of the Budget Manager of the customer’s home organizational unit.
Use Performer.HomeOU.ParentOU.Manager.FirstName to access the first name of the Manager of the parent organizational unit of the task performer’s home organizational unit.
Default functional positions may have spaces in the position name, for example, “Budget Manager”. The space is omitted with the functional position is used within a namespace reference.
User-specified functional positions may not include spaces. The namespace reference must prefix the functional position with the keyword “Position” as in the following example:
#Service.ServiceDefinition.Position.EscalationManager.Email#
For all of the functional positions, you have access to all the variables defined in the Person table above. If no person variable is included, the expression returns the person’s database ID.
You can access information about Home OU, Parent OU, or Client OU functional positions from any person role that you can access in either the Requisition or the Service context. Information about Service and Service Group functional positions is only available in the Service context.
When using these expressions to include dynamic data in emails and task names, you must add the pound separator (‘#’) at the beginning and end of the expression, for example:
#Customer.HomeOU.Manager.Email#
Namespace Variables for Bundled Services
Namespace is a term used to describe a set of valid names that address the data objects used within Service Catalog, exposing these objects to service designers. This allows designers to use these elements in these contexts:
- Within an email, to dynamically resolve the recipient, subject, or references within the email body
- To conditionally execute reviews, authorizations, or tasks in a delivery plan
- In expressions which determine the person or queue to which an authorization or delivery task is assigned
- In task names
Namespaces are hierarchical. Namespace names reflect the structure of the data which defines a service, and the data entered on the service form when that service is requested. The key to manipulating namespace variables is knowledge of the hierarchy which defines Service Catalog data and the contexts in which particular Namespace variables can be used.
Each element in the hierarchy is case-insensitive. The elements are separated by periods ("."). The last element may also be referred to as a "property". All elements before the last one are "nodes" in the hierarchy.
The system provides a number of namespace variables that you can use when working with data in bundled services.
Namespace Variable |
Data Type |
Purpose/Usage |
---|---|---|
Service.Bundled |
Boolean |
True for a requisition entry if the service is a child on a bundle. |
Service.IsBundle |
Boolean |
True for a requisition entry if the service is itself a bundle. |
Service.BundledServices |
Numeric |
Indicates the number of child services belonging to a parent. |
Requisition.Services |
Numeric |
Indicates the number of services in a requisition. |
ParentService.Data.DictionaryName.FieldName |
|
Syntax for referring to a data element within a bundle. |
- If the value of the site configuration parameter ShowBundleData is On, ParentService.Data.DictionaryName.FieldName is equivalent to: Data.DictionaryName.FieldName .
- If the value of ShowBundleData is Off, ParentService.Data.DictionaryName.FieldName is the required syntax for referring to data elements in the parent service.
Lightweight Namespaces
Active form rules need the equivalent of namespaces in order to dynamically access field values to be used or evaluated. For example, the service may need to display an additional dictionary or field if the user entered “Other” in a previous field; the current customer's organization may need to be used as the criteria for building a drop-down list to display valid locations for a service delivery; default values need to be provided for customer and initiator data.
Lightweight namespaces provide these capabilities. They are “lightweight” since only the information accessible to the form (not, for example, details about the service's delivery plan or task performers) can be used within the rules.
Any forms that include person-based dictionaries use lightweight namespaces to provide the values to the form fields, based on corresponding values in fields stored in the profile for the selected person. This includes both the Customer-Initiator form and any user-defined forms. Lightweight namespaces have the format #Customer.FieldName#, or #Initiator.FieldName#.
Note | The use of grid dictionary fields for lightweight namespaces is not supported. |
The namespace is automatically supplied as the Default Value for the field. If desired, the initial assignments can be replaced.
Lightweight namespaces referring to customer or initiator data can also be used as default values for fields in dictionaries that are not person-based. In this case the service designer will, of course, be responsible for mapping from the dictionary field to the appropriate person attribute. This capability allows you to define dictionaries that contain both person-based and other data.
Customer-Based Namespaces
Customer-based namespaces used for the Customer Information reserved dictionary are summarized below.
Dictionary Field Name |
Field Type |
Lightweight Namespace |
---|---|---|
First_Name |
Text |
#Customer.FirstName# |
Last_Name |
Text |
#Customer.LastName# |
Login_ID |
Text |
#Customer.LoginID# |
Person_ID |
Number |
#Customer.PersonID# |
Personal_Identification |
Text |
#Customer.PersonIdentification# |
Email_Address |
Text |
#Customer.Email# |
Home_Organizational_Unit |
Text |
#Customer.HomeOU.Name# |
Title |
Text |
#Customer.Title# |
Social_Security_Number |
Text |
#Customer.SSN# |
Birthdate |
Date |
#Customer.Birthdate# |
Hiredate |
Date |
#Customer.Hiredate# |
Timezone |
Text |
#Customer.TimeZoneID# |
Locale |
Text |
#Customer.LocaleID# |
Supervisor |
Text |
#Customer.Supervisor.Name# |
Employee_Code |
Text |
#Customer.EmployeeCode# |
Supervisor_Email |
Text |
#Customer.Supervisor.Email# |
Supervisor_ID |
Number |
#Customer.Supervisor.PersonID# |
Supervisor_Phone |
Text |
#Customer.Supervisor.Phone# |
Notes |
Text |
#Customer.Notes# |
Company_Street_1 |
Text |
#Customer.DetailedCompanyAddress.Street1# |
Company_Street_2 |
Text |
#Customer.DetailedCompanyAddress.Street2# |
Company_City |
Text |
#Customer.DetailedCompanyAddress.City# |
Company_State |
Text |
#Customer.DetailedCompanyAddress.StateProvince# |
Company_Country |
Text |
#Customer.DetailedCompanyAddress.Country# |
Company_Postal_Code |
Text |
#Customer.DetailedCompanyAddress.Zip# |
Building |
Text |
#Customer.DetailedLocation.Building# |
Level |
Text |
#Customer.DetailedLocation.BuildingLevel# |
Office |
Text |
#Customer.DetailedLocation.Office# |
Cubicle |
Text |
#Customer.DetailedLocation.Cubicle# |
Personal_Street_1 |
Text |
#Customer.DetailedPersonalAddress.Street1# |
Personal_Street2 |
Text |
#Customer.DetailedPersonalAddress.Street2# |
Personal_City |
Text |
#Customer.DetailedPersonalAddress.City# |
Personal_State |
Text |
#Customer.DetailedPersonalAddress.StateProvince# |
Personal_Country |
Text |
#Customer.DetailedPersonalAddress.Country# |
Personal_Postal_Code |
Text |
#Customer.DetailedPersonalAddress.Zip# |
Work_Phone |
Text |
#Customer.WorkPhone# |
Home_Phone |
Text |
#Customer.HomePhone# |
Fax |
Text |
#Customer.Fax# |
Mobile_Phone |
Text |
#Customer.Mobile# |
Pager |
Text |
#Customer.Pager# |
Other |
Text |
#Customer.OtherPhone# |
Main_Phone |
Text |
#Customer.MainPhone# |
Primary_Phone |
Text |
#Customer.PrimaryPhone# |
Primary_Fax |
Text |
#Customer.PrimaryFax# |
Sales_Phone |
Text |
#Customer.SalesPhone# |
Support_Phone |
Text |
#Customer.SupportPhone# |
Billing_Phone |
Text |
#Customer.BillingPhone# |
Other_Contact_Information |
Text |
#Customer.OtherContactInfo# |
Company_Code |
Text |
#Customer.CompanyCode# |
Division |
Text |
#Customer.Division# |
Business_Unit |
Text |
#Customer.BusinessUnit# |
Department_Number |
Text |
#Customer.DepartmentNumber# |
Cost_Center |
Text |
#Customer.CostCenter# |
Management_Level |
Text |
#Customer.ManagementLevel# |
Region |
Text |
#Customer.Region# |
Employee_Type |
Text |
#Customer.EmployeeType# |
Custom_1 |
Text |
#Customer.Custom1# |
Location_Code |
Text |
#Customer.LocationCode# |
Custom_2 |
Text |
#Customer.Custom2# |
Custom_3 |
Text |
#Customer.Custom3# |
Custom_4 |
Text |
#Customer.Custom4# |
Custom_5 |
Text |
#Customer.Custom5# |
Custom_6 |
Text |
#Customer.Custom6# |
Custom_7 |
Text |
#Customer.Custom7# |
Custom_8 |
Text |
#Customer.Custom8# |
Custom_9 |
Text |
#Customer.Custom9# |
Custom_10 |
Text |
#Customer.Custom10# |
Initiator-Based Namespaces
Initiator-based namespaces used for the Initiator Information reserved dictionary are summarized below.
Dictionary Field Name |
Field Type |
Lightweight Namespace |
---|---|---|
First_Name |
Text |
#Initiator.FirstName# |
Last_Name |
Text |
#Initiator.LastName# |
Login_ID |
Text |
#Initiator.LoginID# |
Person_ID |
Number |
#Initiator.PersonID# |
Email_Address |
Text |
#Initiator.Email# |
Personal_Identification |
Text |
#Initiator.PersonIdentification# |
Home_Organizational_Unit |
Text |
#Initiator.HomeOU.Name# |
Title |
Text |
#Initiator.Title# |
Social_Security_Number |
Text |
#Initiator.SSN# |
Birthdate |
Date |
#Initiator.Birthdate# |
Hiredate |
Date |
#Initiator.Hiredate# |
Timezone |
Text |
#Initiator.TimeZoneID# |
Locale |
Text |
#Initiator.LocaleID# |
Employee_Code |
Text |
#Initiator.EmployeeCode# |
Supervisor |
Text |
#Initiator.Supervisor.Name# |
Supervisor_ID |
Number |
#Initiator.Supervisor.ID# |
Supervisor_Phone |
Text |
#Initiator.Supervisor.Phone# |
Supervisor_Email |
Text |
#Initiator.Supervisor.Email# |
Notes |
Text |
#Initiator.Notes# |
Company_Street_1 |
Text |
#Initiator.DetailedCompanyAddress.Street1# |
Company_Street_2 |
Text |
#Initiator.DetailedCompanyAddress.Street2# |
Company_City |
Text |
#Initiator.DetailedCompanyAddress.City# |
Company_State |
Text |
#Initiator.DetailedCompanyAddress.StateProvince# |
Company_Country |
Text |
#Initiator.DetailedCompanyAddress.Country# |
Company_Postal_Code |
Text |
#Initiator.DetailedCompanyAddress.Zip# |
Building |
Text |
#Initiator.DetailedLocation.Building# |
Level |
Text |
#Initiator.DetailedLocation.BuildingLevel# |
Office |
Text |
#Initiator.DetailedLocation.Office# |
Cubicle |
Text |
#Initiator.DetailedLocation.Cubicle# |
Personal_Street_1 |
Text |
#Initiator.DetailedPersonalAddress.Street1# |
Personal_Street2 |
Text |
#Initiator.DetailedPersonalAddress.Street2# |
Personal_City |
Text |
#Initiator.DetailedPersonalAddress.City# |
Personal_State |
Text |
#Initiator.DetailedPersonalAddress.StateProvince# |
Personal_Country |
Text |
#Initiator.DetailedPersonalAddress.Country# |
Personal_Postal_Code |
Text |
#Initiator.DetailedPersonalAddress.Zip# |
Work_Phone |
Text |
#Initiator.WorkPhone# |
Home_Phone |
Text |
#Initiator.HomePhone# |
Fax |
Text |
#Initiator.Fax# |
Mobile_Phone |
Text |
#Initiator.Mobile# |
Pager |
Text |
#Initiator.Pager# |
Other |
Text |
#Initiator.OtherPhone# |
Main_Phone |
Text |
#Initiator.MainPhone# |
Primary_Phone |
Text |
#Initiator.PrimaryPhone# |
Primary_Fax |
Text |
#Initiator.PrimaryFax# |
Sales_Phone |
Text |
#Initiator.SalesPhone# |
Support_Phone |
Text |
#Initiator.SupportPhone# |
Billing_Phone |
Text |
#Initiator.BillingPhone# |
Other_Contact_Information |
Text |
#Initiator.OtherContactInfo# |
Company_Code |
Text |
#Initiator.CompanyCode# |
Division |
Text |
#Initiator.Division# |
Business_Unit |
Text |
#Initiator.BusinessUnit# |
Department_Number |
Text |
#Initiator.DepartmentNumber# |
Cost_Center |
Text |
#Initiator.CostCenter# |
Management_Level |
Text |
#Initiator.ManagementLevel# |
Region |
Text |
#Initiator.Region# |
Employee_Type |
Text |
#Initiator.EmployeeType# |
Location_Code |
Text |
#Initiator.LocationCode# |
Custom_1 |
Text |
#Initiator.Custom1# |
Custom_2 |
Text |
#Initiator.Custom2# |
Custom_3 |
Text |
#Initiator.Custom3# |
Custom_4 |
Text |
#Initiator.Custom4# |
Custom_5 |
Text |
#Initiator.Custom5# |
Custom_6 |
Text |
#Initiator.Custom6# |
Custom_7 |
Text |
#Initiator.Custom7# |
Custom_8 |
Text |
#Initiator.Custom8# |
Custom_9 |
Text |
#Initiator.Custom9# |
Custom_10 |
Text |
#Initiator.Custom10# |
Process Namespaces
Process namespaces are available only for use in emails. They cannot be used in conditions. The Process object includes all namespaces regarding the Customer and Requisition. The Process refers to the current task.
#Process.Name# #Process.Status# #Process.StatusID# #Process.StartedOn# #Process.CompletedOn# #Process.ExpectedDuration# #Process.ActualDuration# #Process.CostCenterID# #Process.DueOn# #Process.EscalationLevel# #Process.TicketID# #Process.TicketObjectID# #Process.DueOnTZ# #Process.StartedOnTZ# #Process.DateNow# -- the current date and time in GMT #Process.Customer.*# -- any Customer element #Process.Requisition.*# -- any Requisition element
Requisition Namespaces
#Requisition.URL# #Requisition.ProcessTrackingID# #Requisition.ExpectedDuration# #Requisition.StartedDate# #Requisition.ActualCost# #Requisition.ExpectedCost# #Requisition.RequisitionID# #Requisition.Name# #Requisition.Services# -- The number of requisition entries in the requisition #Requisition.Customer.*# -- Any Customer element #Requisition.ClientOU.*# -- Any ClientOU element #Requisition.Initiator.*# -- Any Initiator element
Message Namespaces
Message namespaces are available only for use in emails generated as a result of a failed Service Link task. They cannot be used in any other emails or in any conditions. The Message elements may be helpful in diagnosing the Service Link failure, and may eliminate having to consult the log files for diagnostics.
##Message.ExternalContent# -- Co
Type |
Description and Active Form Implications |
---|---|
Text |
Default data type, supports alphanumeric data; should be used for fields to be rendered as single- and multi-line text. |
Number |
Data type for all numbers, including integers and whole numbers; it is critical to specify the precision in the Decimals column, as the application will validate decimal precision as well as length. |
Account |
Documentation only; data treated as alphanumeric. |
Date |
Data compatible with the database's native datetime type, but display restricted to the date; calendar widget supplied for data entry. |
Boolean |
Data object whose possible values are “true” and “false”, presented as “Yes” and “No”. |
Phone |
Documentation only; data treated as alphanumeric. |
SSN |
Documentation only; data treated as alphanumeric. |
Money |
Data validated to contain only a valid number; monetary symbols or commas cannot be typed; accepts numerical characters and up to 3 decimal places. |
Person |
Data validated against a person ID in the personnel profiles; a Person Search dialog box is available via a “Search” button automatically rendered on the service form. The Person data type is provided primarily for backward compatibility; if this capability is required, a person-based dictionary should be created. |
URL |
Data stored as alphanumeric; a saved value is represented both as text and as an HTML representation of the value, providing a link to the specified URL. |
Date and Time |
Data stored as a date and time; calendar widget supplied for data entry contains a time-selection widget. |