Welcome to TechNet Blogs Sign in | Join | Help

SCSM Engineering Team Blog

No fluffy stuff. Just cool tech stuff for geeks like us.
Overview of the Forms Infrastructure and the Generic Form

This blog post is intended for developers and people doing advanced customizations in Service Manager.

An earlier blog post illustrated how to use the <Form> element in Service Manager's management pack infrastructure to create rich, custom forms for classes and relationships in the CMDB. Custom forms offer complete flexibility in displaying class and relationship information to end users, and they are well-suited to displaying data that spans multiple classes and relationships or requires unique UI elements.

When the data that needs to be displayed originates in an object of one class, presenting an editable table of property-value pairs is often sufficient. To prevent customers from having to develop these simple forms for each class added to a Service Manager installation, Service Manager ships with a Generic Form that renders a property-value display for any class that does not already appear in a custom form.

This blog post will provide background on the forms infrastructure used in our product and the options available to customize the Generic Form.

Part 1: Understanding the forms infrastructure

Let's take a look at the <Form> element tag in the ServiceManager.ConfigurationManagement.Library management pack that causes the computer form to display for computer objects in the console.

<Form TypeName="Microsoft.EnterpriseManagement.ServiceManager.ConfigurationManagement.Forms.ComputerForm" Target="Microsoft.Windows.Computer.ProjectionType" ID="ComputerForm" Assembly="ConfigurationManagementFormsAssembly" Accessibility="Public">

Each attribute in the Form tag indicates the following:

Attribute

Description

TypeName

The qualified name of the .NET Class that contains the form code.

Target

The class (<ClassType>) or type projection (<TypeProjection>) for which the form should display.

ID

A unique identifier for the form element.

Assembly

A reference to an <Assembly> MP element that points to the DLL containing the form code. The Assembly element is defined in the <Resources> section of an MP.

 

The Assembly element for this form is:

 

 <Assembly ID="ConfigurationManagementFormsAssembly" QualifiedName="Microsoft.EnterpriseManagement.ServiceManager.ConfigurationManagement.Forms" FileName="Microsoft.EnterpriseManagement.ServiceManager.ConfigurationManagement.Forms.dll" Accessibility="Public" />

Accessibility

The accessibility of the form element, set to "Public" here so that this Form element can be referenced by other MPs.

The Target attribute of the form tag links the form to a class or a type projection. When the user selects the "Create" task associated with a view or the "Edit" task associated with an object or object projection, the class to be created or edited is determined. Our UI code then looks for a form that is either (1) targeted to that class or (2) targeted to a type projection that has a seed that is that class. If a form is found, it is displayed. If a form is not found, the check is repeated on each of the parent classes until a form is found.

This logic is summarized in the Figure 1 below:

 

 

GenericForm_Figure1_FormSelection 

Figure 1: Form selection process

 

Note that a form is designated to appear in one of two modes:

1. Pop-out mode, the default, indicates that the form will surface when the "Create" task or the "Edit" task is clicked.

2. Preview mode, which is enabled by adding a category with a special enumeration value and targeting it to the form, indicates that the form will display in the details pane when an item in a grid view is selected.

The search that is performed to find a form for a given object (as depicted in Figure 1) is limited to forms in the desired display mode. For example, when a grid view item is selected, it is determined that a form in preview mode is needed and a search for a form is performed using only the set of forms categorized as preview forms.

The enumeration value used to demarcate a preview form resides in the Microsoft.EnterpriseManagement.ServiceManager.UI.Console management pack. The following category definition, for example, would mark the form named "ClassForm" as a preview form.

<Category ID="someuniqueID" Target="ClassForm" Value="Console!Microsoft.EnterpriseManagement.ServiceManager.UI.Console.OverviewForm" />

Preview and pop-out forms will always be found for a given class because preview and pop-out versions of the Generic Form are targeted to System.Entity, the root class in Service Manager's class model.

Part 2: The Generic Form

The Generic Form is a WPF UserControl that consists of up to three tabs:

1. A General tab displays all of the properties of the object that serves as the form's data context. If the data that underlies the form is a projection object, properties are displayed for the seed class object in that projection. Properties in the tab are grouped under their respective classes starting from the top of the class hierarchy (System.Entity) and moving down.

When the object displayed in the form inherits from System.ConfigItem or System.WorkItem:

2. A Related Items tab presents an updatable display of objects related to the object, and

3. A History tab chronicles the changes that have been made to properties on the object and the object’s relationships to other objects.

There are two display modes for the Generic Form. The Generic Preview Form displays property information for the currently selected object in a grid view. Alternatively, the Generic Pop-Out Form displays property information when a class object or projection object is displayed within a form window. These two display modes are juxtaposed below (click to enlarge):

 

GenericForm_Figure2_PreviewLeft GenericForm_Figure2_EditRight

Figure 2: Generic Form displaying a Software Item object in preview mode (left) and pop-out mode (right)

 

Note that in preview mode, no related items tab or history tab is shown, and the properties in the form are not editable.

The Generic Form appears in four management pack form element (i.e.: <Form> tag) definitions. A preview form and a pop-out form are targeted to the System.Entity base class, one pop-out form is targeted to a type projection with seed class System.ConfigItem, and one pop-out form is targeted to a type projection with seed class System.WorkItem. The pop-out form definitions targeted to the Configuration Item and Work Item type projections are used to populate the Related Items Tab with a standard set of related objects on Configuration Item and Work Item classes.

This is summarized in Figure 3 below.

 

GenericForm_Figure3_GenericFormMPElements

Figure 3: Occurrence of Generic Form <Form> elements in the class model

 

Part 3: The Extension Tab

When a pop-out form is displayed in a form window using the Create task or the Edit task, a check is made to determine:

1. The class of the object being displayed, and

2. The class to which the form that is being displayed is targeted.

These classes can differ if the form that was selected to display an object is targeted to one of the parent classes of that object (e.g.: displaying an object of a class derived from Change Request in the Change Request form).

If the form that is being displayed is a custom form and is not the Generic Form (which, by default, displays all of an object's properties in the General tab), and classes 1 and 2 differ, an Extension tab is added to the custom form. This tab displays property-value pairs for all classes in the object's class hierarchy that inherit from the form's target class.

The tab also displays (again, only for custom forms) all of the properties of any extension classes in the class hierarchy of the object. These properties are grouped under the extended class.

Suppose, for example, that a sealed MP were imported with class definitions below:

<ClassTypes>

  <ClassType ID="Incident_Extension" Base="CoreIncident!System.WorkItem.Incident" Abstract="false" Accessibility="Public" Hosted="false" Extension="true">

    <Property ID="incident_extension_1" Type="string" />

    <Property ID="incident_extension_2" Type="string" />

    <Property ID="incident_extension_3" Type="string" />

  </ClassType>

  <ClassType ID="Incident_Derived" Base="CoreIncident!System.WorkItem.Incident" Abstract="false" Accessibility="Public" Hosted="false" Extension="false">

    <Property ID="incident_derived_1" Type="string" />

    <Property ID="incident_derived_2" Type="string" />

  </ClassType>

</ClassTypes>

These definitions extend the System.WorkItem.Incident class with 3 string properties and add a class that derives from System.WorkItem.Incident with 2 string properties.

If a view were created on the Incident_Derived class and the user attempted to create a new Incident_Derived object using the Create task that appears for the view, the user would see the form in Figure 4 below (click to enlarge):

 GenericForm_Figure4_IncidentLeft GenericForm_Figure4_ExtensionRight

Figure 4: Generic Form displaying an Incident_Derived object with the extension tab. Extension properties and derived class properties appear in the extension tab.

 

Since any extension properties of an object are shown in the Extension tab, the Incident_Extension properties are shown in the Extension tab. The Incident_Derived properties also appear in the extension tab because the Incident form is targeted to System.WorkItem.Incident and the object being displayed is of the derived class Incident_Derived.

Below, Figure 5 displays all of the classes (in hierarchical order) of which the Incident_Derived object is a member. Our console assumes that only the non-extension properties that appear in the Incident Form's target class (System.WorkItem.Incident) hierarchy will be displayed in the custom form. Since extension classes and derived classes outside this hierarchy have properties which may not be displayed in the form, the extension tab is added to display the properties of these extended and derived classes.

 

GenericForm_Figure5_IncidentHierarchy

Figure 5: The properties in the blue classes are assumed to be present in the Incident custom form. Properties in the derived class (red) and the extension class (teal) are added to the extension tab.

 

To prevent the extension tab from displaying on a form, MP authors can target a category to the form with an Enumeration value in the Microsoft.EnterpriseManagement.ServiceManager.UI.Administration MP:

<EnumerationValue ID="Microsoft.EnterpriseManagement.ServiceManager.UI.Administration.Enumeration.HideExtensionTab" Accessibility="Public" />

For example, to prevent the extension tab from displaying in the Incident form in the example above, the following MP could be imported:

 <ManagementPack ContentReadable="true" SchemaVersion="1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <Manifest>

    <Identity>

      <ID>hidetest</ID>

      <Version>7.0.5000.0</Version>

    </Identity>

    <Name>hidetest</Name>

    <References>

      <Reference Alias="Admin">

<ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Administration</ID>

        <Version>7.0.5000.0</Version>

        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>

      </Reference>

      <Reference Alias="Incident">

        <ID>ServiceManager.IncidentManagement.Library</ID>

        <Version>7.0.5010.0</Version>

        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>

      </Reference>

    </References>

  </Manifest>

  <Categories>

    <Category ID="HideIncidentFormExtensionTab" Target="Incident!System.WorkItem.Incident.ConsoleForm" Value="Admin!Microsoft.EnterpriseManagement.ServiceManager.UI.Administration.Enumeration.HideExtensionTab" />

  </Categories>

</ManagementPack>

 

Part 4: Additional Generic Form Customizations

1. Disabling the preview pane for a class (and its descendants)

To disable the preview form for an object of a particular class, target a category with the enumeration value

<EnumerationValue ID="Microsoft.EnterpriseManagement.ServiceManager.UI.Administration.Enumeration.HideDetailsPane" Accessibility="Public" />

(which appears in the Microsoft.EnterpriseManagement.ServiceManager.UI.Administration MP) to the class (not the form) for which the preview pane should not be displayed.

For example, to prevent the Generic Form preview pane (targeted to System.Entity) from appearing when a connector is selected in the grid view under Administration > Connectors, we use the following category:

<Category ID="Microsoft.EnterpriseManagement.ServiceManager.UI.Administration.ConnectorHideDetails" Target="SystemCenter!Microsoft.SystemCenter.Connector" Value="Microsoft.EnterpriseManagement.ServiceManager.UI.Administration.Enumeration.HideDetailsPane" />

2. Hiding properties in the Generic Form in Preview and Edit Modes

To remove properties that appear in the preview and pop-out versions of the Generic Form, two view types defined in the Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring MP are used. The PreviewViewType excludes properties that appear in the preview version of the form while the EditViewType excludes properties that appear in the pop-out version of the Generic Form.

To hide properties in either form mode, an MP author creates a view based on the desired view type in an MP and targets it to the class that contains the properties that should be removed. The configuration supplied to the view specifies the classes for which the properties should not appear and the names of the properties that should not appear. If no target classes are specified, it is assumed that the properties on the target class should be excluded whenever they are displayed (i.e.: for a Generic Form displayed with any class object).

In our console, we use the following view definition to exclude properties of the System.User class in the Generic Preview Form when displaying objects of AD User Groups:

<View ID="UserPreviewExclusionRule" Accessibility="Public" Enabled="true" Target="System!System.User" TypeID="Authoring!PreviewViewType" Visible="true">

        <Category>NotUsed</Category>

        <Configuration>

          <TargetClassList>

            <TargetClass>Microsoft.AD.Group</TargetClass>

          </TargetClassList>

          <PropertyExcludeList>

            <Property>FirstName</Property>

            <Property>Initials</Property>

            <Property>LastName</Property>

            <Property>Company</Property>

            <Property>Department</Property>

            <Property>Office</Property>

            <Property>Title</Property>

            <Property>EmployeeId</Property>

            <Property>StreetAddress</Property>

            <Property>City</Property>

            <Property>State</Property>

            <Property>Zip</Property>

            <Property>Country</Property>

            <Property>BusinessPhone</Property>

            <Property>BusinessPhone2</Property>

            <Property>HomePhone</Property>

            <Property>HomePhone2</Property>

            <Property>Fax</Property>

            <Property>Mobile</Property>

            <Property>Pager</Property>

          </PropertyExcludeList>

        </Configuration>

      </View>

 

We use the view definition below to prevent the ObjectStatus property from appearing on the pop-out Generic Form for Configuration Items. If this view definition were not present, users would be able to change the status of a Configuration Item in the forms that appear for Software, Software Updates, and Printers (we use the Generic Form for those classes).

 <View ID="ConfigItemExclusionRule" Accessibility="Public" Enabled="true" Target="System!System.ConfigItem" TypeID="Authoring!EditViewType" Visible="true">

        <Category>NotUsed</Category>

        <Configuration>

          <PropertyExcludeList>

            <Property>ObjectStatus</Property>

          </PropertyExcludeList>

        </Configuration>

     </View>

Note that, here, the list of TargetClasses is omitted from the view configuration. As a result, the ObjectStatus property will be excluded whenever the pop-out Generic Form appears for a Configuration Item object.

Savision Live Maps Integration With Service Manager

This is another guest blog post from one of our partners.  Dennis Rietvink is one of the founders of Savision which is a long time partner of System Center Operations Manager.  Dennis used the information provided in these blog posts to create a custom administration setting, task handlers, and console tasks to enable this integration scenario between Service Manager and their product Live Maps for Operations Manager 2007.   IT analysts using the Service Manager console to resolve alerts from Operations Manager will be able to use the Live Maps to visualize the alert-generated incident in the context of a  map or other diagram.

Thanks for writing this up Dennis! I’ve always been a big fan of Live Maps and it’s great to see it being integrated with Service Manager in such a useful way!

=======================================================================================

Background

For those who don’t know our solution, Live Maps is a visualization add-on for System Center Operations Manager 2007. Live Maps allows users to simplify the complexity of their IT environment by creating custom (nested) health state aware maps in the context of their business. More information can be found here.  

Goal

We have been working with a number of Service Manager TAP customers that had a strong need for automatically generated information about the impact and cause of an incident. Service Manager already adds the affected Operation Manager objects to the incident but we wanted to take it one step further.

In case the affected objects are part of one or more views created with Live Maps, we wanted these dependencies to be available at the fingertips of the Service Manager console user. By a single click it should be clear which Live Maps the affected objects are on and allow the user to directly open the real-time Live Maps display.

Example Scenario

So let’s walk through a simple use case to explain the Live Maps integration in detail. In this scenario we have Operations Manager with Live Maps deployed and we have used Live Maps to model our business applications and to visualize our datacenter.  We have a business application named LOB 1 which contains database Corp App. Now the following happens:

  1. The database ‘Corp App’ is taken offline
  2. An alert is generated in Operations Manager
  3. The alert is picked up by the Alert connector in Service Manager and an incident is created
  4. The incident contains the affected database and its host 
  5. Now it gets exciting!  With the Live Maps integration for Service Manager, the user can launch the Show Affected Live Map task
  6. In this case the affected database is on the LOB 1 business application Live Map and the host of the affected database is on the Amsterdam datacenter Live Map
  7. By simply selecting the Live Map a real-time view is opened to the Live Maps display which gives the user contextual information combined with the latest health state. Additionally the user can diagnose and resolve the problem by opening one of the detailed Operation Manager views (Health explorer, performance view,…)

Implementation

For this integration we created two custom Task Handlers: 1) to configure the Live Maps web console URL setting which is exposed in the Administration\Settings area and 2) the Show Affected Live Map task which is targeted to the Incident class.

The console task management pack and the task handler assembly files behind this integration are stored in a single management pack bundle which makes it extremely easy to deploy because the task handler assembly will be automatically downloaded to the console computers from the management server. I can strongly advise other partners to take a good look at the extensibility features of Service Manager! In my humble opinion this level and ease of extensibility will be a major success factor for Service Manager. Great work!

Availability

The Live Maps integration for Service Manager will be part of the next Live Maps release which will be available at the Microsoft Management Summit next April. For more information feel free to send an email to info@savision.com.

Action Log, History, and Auditing in Service Manager

Common customer question:  “Can Service Manager audit changes to things?”  Usually when people ask about this they are looking for a historical view of

  • what changed on an object?
  • who changed it?
  • when did it change?

There are really three related things in this area that I want to discuss in a single post to point out the different purposes of each of these things.

Action Log

The Action Log is found at the bottom of the incident and problem work item forms.  This is where analysts can enter notes about what they have done on the incident or problem work item.  This is important when an incident or problem work item is being handed off from one shift to another or being routed/escalated to someone else to that the person taking over the incident or problem work item knows what has happened previously.  Some of the more important events in the lifecycle of an event are automatically added to the action log such as when an incident is assigned/reassigned, closed, or when console tasks such as Ping Computer are run the results can be automatically or on demand added to the action log with a click of a button.

Notice in the screenshot below how we capture the major events in the incident/problem lifecycle like:

  • Created: The original title of the incident is added to the action log at the time of creation.  The creator of the incident is also the Created By person for this action log entry and you can see the date/time the incident was created.
  • Assigned: We capture who assigned the incident to whom each time the incident is reassigned.
  • Analyst comments: Analysts can put any comment they like into the incident and can optionally choose to mark the comment ‘Private’ meaning that the end user can’t see that comment on the self-service portal.
  • Console tasks: when analysts run tasks like Ping Computer, Remote Desktop, or any other console tasks that produce output the output can be automatically logged to the action log.
  • Escalation: When an incident is escalated from one tier to another the information about which support group the incident is escalated to and a required comment from the analyst are recorded in the action log.
  • Resolution: When the incident is resolve the analyst must provide a resolution comment which is added to the action log.
  • Closure: When the incident is closed the analyst must provide a closure comment which is added to the action log.

Note: please ignore that the person in the created by column is always Administrator in this screenshot.  The reason is because I’m too lazy to actually log off and back on as different users to simulate real world usage.  The created by column is always populated by the user that makes the change.

image

 

History

For every object in the system we keep track of every property change and relationship add/remove, who made the changes, and when they were made.  You can see this information on the form of pretty much every object in the History tab.

image

This level of detail is useful for things like:

1) Find out who set the Impact to Low on the incident that caused the CEO to lose all the data on his hard drive. :)

2) Trying to figure out what configuration changes have happened (and when) for a particular computer changed as part of investigating an incident.

History is also what drives the subscription infrastructure but that is different set of blog posts for a different day. :)

 

Auditing

The action log and history will meet most customers requirements for an “audit trail”, but if you want to meet the true definition of auditing in a way that gets you respect from a Compliance Auditor, you’ll want to enable Auditing.  Some government, industry, and corporate regulations/policies require that access to systems be logged in such a way that is “tamper proof”.  There really isn’t a way for someone to delete or change the history information in the database unless they have access to the database, but in some cases you need to log auditable data in a place that even the database admins can’t touch it.  That’s where auditing comes in.

When you turn on auditing on the Data Access Service, every call to every API on the Data Access Service is logged – which API, who, when – into the Windows security event log.  You can then use System Center Operations Manager Audit Collection Service to collect all of those security events into the highly secure Audit Collection Service Database.  That will make your auditors happy!

This is an example event:

image

Since this feature is something not every customer is going to actually use, we don’t turn it on by default out of the box.  To turn it on, follow these instructions on each management server in your deployment (including the data warehouse management server):

  1. On the Start Menu, Open Local Security Policy, found under Administrative Tools
  2. Expand Local Policies and select Audit Policy
  3. Select "Audit object access"
  4. Right-click and Properties
  5. Enable "Success" and/or "Failure", depending on what you want to audit

A couple more notes on the auditing feature:

For users submitting tasks which run on the management server (including Windows Workflow Foundation workflow tasks), we audit: JobId, TaskId, TargetObjectId, whether the task requires encryption, every override and value applied (if any) and username and domain if an alternate account was provided for execution.

For ManagementPack change failures, including imports, updates and deletes, for security related failures we audit which management failed to be changedand what element triggered the failure. This can occur for users in an Author or Advanced Operator profile that try to perform management pack operations outside their class scope.

Finally, we audit additional information for user role related changes.

Creating Views That Use Related Property Criteria (Type Projections) : Software Views Example

Oftentimes when you are creating a new view for Service Manager you will want to use properties of related classes in your criteria.  Examples:

  • All the incidents assigned to a anybody that is in a particular office or department
  • All the computers that have a particular software title installed on them
  • All the change requests that have an active review activity

A Type Projection is a way to define a query that goes over multiple relationship types to bring together data from multiple classes as a single object.  For example, we have the Incident class.  It defines properties like Urgency, Impact, Priority, etc.  and it has relationships to other objects like User.  In fact Incident has multiple relationships to the User class – 1) Affected User, 2) Primary Owner, 3) Assigned To to name a few.  When a help desk analyst thinks of an Incident though he thinks of the Affected User as just being another “property” of the Incident.  Type Projections allow you to bring all of this data together as a single “object” that can be represented on a form.

You can create views which are based on a showing objects of a single class or based on a type projection.  If you use just a class you can only use properties of that class as criteria or display them as columns in the view.  If you use a type projection you can use related class properties in your criteria or as columns in the view.

Here is a great blog post that Patrik Sundqvist wrote up on creating views using type projections:

http://blogs.litware.se/?p=367

I’ve also created an example MP that shows you how to create new type projections (in case we didn’t provide the one you need out of the box) and then create views based on those type projections.  In this particular example, I had a customer ask me how to create a view of computers that had a particular software title installed on it.  Since we don’t provide a type projection out of the box for this I' created one for him and then created an example view.  Once the management pack containing the type projection is imported, he can now create additional software views using slightly different criteria using the console.

This is what a type projection looks like in the management pack:

<TypeProjection ID="Microsoft.Demo.ComputersHaveSoftware.ProjectionType" Accessibility="Public" Type="Windows!Microsoft.Windows.Computer">

        <Component Path="$Context/Path[Relationship='SoftwareLibrary!System.DeviceHasSoftwareItemInstalled']$" Alias="WindowsComputerHasSoftwareItem" />

</TypeProjection>

Once it is imported into Service Manager it is available for selection in all of the places where you can select a class or type projection such as the view creation dialog:

image

Here is where you can download the management pack example:

http://cid-17faa48294add53f.skydrive.live.com/self.aspx/.Public/Microsoft.Demo.SoftwareViews.xml

For more information on type projections including how to manipulate them using the SDK please see these blog posts on Jakub’s blog:

http://blogs.msdn.com/jakuboleksy/archive/2009/01/20/getting-started-with-type-projections.aspx

http://blogs.msdn.com/jakuboleksy/archive/2009/02/04/more-with-type-projections.aspx

http://blogs.msdn.com/jakuboleksy/archive/2009/03/04/getting-and-working-with-type-projections-basic.aspx

How to Target Knowledge Articles at Different Groups of Users

Anders Bengtsson, a System Center MVP, has done it again!  This time he wrote up a post on how to target knowledge articles at different groups of users.

Check it out!

http://contoso.se/blog/?p=1262

Thanks Anders!

E-mail user from Service Manager Console

I came across a number of requests for creating a task so that an analyst can e-mail the “affected user” directly from the console in the context of an incident.  This blog post demonstrates how easy it is do so.

You’ll need to be at least an Author or an Admin to create the task described in this post.

1.       Click on the Library workspace in the Service Manager console

2.       Select Tasks in the navigation pane

3.       Click Create Task in the Tasks Pane

4.       This should open up the Task Wizard

5.       First page is just brief overview

6.       In the second step you’ll need to enter the Task name, Description. Target Class and select an MP where you want the Task to be stored

a.       For the class name, select Incident from the class picker.  Now the task will only show up in context of an incident.

b.      For MP it is recommended that you store custom tasks in your own MP. This makes the tasks portable, i.e. all you need to do is import the MP in another environment to create the same task in that environment.

Task Wizard

7.       You can ignore the next page i.e. the Categories page, because in this case the task only makes sense when you select an incident

8.       For the command line page there are two sections:

a.       Full path to the command:  This is pretty straightforward, you just need to type in the full path to the IE browser “c:\Program Files (x86)\Internet Explorer\iexplore.exe”

b.      Parameters:  This gets tricky since this contains text and contextual parameters.  We need this string mailto:<usernmae>&subject=<Title>&body=<Descripton> with the <strings> replaced with contextual parameters.  Here is a step-step on how to do it

                                                              i.      In the Parameters’ box Type mailto:

                                                            ii.      Click on Insert Property.

1.       This should bring up a property picker.  On the left-nav pane, click on the expander before Incident

2.       This should show all the relationships on Incident

3.       Scroll down and select Affected User

4.       Now on the right half type user in the search box

5.       This should narrow down the list of properties

6.       select User Name

                                                          iii.      Type &subject=

                                                           iv.      Click on Insert Property.

1.       This time just type Title in search box on right

2.       Select Title

                                                             v.      Type &body=

                                                           vi.      Click on Insert Property.

1.       This time just type desc in search box on right

2.       Select Description

c.       You are almost done.  You should have something like this (you can copy and paste the text below if you wish):

mailto:$Context/Path[Relationship='System_WorkItem_Library!System.WorkItemAffectedUser' TypeConstraint='CustomSystem_Library!System.Domain.User']/Property[Type='CustomSystem_Library!System.Domain.User']/UserName$&subject=$Context/Property[Type='System_WorkItem_Library!System.WorkItem']/Title$&body=$Context/Property[Type='System_WorkItem_Library!System.WorkItem']/Description$

d.      Checking the box for Action Log, records that you actually launched the task

Property pickerCommand Line and Parameters

9.       Finish up the wizard and create the task

Now this task should appear whenever you select an incident. 

On clicking the task, browser should open up, but then it should open up your e-mail client with username as addressee, title of incident as the subject of email and description of incident as the body of the email.  Just one caveat, if the affected user, title or description is blank, the task form opens an input dialog as it’s expecting a value.

As always comments / suggestions welcome.

How to Target Announcements at Different Groups of Users

Anders Bengtsson, a System Center MVP, has written up a great blog post on how to target announcements at different groups of users.

Check it out!

http://contoso.se/blog/?p=1243

Getting a List of Connected Users

One of the questions I often get is “How can I tell which users are currently connected to the Service Manager Data Access Service?” or “How can I tell how many people are connected to Service Manager?”

We have a method on the Service Manager SDK which will tell you which users have a connection to the Service Manager Data Access Service called GetConnectedUsers().  This method will return a IList of user names.

To provide a handy tool for people and demonstrate how this works I’ve created a simple console application that basically connects to Service Manager, calls this method, and outputs the list of user names to the standard out:

EnterpriseManagementGroup emo = new EnterpriseManagementGroup(strManagementServer);

foreach (String strIUserName in emo.GetConnectedUserNames())

{

Console.WriteLine(strIUserName.ToString());

}

I added support for passing the server name you want to connect to as a parameter like this:

GetConnectedUsers.exe –Server myservername

If you don’t pass a –Server parameter it will assume that you want to connect to ‘localhost’.

I’ve put the tool and source code up on the SkyDrive:

http://cid-17faa48294add53f.skydrive.live.com/self.aspx/.Public/GetConnectedUsers.zip

 

Inserting links to Review/Manual Activities in notifications.

When a user receives a notification about a review or manual activity which needs their attention, they may be directed to the analyst portal for implementation. This post shows how to configure the link so that it takes users directly to the review or manual activity that needs their attention. In beta 2, this is only useful for manual activities, but the same that is shown below can be used for review activities in the RC builds.

Intention (design):

Hi <name>,

You have a manual activity assigned to you for implementation. Please go to the following link to see the manual activity: <link to the review activity which needs their approval>.

Thanks,

Implementation (when creating an email template in the SM console):

Notificaiton Template Main Page

Things to note about the picture above:

1. Target class should be “Manual Activity”

2. The management pack should be the management pack in which you want to store the changes.

Notificaiton Template config page

Things to note about the picture above:

1. The “Insert…” button should be used to add the dynamic properties (such as name, ID, etc…)

2. The {my_portal_server_name} is the server name and port such as Pluto-sm:81

3. The manually written link “https://{my_portal_server_name}/analyst/ManualActivityDetails.aspx?AID=” should be connected to the dynamic value (added by the insert button) “$Context/Property[Type=’WorkItem!System.WorkItem’]/Id$

Outcome (user receives an email):

image

How to Look Up the Management Group Name

Once you enter the management group name during set up you never see it again.  We really should be showing it on the title bar of the console, but until we get around to doing that here are a couple of ways you can look it up.

1) Use the ServiceManager or DWStagingAndConfig database and run the following query.  Keep in mind that the DW is a management group all by itself.

SELECT ManagementGroupName FROM __MOMManagementGroupInfo__

2) Look in the registry on a Service Manager or Data Warehouse management server.  Look for a key under this key:

HKEY_LOCAL_Machine\SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Server Management Groups

Yes, it’s under the Operations Manager key.  Remember that this is a common platform underlying multiple System Center products.

Understanding Lists/EnumerationValues: CI Status Example

List Items (also known as EnumerationValues) are the items that show up in many places in the forms in Service Manager – typically in a drop down control like this one:

image

In most cases you can modify the values that show up in these drop downs by going to the Library/Lists view in the main Service Manager console and using the editor like this:

image

In some cases though you need to add the values in management packs directly.  One example of this is when you need to create an entirely new list.  Another example is when you need to add values to the CI (or Asset) Status list.  We don’t expose that list in the Lists view in the main console so you can’t use the editor in that case.

The way this works is that there is a single “root” EnumerationValue in each list.  It has no Parent attribute.  That EnumerationValue never shows up in the UI anywhere.  It’s children (those EnumerationValue elements that have the parent pointing to it) are the first level items in the drop down.  In this example of CI Status, the root is and first level children are Deployed, Deployment Requested, etc.

This is an excerpt from the System.Library MP which contains the out of box EnumerationValue hierarchy for Asset/CI status:

<EnumerationValue ID="System.ConfigItem.AssetStatusEnum" Accessibility="Public" />

 

<EnumerationValue ID="System.ConfigItem.AssetStatusEnum.Undefined" Accessibility="Public" Parent="System.ConfigItem.AssetStatusEnum" />

<EnumerationValue ID="System.ConfigItem.AssetStatusEnum.PurchaseRequested" Accessibility="Public" Parent="System.ConfigItem.AssetStatusEnum" />

<EnumerationValue ID="System.ConfigItem.AssetStatusEnum.Purchased" Accessibility="Public" Parent="System.ConfigItem.AssetStatusEnum" />

<EnumerationValue ID="System.ConfigItem.AssetStatusEnum.DeploymentRequested" Accessibility="Public" Parent="System.ConfigItem.AssetStatusEnum" />

<EnumerationValue ID="System.ConfigItem.AssetStatusEnum.Deployed" Accessibility="Public" Parent="System.ConfigItem.AssetStatusEnum" />

<EnumerationValue ID="System.ConfigItem.AssetStatusEnum.Retired" Accessibility="Public" Parent="System.ConfigItem.AssetStatusEnum" />

<EnumerationValue ID="System.ConfigItem.AssetStatusEnum.Disposed" Accessibility="Public" Parent="System.ConfigItem.AssetStatusEnum" />

See how each of the first level children point to the “root” EnumerationValue by using the ID of the “root” in the Parent attribute?

 

Now, let’s take a look at how we can add to this list.  Note: Because the above EnumerationValues are in a sealed management pack (System.Library), you cannot edit them.  But – you can add on!

I’ve created a management pack to show how you can add EnumerationValues to existing lists:

<ManagementPack xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" ContentReadable="true" SchemaVersion="1.1" OriginalSchemaVersion="1.1">

  <Manifest>

    <Identity>

      <ID>Microsoft.Demo.CIStatus</ID>

      <Version>1.0.0.0</Version>

    </Identity>

    <Name>CI Status</Name>

    <References>     

      <Reference Alias="System">

        <ID>System.Library</ID>

        <Version>7.0.5244.0</Version>

        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>

      </Reference>

    </References>

  </Manifest>

  <TypeDefinitions>

    <EntityTypes>

    <EnumerationTypes>

      <EnumerationValue ID="System.ConfigItem.AssetStatusEnum.Received"

Accessibility="Public"

Parent="System!System.ConfigItem.AssetStatusEnum" />

      <EnumerationValue ID="System.ConfigItem.AssetStatusEnum.Purchased.New"

Accessibility="Public"

Parent="System!System.ConfigItem.AssetStatusEnum.Purchased" />

      <EnumerationValue ID="System.ConfigItem.AssetStatusEnum.Purchased.Used"

Accessibility="Public"

Parent="System!System.ConfigItem.AssetStatusEnum.Purchased" />

    </EnumerationTypes>

    </EntityTypes>

  </TypeDefinitions>

  <LanguagePacks>

    <LanguagePack ID="ENU" IsDefault="true">

      <DisplayStrings>

        <DisplayString ElementID="System.ConfigItem.AssetStatusEnum.Received">

          <Name>Received</Name>

        </DisplayString>

        <DisplayString ElementID="System.ConfigItem.AssetStatusEnum.Purchased.New">

          <Name>Purchased - New</Name>

        </DisplayString>

        <DisplayString ElementID="System.ConfigItem.AssetStatusEnum.Purchased.Used">

          <Name>Purchased - Used</Name>

        </DisplayString>

      </DisplayStrings>

    </LanguagePack>

  </LanguagePacks>

</ManagementPack>

 

Note the language pack section.  That’s what controls the display strings that are shown in the UI for each language.  For more information on localizing management pack content, please see this blog post:

http://blogs.technet.com/servicemanager/archive/2009/07/24/localizing-management-pack-content.aspx

Save this XML as a file called ‘Microsoft.Demo.CIStatus.xml’.

After we import the MP and close and reopen the console, we can see the new options in the Asset Status drop down.

image

The MP is also available here:

http://cid-17faa48294add53f.skydrive.live.com/self.aspx/.Public/CIStatus/Microsoft.Demo.CIStatus.xml

 

Debugging Custom Forms, Console Task Handlers, and Workflows

For those of you that are creating custom forms and custom task handlers as described in some of these previous posts…

Creating Custom Forms for Service Manager using Custom Controls: Service Request Example
Creating a Custom Administration Setting
How to Write a Custom Connector: CSV Connector Example

… Patrik Sundqvist has written a great blog post about how to use the debugger to investigate issues.  Check it out!

http://blogs.litware.se/?p=272

This same process should also work for debugging workflows, but in that case you will want to attach the debugger to the right monitoringhost.exe on the Service Manager management server.  Note – there can be more than one monitoringhost.exe process running at the same time – typically when the workflows are running in a different security context (i.e. user) so make sure you attach the debugger to the right one!

 Thanks Patrik!

System Center Service Manager - Tracking additional Incident information and displaying it on a customized Incident Form

When introducing Incident Management with System Center Service Manager into an organization, customers often want to extend the out of box functionality of Incidents.

A common extension is to add some additional information to be tracked with incidents, and customize the Incident form to display this information.

This video demonstrates how to extend the incident information stored in the CMDB with additional properties, and how to customize the Incident form in the Service Manager Authoring Tool via drag-and-drop to display the new information to Helpdesk analysts. No development required !

 

Get Microsoft Silverlight
Extending and Customizing Service Manager: End-to-end Scenario Demo

 

This video walks through a sample extension and customization scenario for Service Manager.

Specifically, we extend the Change Management process with a new type of Change Request and add automated activities to these CRs. To implement this new process, we touch on many customization and extensibility points such as extending lists, creating new views, templates, and console tasks, as well as customization of forms and creating new workflows for custom automation of the new process.

 

  Get Microsoft Silverlight

System Center Service Manager Demos

We are starting to pile up quite a few demo videos so I’m putting up this blog post as a directory to all of them.  I’ll add to this list as we post more demo videos.

Title URL

Extending Service Manager to Automate IT Processes – New User Provisioing

http://blogs.technet.com/servicemanager/archive/2009/12/17/demo-extending-service-manager-to-automate-it-processes.aspx
Managing Virtualization with System Center Service Manager http://blogs.technet.com/servicemanager/archive/2009/12/17/managing-virtualization-with-system-center-service-manager.aspx
Using SCSM, SCOM, SCVMM to Manage LOB Apps http://blogs.technet.com/servicemanager/archive/2009/11/26/teched-emea-2009-demo-of-using-scsm-scom-scvmm-to-manage-lob-apps.aspx
Compliance/Risk MP in Service Manager http://blogs.technet.com/servicemanager/archive/2009/11/25/teched-emea-2009-video-demo-of-compliance-risk-mp-in-service-manager.aspx
Managing Compliance with Service Manager http://blogs.technet.com/servicemanager/archive/2009/10/02/new-video-on-technet-edge-managing-compliance-with-service-manager.aspx
Managing Applications with Service Manager 2010 http://blogs.technet.com/servicemanager/archive/2009/09/23/technet-edge-new-video-demonstrating-managing-applications-with-service-manager-2010.aspx
Extending and Customizing Service Manager: End-to-end Scenario http://edge.technet.com/Media/Extending-and-Customizing-Service-Manager-End-to-end-Scenario-Demo/
Self-service Portal Part 1 http://blogs.technet.com/servicemanager/archive/2009/09/28/system-center-service-manager-2010-self-service-portal-feature-1-7.aspx
Self-service Portal Part 2 http://blogs.technet.com/servicemanager/archive/2009/09/28/system-center-service-manager-2010-self-service-portal-feature-2-7.aspx
Self-service Portal Part 3 http://blogs.technet.com/servicemanager/archive/2009/09/28/system-center-service-manager-2010-self-service-portal-feature-3-7.aspx
Self-service Portal Part 4 http://blogs.technet.com/servicemanager/archive/2009/09/29/system-center-service-manager-2010-self-service-portal-feature-4-7.aspx
Self-service Portal Part 5 http://blogs.technet.com/servicemanager/archive/2009/09/29/system-center-service-manager-2010-self-service-portal-feature-5-7.aspx
Self-service Portal Part 6 http://blogs.technet.com/servicemanager/archive/2009/09/29/system-center-service-manager-2010-self-service-portal-feature-6-7.aspx
Self-service Portal Part 7 http://blogs.technet.com/servicemanager/archive/2009/09/29/system-center-service-manager-2010-self-service-portal-feature-7-7.aspx
Service Manager Overview: “From Reactive to Proactive” by Maarten Goet, System Center MVP Part 1 http://www.myitforum.com/absolutevc/avc-view.aspx?videoid=1530&categoryid=
Service Manager Overview: “From Reactive to Proactive” by Maarten Goet, System Center MVP Part 2 http://www.myitforum.com/absolutevc/avc-view.aspx?videoid=1531&categoryid=
System Center Service Manager - Tracking additional Incident information and displaying it on a customized Incident Form http://blogs.technet.com/servicemanager/archive/2010/01/16/system-center-service-manager-tracking-additional-incident-information-and-displaying-it-on-a-customized-incident-form.aspx
Extending and Customizing Service Manager: End-to-end Scenario Demo http://blogs.technet.com/servicemanager/archive/2010/01/16/extending-and-customizing-service-manager-end-to-end-scenario-demo.aspx

I’ve also put almost all of the videos up on our SkyDrive so you can download them if you want to:

http://cid-17faa48294add53f.skydrive.live.com/browse.aspx/.Public/DemoVideos?view=details

If you have additional video links you want to add to the list, please leave them in the comments or send me a tweet @radtravis.

More Posts Next page »
Page view tracker