This is a simple trick that is a little hard to discover but can be very useful. Let’s say you are working an incident and you want to see the affected user’s configuration items (computers, etc.) or maybe you want to see if he currently has an other open active incidents that might be related to this one. Ideally this information would be no clicks or one click away. We didn’t get quite that close but with just two clicks you can get to that information and more. You can double click (click #1 – or does that count as two clicks? :-) ) on any user’s name in any user picker control on a form and it will bring up the user properties dialog. If you click on the Related Items tab (click #2) you can easily see all the other work items and configuration items related to that user.
Pratibha Mallya, one of the developers on the System Center Data Access Service team has just posted a new blog post on the System Center Platform Blog about how to use some of the more advanced capabilities of the ObjectQueryOptions class. This is useful information to know when you are getting large data sets and you want to retrieve the objects in batches, in a certain order, etc.
http://blogs.msdn.com/b/scplat/archive/2010/09/01/using-objectqueryoptions-configuring-object-retrieval-from-the-cmdb.aspx
Thanks Pratiha!
Adam Hall over on the Opalis blog has listed out the activities that will come in the upcoming SCSM Integration Pack in the 6.3 release of Opalis later this year.
As you can see below we have provided some generic activities that allow you to manipulate any kind of object in the model such as Create Object, Create Relationship, Get Object, Get Relationship, etc. and some activities which are specific to some of the solutions such as Create Incident with Template, Get Activity, Update Activity.
*Note that the information in this article is based on the Beta of this Integration Pack and is subject to change. This information will be refreshed when the Integration Pack is RTM.
The table below explains the Activities that are available with the new Opalis 6.3 Integration Pack for Service Manager.
Activity Description
Create Change With Template The Create Change from Template object is used to configure a change record, based on a selected template. The template must exist prior to using it in a Create Change policy.
Create Object The Create Object is used to create a new Service Manager record associated with a specified class. This activity includes support for incidents and changes.
Create Incident With Template The Create Incident with Template object is used to create a new Incident from an Incident Template. You have the option to overwrite Template values with existing Incident values or apply Template values.
Create Related Object The Create Related Object is used to create a new Service Manager object that is related to other existing objects, either by membership or by a hosted relationship.
Create Relationship The Create Relationship object is used to create a relationship between two existing entities. For example, you can create a one-to-many relationship between Incidents and Customers.
Delete Relationship The Delete Relationship object is used to remove an existing Relationship between two entities.
Get Activity The Get Activity object is used to query for activity records for the selected Activity Class.
Get Object The Get Object is used to query for a record based on a set of filter criteria. The Get Object supports generic activity including support for incidents, changes, and activities.
Get Relationship The Get Relationship is used to generate a list of related objects associated with a source object based on relationship criteria that you specify.
Monitor Object The Monitor Object uses filter criteria to look for new and updated records that satisfy the criteria that you specify. Only one monitor can be used in a workflow.
Update Activity The Update Activity object is used to make changes to activity records for the selected Activity Class.
Update Object The Update Object is used to change the values of one or more properties in an existing Object.
I’ve seen some really cool demos of using SCSM and Opalis together using the pre-release version of this integration pack. Can’t wait to start showing you more of this goodness!
Also, if you didn't already see it Adam also wrote a good blog post about how SCSM and Opalis are different and how they work together here.
In the MP XML below I've created a notification subscription that will send a notification to the affected user whenever the action log has an analyst comment added to it.
<ManagementPack ContentReadable="true" SchemaVersion="1.1" OriginalSchemaVersion="1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<Manifest>
<Identity>
<ID>ActionLogAddRelationshipSubscription</ID>
<Version>1.0.0.0</Version>
</Identity>
<Name>Action Log Add Relationship Subscription</Name>
<References>
<Reference Alias="Console">
<ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Console</ID>
<Version>7.0.5826.859</Version>
<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
</Reference>
<Reference Alias="NotificationsLibrary">
<ID>System.Notifications.Library</ID>
<Version>7.0.5826.0</Version>
<Reference Alias="WorkItem">
<ID>System.WorkItem.Library</ID>
<Reference Alias="ServiceManager.IncidentLibrary">
<ID>ServiceManager.IncidentManagement.Library</ID>
<Reference Alias="System">
<ID>System.Library</ID>
<Reference Alias="IncidentLibrary">
<ID>System.WorkItem.Incident.Library</ID>
<Reference Alias="Subscriptions">
<ID>Microsoft.SystemCenter.Subscriptions</ID>
<Reference Alias="Administration">
<ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Administration</ID>
</References>
</Manifest>
<Categories>
<Category ID="Category.ActionLogAddRelationshipSubscriptions.ManagementPack" Value="Console!Microsoft.EnterpriseManagement.ServiceManager.ManagementPack">
<ManagementPackName>ActionLogAddRelationshipSubscription</ManagementPackName>
<ManagementPackVersion>7.0.5826.0</ManagementPackVersion>
</Category>
<Category ID="Category.ActionLogAddRelationshipSubscriptionRule" Target="ActionLogAddRelationshipSubscriptionRule" Value="Administration!Microsoft.EnterpriseManagement.ServiceManager.Rules.WorkflowSubscriptions" />
<Category ID="ActionLogAddRelationshipAffectedUserNotificationTemplate.Category" Target="ActionLogAddRelationshipAffectedUserNotificationTemplate" Value="Administration!ServiceManager.Console.NotificationManagement.NotificationTemplates.Enumeration" />
</Categories>
<Monitoring>
<Rules>
<Rule ID="ActionLogAddRelationshipSubscriptionRule" Enabled="true" Target="ServiceManager.IncidentLibrary!System.WorkItem.Incident.WorkflowTarget" ConfirmDelivery="true" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>System</Category>
<DataSources>
<DataSource ID="DS" TypeID="Subscriptions!Microsoft.SystemCenter.CmdbInstanceSubscription.DataSourceModule">
<Subscription>
<RelationshipSubscription RelType="$MPElement[Name='WorkItem!System.WorkItem.TroubleTicketHasAnalystComment']$" SourceType="$MPElement[Name='WorkItem!System.WorkItem.TroubleTicket']$" TargetType="$MPElement[Name='WorkItem!System.WorkItem.TroubleTicket.AnalystCommentLog']$">
<AddRelationship />
</RelationshipSubscription>
<PollingIntervalInSeconds>30</PollingIntervalInSeconds>
<BatchSize>100</BatchSize>
</Subscription>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="WA" TypeID="Subscriptions!Microsoft.EnterpriseManagement.SystemCenter.Subscription.WindowsWorkflowTaskWriteAction">
<EnableBatchProcessing>false</EnableBatchProcessing>
<WindowsWorkflowConfiguration>
<AssemblyName>Microsoft.EnterpriseManagement.WorkflowFoundation</AssemblyName>
<WorkflowTypeName>Microsoft.EnterpriseManagement.WorkflowFoundation.ConfigurationWorkflow</WorkflowTypeName>
<WorkflowParameters>
<WorkflowParameter Name="InstanceId" Type="guid">$Data/BaseManagedEntityId$</WorkflowParameter>
<WorkflowArrayParameter Name="UserRelationshipIdList" Type="guid">
<Item>$MPElement[Name='WorkItem!System.WorkItemAffectedUser']$</Item>
</WorkflowArrayParameter>
<WorkflowArrayParameter Name="NotificationTemplateIdList" Type="guid">
<Item>$MPElement[Name='ActionLogAddRelationshipAffectedUserNotificationTemplate']$</Item>
</WorkflowParameters>
<RetryExceptions />
<RetryDelaySeconds>60</RetryDelaySeconds>
<MaximumRunningTimeSeconds>7200</MaximumRunningTimeSeconds>
</WindowsWorkflowConfiguration>
</WriteAction>
</WriteActions>
</Rule>
</Rules>
</Monitoring>
<Templates>
<ObjectTemplate ID="ActionLogAddRelationshipAffectedUserNotificationTemplate" TypeID="NotificationsLibrary!System.Notification.Template.SMTP">
<Property Path="$Context/Property[Type='NotificationsLibrary!System.Notification.Template.SMTP']/Subject$"><1033>Action log entry added to $Context/Property[Type='WorkItem!System.WorkItem']/Id$ </1033><2057>Incident ID: [$Context/Property[Type='WorkItem!System.WorkItem']/Id$] has been updated by the analyst</2057></Property>
<Property Path="$Context/Property[Type='NotificationsLibrary!System.Notification.Template.SMTP']/Priority$">2</Property>
<Property Path="$Context/Property[Type='NotificationsLibrary!System.Notification.Template.SMTP']/IsBodyHtml$">True</Property>
<Property Path="$Context/Property[Type='NotificationsLibrary!System.Notification.Template']/Content$">
<1033>
Details:
Title: $Context/Property[Type='WorkItem!System.WorkItem']/Title$
Description: $Context/Property[Type='WorkItem!System.WorkItem']/Description$
Created By: $Context/Path[Relationship='WorkItem!System.WorkItemCreatedByUser' TypeConstraint='System!System.User']$?$DisplayName$
</1033><2057>Incident Title: $Context/Property[Type='WorkItem!System.WorkItem']/Title$ &lt;br/&gt;
Assigned To: $Context/Path[Relationship='WorkItem!System.WorkItemAssignedToUser' TypeConstraint='System!System.User']$?$DisplayName$?&lt;br/&gt;
Updated action log entry: &lt;br/&gt;
&lt;table&gt;
&lt;Group&gt;
&lt;tr&gt;
&lt;td&gt;
$Context/Path[Relationship='WorkItem!System.WorkItem.TroubleTicketHasAnalystComment' TypeConstraint='WorkItem!System.WorkItem.CommentLog']/Property[Type='WorkItem!System.WorkItem.CommentLog']/Comment$
&lt;/td&gt;
&lt;/tr&gt;
&lt;/Group&gt;
&lt;/table&gt;</2057></Property>
<Property Path="$Context/Property[Type='NotificationsLibrary!System.Notification.Template']/Encoding$">utf-8</Property>
<Property Path="$Context/Property[Type='NotificationsLibrary!System.Notification.Template']/SeedClass$">System.WorkItem.Incident</Property>
<Property Path="$Context/Property[Type='NotificationsLibrary!System.Notification.Template']/Protocol$">SMTP</Property>
</ObjectTemplate>
</Templates>
<LanguagePacks>
<LanguagePack ID="ENU" IsDefault="true">
<DisplayStrings>
<DisplayString ElementID="ActionLogAddRelationshipSubscription">
</DisplayString>
<DisplayString ElementID="ActionLogAddRelationshipSubscriptionRule">
<Name>Action log entry added to action log</Name>
<DisplayString ElementID="ActionLogAddRelationshipAffectedUserNotificationTemplate">
<Name>Notify affected user that action log entry has been added to action log</Name>
</DisplayStrings>
</LanguagePack>
</LanguagePacks>
</ManagementPack>
Creating relationship subscriptions is actually pretty easy. You just need to follow the pattern above and replace certain configurable parameters with the correct values. I'll explain those here for reference:
First is the Target of the Rule. Unless you know what you are doing, you should probably stick to using a workflow target from among the out of the box list of workflow targets:
Workflow Target Class ID
Workflow Target Class MP
System.WorkItem.Activity.InternalWorkflowTarget
ServiceManager.ActivityManagement.Library
System.WorkItem.Activity.WorkflowTarget
System.WorkItem.ChangeRequest.WorkflowTarget
ServiceManager.ChangeManagement.Library
System.WorkItem.Incident.WorkflowTarget
ServiceManager.IncidentManagement.Library
System.WorkItem.Problem.WorkflowTarget
System.WorkItem.Problem.Library
You can get more information on Workflow target from this blog post if you need to do something beyond the above.
Next is to define which RelationshipType you are subscribing to. You can get a list of the relationship type IDs from the database by using the queries provided in this blog post. Each Relationship Type has a Source Class and a Target Class. You can get those from the same blog post using SQL queries.
Next up is to indicate which Related Users you are going to notify. Do this by indicating the relationship type which points from the class that you are notifying about (in this case the Incident class) to a System.Domain.User class. You can get the Relationship Types again using the database query post above.
Last is to indicate which Notification Template you will use. In this case I am using a notification template defined in the same MP.
One last note. You'll see that in this notification template I did something a little fancy. I inserted a insert tag for the Action Log (i.e. TroubleTicketHasAnalystComment relationship type). The relationship between an incident and action log comments is 1:many. So – how do you show that in a notification template? Ideally you would show a list of the action log entries. The same could be true for related configuration items, related work items, etc. In other words anything where there are many items related to the item you are notifying about.
To deal with this we have created a special <Group> tag that can be used in the notification template. When you surround the Insert tag with the Group tag we will iterate through everything in the Group tag and repeat it for each related object.
This is what the Group tag looks like in the notification template properties dialog:
=================================
Incident Title: $Context/Property[Type='WorkItem!System.WorkItem']/Title$ <br/>
Assigned To: $Context/Path[Relationship='WorkItem!System.WorkItemAssignedToUser' TypeConstraint='System!System.User']$?$DisplayName$?<br/>
Updated action log entry: <br/>
<table>
<Group>
<tr>
<td>
</td>
</tr>
</Group>
</table>
And this is what it looks like when sent in HTML.
Incident Title: Test Subject Assigned To: Aaron JamesUpdated action log entry:
test6
test7
test3
test2
test4
test5
testing
Note: per this forum thread we had there is a bug in SCSM 2010 which displays the objects in essentially random order. This has been fixed for SP1.
One of the first things customers ask when they evaluate Service Manager is '”Does Microsoft itself use Service Manager?”. The answer is “Yes!”
There are quite a few internal groups here at Microsoft that are using SCSM in production including:
Over time we hope to showcase each of these internal customers and share with you exactly what they are doing with Service Manager.
Jim Livingston and his crew in MPSD have been working with us very closely on their implementation. They have been in production since Beta 2 back in November of 2009. MPSD, as do many organizations, wanted to adapt some of their existing processes to Service Manager so we helped show them how to extend the model, customize forms, create custom workflows, etc. that made the transition from their previous service management solution to Service Manager as smooth as possible. Although they did write some code for their custom workflows, much of the extensions and customizations that MPSD have made were done by Jim or Andrew using the Authoring Tool without writing any code.
Here’s a 15 minute video/demo that Jim put together for IT Showcase about MPSD’s deployment of Service Manager. Sorry the video part of the demo is pretty blurry. I recommend hitting full screen or going to the page on TechNet to download the .wmv for a little bit better view.
Thanks Jim, Andrew, and all the team over at MPSD! It’s been fun and we look forward to working with you on implementing change management and other things going forward!
Adam Hall, the Technical Product Manager for Opalis has put together an inspiring demo video of using many System Center products together to manage the process of Physical to Virtual (P2V) migrations. The demo uses Opalis to orchestrate and automate major portions of the process which don’t really require human intervention because they are repeatable, automatable procedures that can be codified in a workflow using the drag and drop designer in Opalis.
Service Manager is used in this example:
Nice work Adam! I’m loving Opalis’ integration with SCSM and the other System Center products! Can’t wait until these integration packs are RTM!
Adam’s original post on the Dynamic Data Center (The DDC) blog is here.
I’ve been meaning to blog this one for a while now. Here’s the scenario…
Customer wants to be notified (or trigger a workflow) when the property changes from X to Y. Easily done. Just configure the subscription to be Before Value = X and After Value = Y.
Example: Notify me whenever the incident urgency property changes from Medium to High looks like this:
This notification will only trigger when the Urgency property changes from Medium to High. Perfect! Easy!
Now, let’s say that you want to notify when the Urgency changes from anything to anything else. How do you do that in the UI? Believe me – people have tried all kinds of crazy things they have sent me. :) The answer is that you can’t do this in the UI. Trick Question! You can do this in XML though. Here’s the trick….
First – start out by creating a notification subscription (what I did for this example) or an incident event workflow rule or create a workflow rule in the authoring tool. Here are the screenshots of what I did:
Then export the MP out (see here for information on hacking XML like a pro). Open the MP .xml file in an XML editor. Look for the Rule in there which you created. Inside of it you will see the criteria XML that will look like this:
<UpdateInstance>
<Criteria>
<Expression>
<SimpleExpression>
<ValueExpression>
<Property State="Pre">$Context/Property[Type='CustomSystem_WorkItem_Library!System.WorkItem.TroubleTicket']/Urgency$</Property>
</ValueExpression>
<Operator>Equal</Operator>
<Value>{02625c30-08c6-4181-b2ed-222fa473280e}</Value>
</SimpleExpression>
</Expression>
</Criteria>
</UpdateInstance>
What you can see here is that the criteria is simply saying ‘Take the ‘Pre’ (i.e. before the update) value and see if that equals this GUID (represents the Medium Urgency Enum). In other cases it might look a little different depending on your criteria. What you need to do is change this to say ‘Compare the Pre value and the Post value. If they are not equal then trigger’. Like this:
<Operator>NotEqual</Operator>
<Property State="Post">$Context/Property[Type='CustomSystem_WorkItem_Library!System.WorkItem.TroubleTicket']/Urgency$</Property>
I changed three things:
1) Change the Operator from Equal to NotEqual
2) Copied the Property State = Pre line and replaced the <Value>{Guid…}</Value> line with it.
3) In the second reference to the Property I changed the State from “Pre” to “Post”
Now I can just reimport this MP and it should start working as expected.
Note: As with any runtime changes you make to unsealed MPs, you’ll either need to increment the version number in the MP XML before import or restart the health service (System Center Management Service) before the change will take effect.
Note2: Not surprisingly, if you do this the UI will be confused. If you open the properties dialog to edit the subscription you will probably see an error like this:
Hint: There are other tricky things you can do in Subscription Criteria XML that you can’t do in the UI like Relationship Add/Remove subscriptions.
My finished test/example MP is attached.
Apparently this reply to @jalass is too long to put in the Comments section below so I'll just add it to the end of the blog post here:
@jalass-
First of all - couldnt agree with you more on this needing to be in the UI. We'll get there. Just couldnt build Rome in a day.
Work Item Assigned to User is a generic relationship type between any work item class and the user class. So - to subscribe to Change Request assignment changes you would just change:
<RelationshipSubscription RelType="$MPElement[Name='WorkItem!System.WorkItemAssignedToUser']$" SourceType="$MPElement[Name='CoreActivity!System.WorkItem.Activity']$" TargetType="$MPElement[Name='System!System.Domain.User']$">
to: <RelationshipSubscription RelType="$MPElement[Name='WorkItem!System.WorkItemAssignedToUser']$" SourceType="$MPElement[Name='CoreChangeRequest!System.WorkItem.ChangeRequest']$" TargetType="$MPElement[Name='System!System.Domain.User']$">
In case it isnt obvious, I just changed CoreActivity!System.WorkItem.Activity to CoreChangeRequest!System.WorkItem.ChangeRequest. In that case make sure you have an MP reference that maps 'CoreChangeRequest' to the System.WorkItem.ChangeRequest.Library MP like this: <Reference Alias="CoreChangeRequest"> <ID>System.WorkItem.ChangeRequest.Library</ID> <Version>7.0.5826.0</Version> <PublicKeyToken>31bf3856ad364e35</PublicKeyToken> </Reference>
You could do the same thing for problems by changing it to CoreProblem!System.WorkItem.Problem and adding the right reference like this: <Reference Alias="CoreProblem"> <ID>System.WorkItem.Problem.Library</ID> <Version>7.0.5826.0</Version> <PublicKeyToken>31bf3856ad364e35</PublicKeyToken> </Reference>
You can subscribe to different relationship types such as Created By and Affected User by looking up the appropriate relationship type ID and replacing that in the part that says WorkItem!System.WorkItemAssignedToUser above. Make sure you have the right MP reference in place for the MP that you are getting the relationship type from.
Here is the info you need for the Created By and Affected User relationship types:
Created By Relationship Type ID: System.WorkItemCreatedByUserCreated By Relationship Type MP ID: System.WorkItem.Library
Affected User Relationship Type ID: System.WorkItemAffectedUserAffected User Relationship Type MP ID: System.WorkItem.Library
BTW - Created By should never change. :)
If you want to send a notification to a group you have two options - 1) Put the user in as the Affected User, Assigned To User and use the above approach.2) Create a notification subscription (Administration - Notifications - Subscriptions). Choose the group you want to notify in the recipients page of the wizard. Note: the group must have an associated email address. The export the MP and change the criteria as explained in the other blog post. Reimport the MP.
The Service Manager team is very pleased to announce the availability of Service Manager Authoring Tool 2010 and Service Manager Cumulative Update 2 (KB2193861) !
Thank you for your patience in awaiting this release. Below are details about the locations for download.
Be sure to read the installation instructions and follow the steps provided for each.
Service Manager Authoring Tool 2010 RTM version
The final release of the Service Manager Authoring Tool 2010 is available in the following 10 languages:
English
French
German
Italian
Japanese
Korean
Russian
Simplified Chinese
Spanish
Traditional Chinese
This version of the Authoring Tool is compatible with Service Manager 2010 + Cumulative Update 2 (KB2193861). Highlights of the features in this release are:
Class editor for creating and extending classes and relationships
Using the Authoring Tool, users can browse, edit, extend and inherit existing and new classes and relationships. This enables our customers to easily model new classes or tailor existing ones to their needs.
Forms designer for creation and customization of Forms
Users can customize Forms by modifying controls on the forms, editing the look and feel as well as lay out of the forms as per their business needs. Users can also create new forms from scratch for classes that don't have specialized forms associated with them.
Creating and customization of Workflows including several activities
Workflow authoring piece provides our customers an easy way to automate their IT processes. The Workflow activity library consists of Active Directory activities, Virtual Machine Management activities, Service Manager activities, PowerShell, VB, batch scripting activities and control flow activities. These activities enables our customers to create rich Workflows with no almost development work.
Management Pack bundling and sealing
This functionality enables our customers to package and transport their authored Management Packs and associated resources like Forms, Workflows, Images in convenient Management Pack bundle.
Details of all the above functionality can be found in the documentation that accompanies the Authoring Tool.
The tool is available on Microsoft Downloads at : http://www.microsoft.com/downloads/details.aspx?FamilyID=40b8f1b7-da63-46ae-9ca4-ef007fc3cb29
Installation instructions are in the Authoring Guide document available as part of the downloaded package as well as at the following link: http://download.microsoft.com/download/6/C/5/6C51540C-AA37-4F16-A1B6-B395CF01343B/SM_AuthoringGuide.docx
Service Manager Cumulative Update 2 (KB2193861)
This is a rollup of fixes for System Center Service Manager 2010 and a pre-requisite for Service Manager Authoring Tool 2010.
Available on Microsoft Downloads at : http://www.microsoft.com/downloads/details.aspx?FamilyID=29ae66db-9178-4685-b973-b8be7c2c636f
For installation instructions and other details about this Cumulative Update, please see KB Article http://support.microsoft.com/default.aspx?scid=kb;EN-US;2193861
Last week, we made a major update to the 'SMLets' CodePlex cmdlets project for Service Manager. This release is called 'Beta 1' and has been expanded from the original 3 cmdlets for incidents to 48 cmdlets and functions and a bunch of scripts. This release includes the Announcements and Remove-SCSMManagmeentPack cmdlets examples I provided earlier on the blog. The majority of the new content was provided by Jim Truher who is our resident PowerShell guru having worked on the PowerShell team during its original release. Jim also refactored the project into a PowerShell module so that we could package the scripts and cmdlets together into one neat bundle and take advantage of some of the new features in PowerShell 2.0. Accordingly, you'll need to have PowerShell 2.0 installed to use these new goodies. Also – keep in mind that these PowerShell cmdlets and scripts rely on the Service Manager SDK assemblies so you'll need to be running these either on the Service Manager Management Server or a computer where the Service Manager console is installed.
Here's a list of all the new stuff:
Function New-ManagementGroupFunction import-AssemblyFunction Get-SCSMClassPropertyFunction get-SCSMCommandFunction get-SCSMpropertyCmdlet Get-SCSMTaskCmdlet Get-SCSMSubscriptionCmdlet Get-SCSMTypeProjectionCmdlet Get-SCSMTaskResultCmdlet Get-SCSMUserRoleCmdlet Get-SCSMTopLevelEnumerationCmdlet Import-SCManagementPackCmdlet Remove-SCSMSubscriptionCmdlet Remove-SCSMObjectCmdlet Remove-SCManagementPackCmdlet Set-SCSMObjectCmdlet Set-SCSMIncidentCmdlet Set-SCSMAnnouncementCmdlet New-SCSealedManagementPackCmdlet New-SCManagementPackCmdlet Set-SCSMObjectProjectionCmdlet New-SCSMObjectCmdlet New-SCSMIncidentCmdlet New-SCSMAnnouncementCmdlet Get-SCSMRunAsAccountCmdlet Get-SCDWWarehouseModuleTypesCmdlet Get-SCDWRelationshipFactTypesCmdlet Get-SCManagementPackCmdlet Get-SCSMAnnouncementCmdlet Get-SCManagementPackElementCmdlet Get-SCDWOutriggerTypesCmdlet Get-DataWarehouseConfigurationCmdlet Export-SCManagementPackCmdlet Get-SCDWDimensionTypesCmdlet Get-SCDWMeasureTypesCmdlet Get-SCDWFactTypesCmdlet Get-SCSMCategoryCmdlet Get-SCSMRelatedObjectCmdlet Get-SCSMObjectProjectionCmdlet Get-SCSMRelationshipClassCmdlet Get-SCSMRuleCmdlet Get-SCSMResourceCmdlet Get-SCSMObjectCmdlet Get-SCSMClassCmdlet Get-SCSMChildEnumerationCmdlet Get-SCSMConfigItemCmdlet Get-SCSMIncidentCmdlet Get-SCSMEnumeration
Thanks to Jim and Patrik Sundqvist for putting this together! This is going to be super powerful! Think about all the possibilities of using these in console tasks and workflows using the PowerShell script activity!
You can download the beta 1 release from the CodePlex site here:
http://smlets.codeplex.com/
Enjoy!
When you create a new view in the Service Manager console, if you choose to base the view on a Combination Class (aka Type Projection), then you can choose to show properties of related objects in the column. For example, in an incident view you might want to show the display name or user alias for the person that the incident is assigned to or who the related affected user is.
Unfortunately, when you do this today in the Service Manager console:
You end up with a column header that shows the property display name which in this case is ‘Display Name’. That’s not very useful and can be downright confusing when you try to show two properties of related two different related objects such as the assigned to user and the affected user like this:
Which column is which???
Fortunately, this is fairly easy to fix by editing some XML in the management pack. It’s a little tedious but at least it can be done. In this blog post I’ll show you how.
First, you need to find the MP that your view is stored in the Administration/Management Packs view. In case you don’t know exactly which MP here are some hints: Look at just the unsealed MPs – they are the only ones that will contain views. Then look for ‘incident’ if it is an incident view, etc.
Once you find your MP, click Export in the task pane to export it out as an XML file and open it in some XML editor (notepad if you have to).
Each view has a definition that looks like this:
Notice how each column is defined and for each column the DisplayName for the column header label is bound to a ViewString by having the same identifier:
The MPElement notation there then points to a StringResource later in the XML document:
And for each StringResource in each LanguagePack there is a DisplayString:
See how each display string right now is ‘Display Name’? That’s what we need to fix by changing it to something more meaningful like ‘Affected User’ and ‘Assigned User’:
Keep in mind that if you have multiple language packs in your MP you will need to do this for each LanguagePack.
Now, save the MP .xml file and import the MP into SCSM – ignore the warning about losing data. Close and reopen the console and you will see the new column header names:
That’s better!
As long as you created your views using the Service Manager console here is a hint: to do this quickly, just grab the unique number (e.g. 4c75e….) and do a find for that in the MP XML to quickly skip to the right DisplayString element in the management pack. You don’t really need to worry about the ViewString, StringResource mapping elements in between.
Note: If you modify the view in any way these modifications will be reverted by the console so make sure you have the view just the way you want it before you make these changes. If you need to make some changes you just need need to make the manual modifications again. If you know you are going to do this ahead of time you could copy the DisplayStrings section in the XML and then just bulk replace that in the XML instead of surgically doing it one at a time.