Creating the IT Business Form in Service Manager 2010 SP1 based on the IT Service Form.

Why creating the IT business form?

In Service Manager 2010 SP1 when you start using the IT Business class you will soon decide you want to extend this class with extra properties and accordingly you want to change the form as well.

This sounds like any other customization in Service Manager. Simply extend the class with extra properties and extend the form to include these properties. Sounds pretty easy..right?

Not really!

You can easily extend the business Service class with your custom properties.

Next you want to add another Tab to the form to show and add the custom properties you just created for the Business Service Class.

This is where most people will end up since the form used to display the business form is actually the same form used for showing the Service Class.

The service class in SCSM is an abstract class which can’t be extended and since the form is target at the Service Class you won’t be able to extend the form with properties from the business class.

There are ways to work around this by creating a custom task target at Business class which pops up a custom form just for the custom properties.

The downside is you will need to run this task to be able to only view the custom form you created.

For viewing the default properties of the business service class you will need to use the default service form which doesn’t include you custom properties.

Although this works perfectly it is not a pretty solution and not really user friendly since the use will have to use two forms to show all properties of the business class.

I run into this same situation and where persistent to deliver a total solution based on 1 form preferably the Service form. I asked around and discovered the second way of creating the custom task.

Since creating the custom task would be my backup solution I decided to try to make it work based on the Service form.

To give the customer a better user experience and just for the fun of it Smile

This post will describe the high level steps to follow to create the solution which is creating a custom form based on the Service form which is target at Business service to be able to extend and customize the form with your custom properties.

Basically I unsealed the management pack ServiceManager.ServiceMaps.Library.mp.

With the unsealed version I was able to take look at how the Service Form is build.

Let’s start with creating an new MP to hold our custom Business form.

Simply open the authoring console and create a new management pack.

After this you can close your authoring console and open the MP in your favorite XML Editor:

Manifest

The first part is the manifest where we need to add the references to the other sealed management packs used in the form.To the right are all references you need to add to the Management Pack.
 

<Reference Alias="WorkItem">
       <ID>System.WorkItem.Library</ID>
       <Version>7.0.6555.0</Version>
       <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
     </Reference>
     <Reference Alias="CoreIncident">
       <ID>System.WorkItem.Incident.Library</ID>
       <Version>7.0.6555.0</Version>
       <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
     </Reference>
     <Reference Alias="CoreKnowledge">
       <ID>System.Knowledge.Library</ID>
       <Version>7.0.6555.0</Version>
       <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
     </Reference>
     <Reference Alias="CoreChange">
       <ID>System.WorkItem.ChangeRequest.Library</ID>
       <Version>7.0.6555.0</Version>
       <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
     </Reference>
     <Reference Alias="ServiceDesignerLib">
       <ID>Microsoft.SystemCenter.ServiceDesigner.Library</ID>
       <Version>7.0.6555.0</Version>
       <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
     </Reference>
     <Reference Alias="SupportingItem">
       <ID>System.SupportingItem.Library</ID>
       <Version>7.0.6555.0</Version>
       <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
     </Reference>

After making sure we have all references in place we can add the next part which are the type projections to combine the classes in the form.

 Type Projections

These are the type projections which are used in the Service Form and therefore we need to “re-use” them and add some changes to them. The changes are added in red.
Which is basically creating our own form target at the Business Service instead of the Service Class.

The main thing in here is changing the Type to Business Service instead of Service Class!

<TypeProjections>
      <TypeProjection ID="Custom.Business.Service.FormProjectionType" Accessibility="Public" Type="ServiceDesignerLib!Microsoft.SystemCenter.BusinessService">
        <Component Path="$Context/Path[Relationship='ServiceDesignerLib!Microsoft.SystemCenter.ServiceDesigner.ServiceHasGroups']$" Alias="ServiceHasGroups" />
        <Component Path="$Context/Path[Relationship='System!System.ConfigItemContainsConfigItem' SeedRole='Target']$" Alias="UsedBy">
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' SeedRole='Target' TypeConstraint='CoreIncident!System.WorkItem.Incident']$" Alias="AffectedByIncidents" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' SeedRole='Target' TypeConstraint='CoreChange!System.WorkItem.ChangeRequest']$" Alias="AffectedByChanges" />
        </Component>
        <Component Path="$Context/Path[Relationship='System!System.ConfigItemOwnedByUser']$" Alias="ComponentServiceOwners" />
        <Component Path="$Context/Path[Relationship='System!System.ConfigItemServicedByUser']$" Alias="ComponentServiceContacts" />
        <Component Path="$Context/Path[Relationship='System!System.ServiceImpactsUser']$" Alias="ComponentImpactedByService" />
        <Component Path="$Context/Path[Relationship='System!System.ConfigItemImpactsCustomers']$" Alias="ComponentBusinessCustomers" />
        <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemRelatesToConfigItem' SeedR
ole='Target']$"
Alias="ImpactedWorkItem" />
        <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' SeedRole='Target']$" Alias="RelatedWorkItem" />
        <Component Path="$Context/Path[Relationship='SupportingItem!System.ConfigItemHasFileAttachment']$" Alias="FileAttachment" />
        <Component Path="$Context/Path[Relationship='System!System.ConfigItemRelatesToConfigItem']$" Alias="RelatedConfigItem" />
        <Component Path="$Context/Path[Relationship='System!System.ConfigItemRelatesToConfigItem' SeedRole='Target']$" Alias="RelatedConfigItemSource" />
        <Component Path="$Context/Path[Relationship='CoreKnowledge!System.EntityLinksToKnowledgeDocument']$" Alias="RelatedKnowledgeArticles" />
      </TypeProjection>
      <TypeProjection ID="Microsoft.System.Service.UsedByNodeProjection" Accessibility="Public" Type="System!System.ConfigItem">
        <Component Path="$Context/Path[Relationship='System!System.ConfigItemContainsConfigItem']$" Alias="Children">
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' SeedRole='Target' TypeConstraint='CoreIncident!System.WorkItem.Incident']$" Alias="AffectedByIncidents" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' SeedRole='Target' TypeConstraint='CoreChange!System.WorkItem.ChangeRequest']$" Alias="AffectedByChanges" />
        </Component>
      </TypeProjection>
      <TypeProjection ID="Microsoft.System.Service.ServiceContainsGroupsProjection" Accessibility="Public" Type="System!System.Service">
        <Component Path="$Context/Path[Relationship='ServiceDesignerLib!Microsoft.SystemCenter.ServiceDesigner.ServiceHasGroups']$" Alias="ServiceHasGroups" />
      </TypeProjection>
      <TypeProjection ID="Microsoft.System.Service.DependsOnNodeProjection" Accessibility="Public" Type="System!System.ConfigItem">
        <Component Path="$Context/Path[Relationship='System!System.ConfigItemContainsConfigItem']$" Alias="Children">
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' SeedRole='Target' TypeConstraint='CoreIncident!System.WorkItem.Incident']$" Alias="AffectedByIncidents" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' SeedRole='Target' TypeConstraint='CoreChange!System.WorkItem.ChangeRequest']$" Alias="AffectedByChanges" />
        </Component>
      </TypeProjection>
      <TypeProjection ID="Microsoft.System.Service.WorkItemsAboutConfigItem" Accessibility="Public" Type="System!System.ConfigItem">
        <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' SeedRole='Target']$" Alias="WorkItems" />
      </TypeProjection>
      <TypeProjection ID="Microsoft.System.Service.ChangeAndIncidents" Accessibility="Public" Type="System!System.ConfigItem">
        <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' SeedRole='Target' TypeConstraint='CoreIncident!System.WorkItem.Incident']$" Alias="AffectedByIncidents" />
        <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' SeedRole='Target' TypeConstraint='CoreChange!System.WorkItem.ChangeRequest']$" Alias="AffectedByChanges" />
      </TypeProjection>
    </TypeProjections>
  </EntityTypes>
</TypeDefinitions>
 

After adding the type projections for the form we need to start with the presentation of the form.

Form

First we have changed the highlighted sections in red. To crate our own business service class.

The other parts are also “re-used”.

Notice we changed the form ID and the target to our renamed projection type earlier which is target at the business service class.

Also here we declare to re-use the assembly from the Service Form. That’s why we need to create a bundle containing the DLL files.

<Presentation>
   <Forms>
     <Form ID="CustomBusinessServiceMainForm" Accessibility="Public" Target="Custom.Business.Service.FormProjectionType" Assembly="ServiceMapsFormsAssembly" TypeName="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm">
       <FormStrings>
         <FormString ID="Label_ServiceOwner">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_ServiceOwner"]$</FormString>
         <FormString ID="Label_ServiceContacts">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_ServiceContacts"]$</FormString>
         <FormString ID="Label_ServiceCustomers">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_ServiceCustomers"]$</FormString>
         <FormString ID="Label_AffectedUsers">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_AffectedUsers"]$</FormString>
         <FormString ID="Label_DependsOn">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_DependsOn"]$</FormString>
         <FormString ID="Label_to">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_to"]$</FormString>
         <FormString ID="Label_Levels">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_Levels"]$</FormString>
         <FormString ID="Label_Notes">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_Notes"]$</FormString>
         <FormString ID="Label_SelectedItem">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_SelectedItem"]$</FormString>
         <FormString ID="Label_RelatedWorkItemsForSelectedItem">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_RelatedWorkItemsForSelectedItem"]$</FormString>
         <FormString ID="Label_UsedBy">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_UsedBy"]$</FormString>
         <FormString ID="Label_Level">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_Level"]$</FormString>
         <FormString ID="TabItem_General">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.TabItem_General"]$</FormString>
         <FormString ID="TabItem_DependsOn">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.TabItem_DependsOn"]$</FormString>
         <FormString ID="TabItem_UsedBy">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.TabItem_UsedBy"]$</FormString>
         <FormString ID="TabItem_RelatedItems">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.TabItem_RelatedItems"]$</FormString>
         <FormString ID="TabItem_History">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.TabItem_History"]$</FormString>
         <FormString ID="TabItem_Notes">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.TabItem_Notes"]$</FormString>
         <FormString ID="TabItem_GeneralAutomationName">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.TabItem_GeneralAutomationName"]$</FormString>
         <FormString ID="TabItem_DependsOnAutomationName">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.TabItem_DependsOnAutomationName"]$</FormString>
         <FormString ID="TabItem_UsedByAutomationName">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.TabItem_UsedByAutomationName"]$</FormString>
         <FormString ID="TabItem_RelatedItemsAutomationName">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.TabItem_RelatedItemsAutomationName"]$</FormString>
         <FormString ID="TabItem_HistoryAutomationName">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.TabItem_HistoryAutomationName"]$</FormString>
         <FormString ID="TabItem_NotesAutomationName">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.TabItem_NotesAutomationName"]$</FormString>
         <FormString ID="Button_Add">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Button_Add"]$</FormString>
         <FormString ID="Button_View">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Button_View"]$</FormString>
         <FormString ID="Button_Remove">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Button_Remove"]$</FormString>
         <FormString ID="Button_Expand">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Button_Expand"]$</FormString>
         <FormString ID="Label_ExpandTo">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Label_ExpandTo"]$</FormString>
         <FormString ID="Button_AddCategory">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Button_AddCategory"]$</FormString>
         <FormString ID="Button_AddItem">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Button_AddItem"]$</FormString>
         <FormString ID="Button_Open">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Button_Open"]$</FormString>
         <FormString ID="Button_AddToRelated">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Button_AddToRelated"]$</FormString>
         <FormString ID="SortableGridViewColumn_Name">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.SortableGridViewColumn_Name"]$</FormString>
         <FormString ID="SortableGridViewColumn_Email">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.SortableGridViewColumn_Email"]$</FormString>
         <FormString ID="SortableGridViewColumn_Phone">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.SortableGridViewColumn_Phone"]$</FormString>
         <FormString ID="SortableGridViewColumn_ClassName">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.SortableGridViewColumn_ClassName"]$</FormString>
         <FormString ID="SortableGridViewColumn_Level">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.SortableGridViewColumn_Level"]$</FormString>
         <FormString ID="SortableGridViewColumn_Parent">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.SortableGridViewColumn_Parent"]$</FormString>
         <FormString ID="SortableGridViewColumn_AffectedByChange">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.SortableGridViewColumn_AffectedByChange"]$</FormString>
         <FormString ID="SortableGridViewColumn_AffectedByAnIncident">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.SortableGridViewColumn_AffectedByAnIncident"]$</FormString>
         <FormString ID="GridViewColumn_ID">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.GridViewColumn_ID"]$</FormString>
         <FormString ID="GridViewColumn_Title">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.GridViewColumn_Title"]$</FormString>
         <FormString ID="GridViewColumn_AssignedTo">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.GridViewColumn_AssignedTo"]$</FormString>
         <FormString ID="GridViewColumn_Status">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.GridViewColumn_Status"]$</FormString>
         <FormString ID="GridViewColumn_LastModified">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.GridViewColumn_LastModified"]$</FormString>
         <FormString ID="Expander_ServiceUsers">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Expander_ServiceUsers"]$</FormString>
         <FormString ID="GroupBox_ServiceMapProperties">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.GroupBox_ServiceMapProperties"]$</FormString>
         <FormString ID="Button_OpenRelated">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.Button_OpenRelated"]$</FormString>
         <FormString ID="ComboItem_Level_1">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.ComboItem_Level_1"]$</FormString>
         <FormString ID="ComboItem_Level_2">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.ComboItem_Level_2"]$</FormString>
         <FormString ID="ComboItem_Level_3">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.ComboItem_Level_3"]$</FormString>
         <FormString ID="ComboItem_Level_4">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.ComboItem_Level_4"]$</FormString>
         <FormString ID="ComboItem_Level_5">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.ComboItem_Level_5"]$</FormString>
         <FormString ID="ComboItem_Level_6">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.ComboItem_Level_6"]$</FormString>
         <FormString ID="ComboItem_Level_7">$MPElement[Name="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.ServiceForm.ComboItem_Level_7"]$</FormString>
       </FormStrings>

After adding the form the next step is to add the the string resources.

String Resources

<StringResources>
    <StringResource ID="Custom.Business.Service.Forms.Label_ServiceOwner" />
    <StringResource ID="Custom.Business.Service.Forms.Label_ServiceContacts" />
    <StringResource ID="Custom.Business.Service.Forms.Label_ServiceCustomers" />
    <StringResource ID="Custom.Business.Service.Forms.Label_AffectedUsers" />
    <StringResource ID="Custom.Business.Service.Forms.Label_DependsOn" />
    <StringResource ID="Custom.Business.Service.Forms.Label_to" />
    <StringResource ID="Custom.Business.Service.Forms.Label_Levels" />
    <StringResource ID="Custom.Business.Service.Forms.Label_Notes" />
    <StringResource ID="Custom.Business.Service.Forms.Label_SelectedItem" />
    <StringResource ID="Custom.Business.Service.Forms.Label_RelatedWorkItemsForSelectedItem" />
    <StringResource ID="Custom.Business.Service.Forms.Label_UsedBy" />
    <StringResource ID="Custom.Business.Service.Forms.Label_Level" />
    <StringResource ID="Custom.Business.Service.Forms.TabItem_General" />
    <StringResource ID="Custom.Business.Service.Forms.TabItem_DependsOn" />
    <StringResource ID="Custom.Business.Service.Forms.TabItem_UsedBy" />
    <StringResource ID="Custom.Business.Service.Forms.TabItem_RelatedItems" />
    <StringResource ID="Custom.Business.Service.Forms.TabItem_History" />
    <StringResource ID="Custom.Business.Service.Forms.TabItem_Notes" />
    <StringResource ID="Custom.Business.Service.Forms.TabItem_GeneralAutomationName" />
    <StringResource ID="Custom.Business.Service.Forms.TabItem_DependsOnAutomationName" />
    <StringResource ID="Custom.Business.Service.Forms.TabItem_UsedByAutomationName" />
    <StringResource ID="Custom.Business.Service.Forms.TabItem_RelatedItemsAutomationName" />
    <StringResource ID="Custom.Business.Service.Forms.TabItem_HistoryAutomationName" />
    <StringResource ID="Custom.Business.Service.Forms.TabItem_NotesAutomationName" />
    <StringResource ID="Custom.Business.Service.Forms.Button_Add" />
    <StringResource ID="Custom.Business.Service.Forms.Button_View" />
    <StringResource ID="Custom.Business.Service.Forms.Button_Remove" />
    <StringResource ID="Custom.Business.Service.Forms.Button_Expand" />
    <StringResource ID="Custom.Business.Service.Forms.Label_ExpandTo" />
    <StringResource ID="Custom.Business.Service.Forms.Button_AddCategory" />
    <StringResource ID="Custom.Business.Service.Forms.Button_AddItem" />
    <StringResource ID="Custom.Business.Service.Forms.Button_Open" />
    <StringResource ID="Custom.Business.Service.Forms.Button_AddToRelated" />
    <StringResource ID="Custom.Business.Service.Forms.SortableGridViewColumn_Name" />
    <StringResource ID="Custom.Business.Service.Forms.SortableGridViewColumn_Email" />
    <StringResource ID="Custom.Business.Service.Forms.SortableGridViewColumn_Phone" />
    <StringResource ID="Custom.Business.Service.Forms.SortableGridViewColumn_ClassName" />
    <StringResource ID="Custom.Business.Service.Forms.SortableGridViewColumn_Level" />
    <StringResource ID="Custom.Business.Service.Forms.SortableGridViewColumn_Parent" />
    <StringResource ID="Custom.Business.Service.Forms.SortableGridViewColumn_AffectedByChange" />
    <StringResource ID="Custom.Business.Service.Forms.SortableGridViewColumn_AffectedByAnIncident" />
    <StringResource ID="Custom.Business.Service.Forms.GridViewColumn_ID" />
    <StringResource ID="Custom.Business.Service.Forms.GridViewColumn_Title" />
    <StringResource ID="Custom.Business.Service.Forms.GridViewColumn_AssignedTo" />
    <StringResource ID="Custom.Business.Service.Forms.GridViewColumn_Status" />
    <StringResource ID="Custom.Business.Service.Forms.GridViewColumn_LastModified" />
    <StringResource ID="Custom.Business.Service.Forms.Expander_ServiceUsers" />
    <StringResource ID="Custom.Business.Service.Forms.GroupBox_ServiceMapProperties" />
    <StringResource ID="Custom.Business.Service.Forms.Button_OpenRelated" />
    <StringResource ID="Custom.Business.Service.Forms.ComboItem_Level_1" />
    <StringResource ID="Custom.Business.Service.Forms.ComboItem_Level_2" />
    <StringResource ID="Custom.Business.Service.Forms.ComboItem_Level_3" />
    <StringResource ID="Custom.Business.Service.Forms.ComboItem_Level_4" />
    <StringResource ID="Custom.Business.Service.Forms.ComboItem_Level_5" />
    <StringResource ID="Custom.Business.Service.Forms.ComboItem_Level_6" />
    <StringResource ID="Custom.Business.Service.Forms.ComboItem_Level_7" />
  </StringResources>
</Presentation>

The last part is to add the display strings.

Displaystrings

Below are the display strings which are added it’s just a part of the total amount since it is to much to post here, besides this this is not really rocket science Winking smile

off course for review purposes you can look at the management pack as well.

If you want to add multi language you will need add the other languages as well.

<LanguagePacks>
   <LanguagePack ID="ENU" IsDefault="true">
     <DisplayStrings>
       <DisplayString ElementID="Custom.Business.Service">
         <Name>Custom.Business.Service</Name>
       </DisplayString>
       <DisplayString ElementID="Custom.Business.Service.FormProjectionType">
         <Name>Service Map (advanced)</Name>
         <Description>Defines the properties used in service map forms</Description>
       </DisplayString>
       <DisplayString ElementID="Microsoft.System.Service.UsedByNodeProjection">
         <Name>Service Map Dependents Node</Name>
         <Description>Defines the properties of service maps used by a node</Description>
       </DisplayString>
       <DisplayString ElementID="Microsoft.System.Service.DependsOnNodeProjection">
         <Name>Service Map Components Node</Name>
         <Description>Defines the properties of service maps that depend on a node</Description>
       </DisplayString>
       <DisplayString ElementID="Microsoft.System.Service.WorkItemsAboutConfigItem">
         <Name>Work Items About Configuration Item</Name>
         <Description>Defines the properties of configuration items related to work items</Description>
       </DisplayString>
       <DisplayString ElementID="Microsoft.System.Service.ChangeAndIncidents">
         <Name>Configuration Items Affected by Work Items</Name>
         <Description>Defines the properties of configuration items affected by incidents and change requests</Description>
       </DisplayString>
       <DisplayString ElementID="Custom.Business.Service.Forms.Label_ServiceOwner">
         <Name>Service owner:</Name>
         <Description>Service owner</Description>
       </DisplayString>

The last part is to add the reference to the Assembly.

Resources

<Resources>
   <Assembly ID="ServiceMapsFormsAssembly" Accessibility="Public" FileName="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms.dll" HasNullStream="false" QualifiedName="Microsoft.EnterpriseManagement.ServiceManager.ServiceMaps.Forms" />
 </Resources>

After this you are finished with the form and you can open it in the authoring console.

image

After this you can extend the business class and add a custom tab to the form to show your custom properties just like your used to.

Also because we target the Business class when you create a new Service by using the tasks bar our new custom form will open.

image image

 Now you have business form which is fully extendable!
Find attached the XML and bundle.
Have Business Service edditing 🙂

0 thoughts on “Creating the IT Business Form in Service Manager 2010 SP1 based on the IT Service Form.

  1. Profile photo of RayRay

    Your solution looks good and I’m new to SCSM. I’m looking to customize the Business Service form in SCSM 2012 RC, do you know if this works for 2012?

    Thanks,
    Ray

Leave a Reply