Showing posts with label Service Request. Show all posts
Showing posts with label Service Request. Show all posts

Sunday, March 16, 2014

Extending Service Request Form - Part 3 (Customizing the MP)

Extending Service Request Form Series
Extending Service Request Form - Part 1 (Extending SR Class)
Extending Service Request Form - Part 2 (Extending SR Form)
Extending Service Request Form - Part 3 (Customizing the MP)

From the previous post Extending Service Request Form - Part 2 (Extending SR Form), we create a MP in XML contains All Class and Form Extensions. This post is continue to that where we will focus on the required customization on the XML level before we could import this MP into SCSM 2012.

This section of post is very important as this dictate if the MP were to import successfully. I have also refer to the below resources the first time I did this.

Add custom service request forms in #ServiceManager2012
New Hardware request via Service offering

Customizing the MP

1. Make a backup of the MP. The MP which we have created using SM Authoring Tool will be kept so it can be editing in future. The MP that we saved/copied with a new name will be customized using XML Editor.

2. Open the copied MP using XML Editor and will see the structure as below. The Reference Block <References></References>. Take note of all the MP Alias we have here as we are going to make the changes later.
     
    <References>
      <Reference Alias="System">
        <ID>System.Library</ID>
        <Version>7.5.8501.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Console">
        <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Console</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Alias_4abf6167_4f79_420b_8298_ce31122ccc13">
        <ID>System.WorkItem.ServiceRequest.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Alias_aa12e492_373f_4982_84e7_5f6d9aaecfd0">
        <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Alias_dc4536b8_6957_4c5f_8a28_9735a77583f7">
        <ID>ServiceManager.ServiceRequest.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Alias_4beae92b_9cc4_472e_8ad8_73d7812c935c">
        <ID>System.WorkItem.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Alias_00bb6718_aab4_4ab1_ac21_7bfa534b698d">
        <ID>System.SupportingItem.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Alias_623a14d4_484d_4024_87a4_1003c5a00a12">
        <ID>System.Knowledge.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Alias_1fc82fed_30aa_43be_9fd2_630046b9935a">
        <ID>System.ServiceCatalog.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
    </References>

3. Now we have to refer to the default MP of Service Request for all the required Projections. You may refer to my post on SCSM 2012 - Exploring Worflow in Sealed MP to extract the XML contents. Below are the extraction from the MP ServiceManager.ServiceRequest.Library. We only focus on 2 main blocks, both <References></References> and <TypeProjections></TypeProjections>.
The References Block
    <References>
      <Reference Alias="System">
        <ID>System.Library</ID>
        <Version>7.5.8501.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="SLACore">
        <ID>System.SLA.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="WorkItem">
        <ID>System.WorkItem.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="CoreService">
        <ID>System.WorkItem.ServiceRequest.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="SCLibrary">
        <ID>Microsoft.SystemCenter.Library</ID>
        <Version>7.0.8432.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Subscriptions">
        <ID>Microsoft.SystemCenter.Subscriptions</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="SMConsole">
        <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Console</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Authoring">
        <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Admin">
        <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Administration</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="CoreActivity">
        <ID>System.WorkItem.Activity.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="CoreKnowledge">
        <ID>System.Knowledge.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="AdminItem">
        <ID>System.AdminItem.Library</ID>
        <Version>7.5.8501.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="SupportingItem">
        <ID>System.SupportingItem.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="SMWorkItem">
        <ID>ServiceManager.WorkItem.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="CoreIncident">
        <ID>System.WorkItem.Incident.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Catalog">
        <ID>System.ServiceCatalog.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
    </References>

The TypeProjections Block
      <TypeProjections>
        <TypeProjection ID="System.WorkItem.ServiceRequestProjection" Accessibility="Public" Type="CoreService!System.WorkItem.ServiceRequest">
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedTo" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemClosedByUser']$" Alias="ClosedBy" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemCreatedByUser']$" Alias="CreatedBy" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAffectedUser']$" Alias="AffectedUser" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemRelatesToConfigItem']$" Alias="RelatedConfigItems" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem']$" Alias="AboutConfigItem" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' TypeConstraint='System!System.Service']$" Alias="AffectedServices" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemRelatesToWorkItem']$" Alias="RelatedWorkItems">
            <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" />
          </Component>
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemRelatesToWorkItem' SeedRole='Target']$" Alias="RelatedWorkItemSource">
            <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" />
          </Component>
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemHasFileAttachment']$" Alias="FileAttachments">
            <Component Path="$Target/Path[Relationship='SupportingItem!System.FileAttachmentAddedByUser']$" Alias="FileAttachmentAddedBy" />
          </Component>
          <Component Path="$Target/Path[Relationship='CoreKnowledge!System.EntityLinksToKnowledgeDocument']$" Alias="RelatedKnowledgeArticles" />
          <Component Path="$Target/Path[Relationship='Catalog!System.WorkItemRelatesToRequestOffering']$" Alias="RelatedRequestOffering" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemHasActionLog' TypeConstraint='WorkItem!System.WorkItem.TroubleTicket.ActionLog']$" Alias="ActionLog" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemHasCommentLog' TypeConstraint='WorkItem!System.WorkItem.TroubleTicket.AnalystCommentLog']$" Alias="AnalystCommentLog" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemHasCommentLog' TypeConstraint='WorkItem!System.WorkItem.TroubleTicket.UserCommentLog']$" Alias="EndUserCommentLog" />
        </TypeProjection>
        <TypeProjection ID="System.WorkItem.ServiceRequestViewProjection" Accessibility="Public" Type="CoreService!System.WorkItem.ServiceRequest">
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedTo" />
        </TypeProjection>
        <TypeProjection ID="System.WorkItem.ServiceRequestAndActivityViewProjection" Accessibility="Public" Type="CoreService!System.WorkItem.ServiceRequest">
          <Component Path="$Target/Path[Relationship='CoreActivity!System.WorkItemContainsActivity']$" Alias="Activity" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedTo" />
        </TypeProjection>
        <TypeProjection ID="System.WorkItem.ServiceRequest.View.SLAProjectionType" Accessibility="Public" Type="CoreService!System.WorkItem.ServiceRequest">
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedTo" />
          <Component Path="$Target/Path[Relationship='SLACore!System.WorkItemHasSLAInstanceInformation' SeedRole='Source' TypeConstraint='SLACore!System.SLA.Instance.TimeInformation']$" Alias="SLAInstances">
            <Component Path="$Context/Path[Relationship='SLACore!System.SLA.Instance.InformationRefersToSLAConfiguration']$" Alias="SLAConfiguration" />
          </Component>
        </TypeProjection>
      </TypeProjections>

4. Once you have identify these required information, we probably have to make a copy of this 2 blocks to a new file as below.

5. Now that we have to go through all the TypeProjection each Component to identify which Alias needed and remove those are not needed. Below are the sample which I have highlighted Alias that we should remain.

6. The next, we have to compare this to the References Block we extracted in Step 2. So we no shift our focus back to the MP we are customizing and we have to compare this and rename all the Aliases if it exist, and to add on which ever not included. Below shows the side by side comparison of a same MP Component.


In the example above, we are going to replace "Alias_4abf6167_4f79_420b_8298_ce31122ccc13" to "CoreService" in the whole customize MP we are working on. After we have replaced all the Alias, it should look something like below in the References Block:

7. Now we have to work on the TypeProjections Block. Copy the whole block and replace the whole <TypeProjections> </TypeProjections>. If this is done correctly, we should get something like this.


The new TypeProjections Block in Customize MP
      <TypeProjections>
        <TypeProjection ID="CustomForm_9fb62a84_7fd2_49f6_af7f_9164602a720c_TypeProjection" Accessibility="Public" Type="CoreService!System.WorkItem.ServiceRequest">
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedTo" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemClosedByUser']$" Alias="ClosedBy" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemCreatedByUser']$" Alias="CreatedBy" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAffectedUser']$" Alias="AffectedUser" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemRelatesToConfigItem']$" Alias="RelatedConfigItems" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem']$" Alias="AboutConfigItem" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' TypeConstraint='System!System.Service']$" Alias="AffectedServices" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemRelatesToWorkItem']$" Alias="RelatedWorkItems">
            <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" />
          </Component>
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemRelatesToWorkItem' SeedRole='Target']$" Alias="RelatedWorkItemSource">
            <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" />
          </Component>
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemHasFileAttachment']$" Alias="FileAttachments">
            <Component Path="$Context/Path[Relationship='SupportingItem!System.FileAttachmentAddedByUser']$" Alias="FileAttachmentAddedBy" />
          </Component>
          <Component Path="$Context/Path[Relationship='CoreKnowledge!System.EntityLinksToKnowledgeDocument']$" Alias="RelatedKnowledgeArticles" />
          <Component Path="$Context/Path[Relationship='Catalog!System.WorkItemRelatesToRequestOffering']$" Alias="RelatedRequestOffering" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemHasActionLog' TypeConstraint='WorkItem!System.WorkItem.TroubleTicket.ActionLog']$" Alias="ActionLog" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemHasCommentLog' TypeConstraint='WorkItem!System.WorkItem.TroubleTicket.AnalystCommentLog']$" Alias="AnalystCommentLog" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemHasCommentLog' TypeConstraint='WorkItem!System.WorkItem.TroubleTicket.UserCommentLog']$" Alias="EndUserCommentLog" />
        </TypeProjection>
<TypeProjection ID="System.WorkItem.ServiceRequestViewProjection" Accessibility="Public" Type="CoreService!System.WorkItem.ServiceRequest">
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedTo" />
        </TypeProjection>
        <TypeProjection ID="System.WorkItem.ServiceRequestAndActivityViewProjection" Accessibility="Public" Type="CoreService!System.WorkItem.ServiceRequest">
          <Component Path="$Target/Path[Relationship='CoreActivity!System.WorkItemContainsActivity']$" Alias="Activity" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedTo" />
        </TypeProjection>
        <TypeProjection ID="System.WorkItem.ServiceRequest.View.SLAProjectionType" Accessibility="Public" Type="CoreService!System.WorkItem.ServiceRequest">
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedTo" />
          <Component Path="$Target/Path[Relationship='SLACore!System.WorkItemHasSLAInstanceInformation' SeedRole='Source' TypeConstraint='SLACore!System.SLA.Instance.TimeInformation']$" Alias="SLAInstances">
            <Component Path="$Context/Path[Relationship='SLACore!System.SLA.Instance.InformationRefersToSLAConfiguration']$" Alias="SLAConfiguration" />
          </Component>
        </TypeProjection>
      </TypeProjections>

8. Now, The idea of doing is to instruct the Class does not target the Form directly, instead having it to target to the Projections. In order to do so, we have to change the below to the same



9. Save the XML file. We have just done customising the MP. The XML should look as below
<ManagementPack ContentReadable="true" SchemaVersion="2.0" OriginalSchemaVersion="1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <Manifest>
    <Identity>
      <ID>CMY_SRF_Extension_RequestVM</ID>
      <Version>1.0.0.0</Version>
    </Identity>
    <Name>CMY_SRF_Extension_RequestVM</Name>
    <References>
      <Reference Alias="System">
        <ID>System.Library</ID>
        <Version>7.5.8501.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
 <Reference Alias="SLACore">
        <ID>System.SLA.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Console">
        <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Console</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="CoreService">
        <ID>System.WorkItem.ServiceRequest.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Alias_aa12e492_373f_4982_84e7_5f6d9aaecfd0">
        <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Alias_dc4536b8_6957_4c5f_8a28_9735a77583f7">
        <ID>ServiceManager.ServiceRequest.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="WorkItem">
        <ID>System.WorkItem.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
 <Reference Alias="CoreActivity">
        <ID>System.WorkItem.Activity.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="SupportingItem">
        <ID>System.SupportingItem.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="CoreKnowledge">
        <ID>System.Knowledge.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="Catalog">
        <ID>System.ServiceCatalog.Library</ID>
        <Version>7.5.2905.0</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
    </References>
  </Manifest>
  <TypeDefinitions>
    <EntityTypes>
      <ClassTypes>
        <ClassType ID="ClassExtension_756a76f3_e5ec_499a_b2f8_d947352c5557" Accessibility="Public" Abstract="false" Base="CoreService!System.WorkItem.ServiceRequest" Hosted="false" Singleton="false" Extension="true">
          <Property ID="CMY_SRF_Req_VM_Proc" Type="enum" AutoIncrement="false" Key="false" CaseSensitive="false" MaxLength="256" MinLength="0" Required="false" Scale="0" EnumType="CMY_SRF_Req_VM_Proc" />
          <Property ID="CMY_SRF_Req_VM_Mem" Type="enum" AutoIncrement="false" Key="false" CaseSensitive="false" MaxLength="256" MinLength="0" Required="false" Scale="0" EnumType="CMY_SRF_Req_VM_Mem" />
          <Property ID="CMY_SRF_Req_VM_Disk" Type="enum" AutoIncrement="false" Key="false" CaseSensitive="false" MaxLength="256" MinLength="0" Required="false" Scale="0" EnumType="CMY_SRF_Req_VM_Disk" />
          <Property ID="CMY_SRF_Req_VM_OS" Type="enum" AutoIncrement="false" Key="false" CaseSensitive="false" MaxLength="256" MinLength="0" Required="false" Scale="0" EnumType="CMY_SRF_Req_VM_OS" />
        </ClassType>
      </ClassTypes>
      <EnumerationTypes>
        <EnumerationValue ID="CMY_SRF_Req_VM_Proc" Accessibility="Public" />
        <EnumerationValue ID="CMY_SRF_Req_VM_Mem" Accessibility="Public" />
        <EnumerationValue ID="CMY_SRF_Req_VM_Disk" Accessibility="Public" />
        <EnumerationValue ID="CMY_SRF_Req_VM_OS" Accessibility="Public" />
      </EnumerationTypes>
      <TypeProjections>
        <TypeProjection ID="CustomForm_9fb62a84_7fd2_49f6_af7f_9164602a720c_TypeProjection" Accessibility="Public" Type="ClassExtension_756a76f3_e5ec_499a_b2f8_d947352c5557">
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedTo" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemClosedByUser']$" Alias="ClosedBy" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemCreatedByUser']$" Alias="CreatedBy" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAffectedUser']$" Alias="AffectedUser" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemRelatesToConfigItem']$" Alias="RelatedConfigItems" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem']$" Alias="AboutConfigItem" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem' TypeConstraint='System!System.Service']$" Alias="AffectedServices" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemRelatesToWorkItem']$" Alias="RelatedWorkItems">
            <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" />
          </Component>
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemRelatesToWorkItem' SeedRole='Target']$" Alias="RelatedWorkItemSource">
            <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" />
          </Component>
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemHasFileAttachment']$" Alias="FileAttachments">
            <Component Path="$Context/Path[Relationship='SupportingItem!System.FileAttachmentAddedByUser']$" Alias="FileAttachmentAddedBy" />
          </Component>
          <Component Path="$Context/Path[Relationship='CoreKnowledge!System.EntityLinksToKnowledgeDocument']$" Alias="RelatedKnowledgeArticles" />
          <Component Path="$Context/Path[Relationship='Catalog!System.WorkItemRelatesToRequestOffering']$" Alias="RelatedRequestOffering" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemHasActionLog' TypeConstraint='WorkItem!System.WorkItem.TroubleTicket.ActionLog']$" Alias="ActionLog" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemHasCommentLog' TypeConstraint='WorkItem!System.WorkItem.TroubleTicket.AnalystCommentLog']$" Alias="AnalystCommentLog" />
          <Component Path="$Context/Path[Relationship='WorkItem!System.WorkItemHasCommentLog' TypeConstraint='WorkItem!System.WorkItem.TroubleTicket.UserCommentLog']$" Alias="EndUserCommentLog" />
        </TypeProjection>
<TypeProjection ID="System.WorkItem.ServiceRequestViewProjection" Accessibility="Public" Type="CoreService!System.WorkItem.ServiceRequest">
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedTo" />
        </TypeProjection>
        <TypeProjection ID="System.WorkItem.ServiceRequestAndActivityViewProjection" Accessibility="Public" Type="CoreService!System.WorkItem.ServiceRequest">
          <Component Path="$Target/Path[Relationship='CoreActivity!System.WorkItemContainsActivity']$" Alias="Activity" />
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedTo" />
        </TypeProjection>
        <TypeProjection ID="System.WorkItem.ServiceRequest.View.SLAProjectionType" Accessibility="Public" Type="CoreService!System.WorkItem.ServiceRequest">
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedTo" />
          <Component Path="$Target/Path[Relationship='SLACore!System.WorkItemHasSLAInstanceInformation' SeedRole='Source' TypeConstraint='SLACore!System.SLA.Instance.TimeInformation']$" Alias="SLAInstances">
            <Component Path="$Context/Path[Relationship='SLACore!System.SLA.Instance.InformationRefersToSLAConfiguration']$" Alias="SLAConfiguration" />
          </Component>
        </TypeProjection>
      </TypeProjections>
    </EntityTypes>
  </TypeDefinitions>
  <Categories>
    <Category ID="CMY_SRF_Extension_RequestVM.Category" Value="Console!Microsoft.EnterpriseManagement.ServiceManager.ManagementPack">
      <ManagementPackName>CMY_SRF_Extension_RequestVM</ManagementPackName>
      <ManagementPackVersion>1.0.0.0</ManagementPackVersion>
    </Category>
    <Category ID="CategoryId_8126efa6_8cf1_4e1f_bca1_2696dd7f2175" Target="CMY_SRF_Req_VM_Proc" Value="Alias_aa12e492_373f_4982_84e7_5f6d9aaecfd0!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks" />
    <Category ID="CategoryId_0f15361e_87c1_4180_93e7_7956d5a22465" Target="CMY_SRF_Req_VM_Proc" Value="System!VisibleToUser" />
    <Category ID="CategoryId_f4b22fe7_9ef3_4651_86ed_3693230d5ef6" Target="CMY_SRF_Req_VM_Mem" Value="Alias_aa12e492_373f_4982_84e7_5f6d9aaecfd0!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks" />
    <Category ID="CategoryId_b956a371_5b81_4e35_904a_820e435ab53f" Target="CMY_SRF_Req_VM_Mem" Value="System!VisibleToUser" />
    <Category ID="CategoryId_47947c59_59c9_49d7_a5ff_a2bd06c4383f" Target="CMY_SRF_Req_VM_Disk" Value="Alias_aa12e492_373f_4982_84e7_5f6d9aaecfd0!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks" />
    <Category ID="CategoryId_57104359_f601_4f76_a8ad_b60381a32a44" Target="CMY_SRF_Req_VM_Disk" Value="System!VisibleToUser" />
    <Category ID="CategoryId_910c303d_0210_40a8_a5c1_883f2c748c0c" Target="CMY_SRF_Req_VM_OS" Value="Alias_aa12e492_373f_4982_84e7_5f6d9aaecfd0!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks" />
    <Category ID="CategoryId_57e94e2e_599f_4069_bd74_eb153d0322f3" Target="CMY_SRF_Req_VM_OS" Value="System!VisibleToUser" />
  </Categories>
  <Presentation>
    <Forms>
      <Form ID="CustomForm_9fb62a84_7fd2_49f6_af7f_9164602a720c" Accessibility="Public" Target="CustomForm_9fb62a84_7fd2_49f6_af7f_9164602a720c_TypeProjection" BaseForm="Alias_dc4536b8_6957_4c5f_8a28_9735a77583f7!Microsoft.EnterpriseManagement.ServiceManager.Applications.ServiceRequest.Forms.ServiceRequestForm" TypeName="Microsoft.EnterpriseManagement.ServiceManager.Applications.ServiceRequest.Forms.ServiceRequestForm">
        <Category>Form</Category>
        <Customization>
          <AddControl Parent="srFormTabControl" Assembly="PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="System.Windows.Controls.TabItem" Left="381" Top="24" Right="0" Bottom="0" Row="0" Column="0" />
          <AddControl Parent="Grid_1" Assembly="PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="System.Windows.Controls.Grid" Left="491" Top="104" Right="77" Bottom="648" Row="0" Column="0" />
          <Move X="346.096666666667" Y="34">
            <Element Name="Grid_2" />
          </Move>
          <Resize Type="BottomRight" X="-208" Y="0">
            <Element Name="Grid_2" />
          </Resize>
          <Delete>
            <Element Name="Grid_2" />
          </Delete>
          <AddControl Parent="Grid_1" Assembly="Microsoft.EnterpriseManagement.UI.SMControls, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="Microsoft.EnterpriseManagement.UI.WpfControls.ListPicker" Left="394" Top="95" Right="154" Bottom="795" Row="0" Column="0" />
          <PropertyChange Object="ListPicker_1" Property="HorizontalAlignment">
            <NewValue>Right</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="Margin">
            <NewValue>0,95,154,795</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="VerticalAlignment">
            <NewValue>Top</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="Margin">
            <NewValue>0,95,154,0</NewValue>
          </PropertyChange>
          <Delete>
            <Element Name="ListPicker_1" />
          </Delete>
          <AddControl Parent="Grid_1" Assembly="PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="System.Windows.Controls.Label" Left="129" Top="131" Right="519" Bottom="757" Row="0" Column="0" />
          <PropertyChange Object="Label_1" Property="HorizontalAlignment">
            <NewValue>Left</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_1" Property="Margin">
            <NewValue>129,131,0,757</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_1" Property="VerticalAlignment">
            <NewValue>Top</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_1" Property="Margin">
            <NewValue>129,131,0,0</NewValue>
          </PropertyChange>
          <Move X="87" Y="77">
            <Element Name="Label_1" />
          </Move>
          <PropertyChange Object="Label_1" Property="Margin">
            <NewValue>42,54,606,834</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_1" Property="Margin">
            <NewValue>42,54,0,834</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_1" Property="Margin">
            <NewValue>42,54,0,0</NewValue>
          </PropertyChange>
          <Resize Type="BottomRight" X="-183" Y="0">
            <Element Name="Label_1" />
          </Resize>
          <PropertyChange Object="Label_1" Property="Margin">
            <NewValue>42,54,423,834</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_1" Property="Margin">
            <NewValue>42,54,0,834</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_1" Property="Margin">
            <NewValue>42,54,0,0</NewValue>
          </PropertyChange>
          <AddControl Parent="Grid_1" Assembly="Microsoft.EnterpriseManagement.UI.SMControls, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="Microsoft.EnterpriseManagement.UI.WpfControls.ListPicker" Left="82" Top="119" Right="466" Bottom="771" Row="0" Column="0" />
          <PropertyChange Object="ListPicker_1" Property="HorizontalAlignment">
            <NewValue>Left</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="Margin">
            <NewValue>82,119,0,771</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="VerticalAlignment">
            <NewValue>Top</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="Margin">
            <NewValue>82,119,0,0</NewValue>
          </PropertyChange>
          <Move X="40" Y="40.52">
            <Element Name="ListPicker_1" />
          </Move>
          <PropertyChange Object="ListPicker_1" Property="Margin">
            <NewValue>42,78.48,506,812</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="Margin">
            <NewValue>42,78.48,0,812</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="Margin">
            <NewValue>42,78.48,0,0</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="Margin">
            <NewValue>42,78.48,506,812</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="Margin">
            <NewValue>42,78.48,0,812</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="Margin">
            <NewValue>42,78.48,0,0</NewValue>
          </PropertyChange>
          <AddControl Parent="Grid_1" Assembly="PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="System.Windows.Controls.Label" Left="62" Top="146" Right="586" Bottom="742" Row="0" Column="0" />
          <PropertyChange Object="Label_2" Property="HorizontalAlignment">
            <NewValue>Left</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_2" Property="Margin">
            <NewValue>62,146,0,742</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_2" Property="VerticalAlignment">
            <NewValue>Top</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_2" Property="Margin">
            <NewValue>62,146,0,0</NewValue>
          </PropertyChange>
          <Move X="20" Y="20">
            <Element Name="Label_2" />
          </Move>
          <PropertyChange Object="Label_2" Property="Margin">
            <NewValue>42,126,606,762</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_2" Property="Margin">
            <NewValue>42,126,0,762</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_2" Property="Margin">
            <NewValue>42,126,0,0</NewValue>
          </PropertyChange>
          <AddControl Parent="Grid_1" Assembly="Microsoft.EnterpriseManagement.UI.SMControls, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="Microsoft.EnterpriseManagement.UI.WpfControls.ListPicker" Left="50" Top="175" Right="498" Bottom="715" Row="0" Column="0" />
          <PropertyChange Object="ListPicker_2" Property="HorizontalAlignment">
            <NewValue>Left</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_2" Property="Margin">
            <NewValue>50,175,0,715</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_2" Property="VerticalAlignment">
            <NewValue>Top</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_2" Property="Margin">
            <NewValue>50,175,0,0</NewValue>
          </PropertyChange>
          <Move X="8" Y="24.52">
            <Element Name="ListPicker_2" />
          </Move>
          <PropertyChange Object="ListPicker_2" Property="Margin">
            <NewValue>42,150.48,506,740</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_2" Property="Margin">
            <NewValue>42,150.48,0,740</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_2" Property="Margin">
            <NewValue>42,150.48,0,0</NewValue>
          </PropertyChange>
          <Move X="0" Y="0.480000000000018">
            <Element Name="Label_2" />
          </Move>
          <PropertyChange Object="Label_2" Property="Margin">
            <NewValue>42,125.52,606,762</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_2" Property="Margin">
            <NewValue>42,125.52,0,762</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_2" Property="Margin">
            <NewValue>42,125.52,0,0</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_2" Property="Margin">
            <NewValue>42,150.48,506,740</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_2" Property="Margin">
            <NewValue>42,150.48,0,740</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_2" Property="Margin">
            <NewValue>42,150.48,0,0</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="Width">
            <NewValue>60</NewValue>
          </PropertyChange>
          <AddControl Parent="Grid_1" Assembly="Microsoft.EnterpriseManagement.UI.SMControls, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="Microsoft.EnterpriseManagement.UI.WpfControls.ListPicker" Left="110" Top="218" Right="438" Bottom="672" Row="0" Column="0" />
          <PropertyChange Object="ListPicker_3" Property="HorizontalAlignment">
            <NewValue>Left</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>110,218,0,672</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="VerticalAlignment">
            <NewValue>Top</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>110,218,0,0</NewValue>
          </PropertyChange>
          <Move X="68" Y="3">
            <Element Name="ListPicker_3" />
          </Move>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>42,215,506,675</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>42,215,0,675</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>42,215,0,0</NewValue>
          </PropertyChange>
          <AddControl Parent="Grid_1" Assembly="PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="System.Windows.Controls.Label" Left="76" Top="197" Right="572" Bottom="691" Row="0" Column="0" />
          <PropertyChange Object="Label_3" Property="HorizontalAlignment">
            <NewValue>Left</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_3" Property="Margin">
            <NewValue>76,197,0,691</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_3" Property="VerticalAlignment">
            <NewValue>Top</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_3" Property="Margin">
            <NewValue>76,197,0,0</NewValue>
          </PropertyChange>
          <Move X="34" Y="6.48000000000002">
            <Element Name="Label_3" />
          </Move>
          <PropertyChange Object="Label_3" Property="Margin">
            <NewValue>42,190.52,606,697</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_3" Property="Margin">
            <NewValue>42,190.52,0,697</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_3" Property="Margin">
            <NewValue>42,190.52,0,0</NewValue>
          </PropertyChange>
          <Move X="0" Y="-41">
            <Element Name="ListPicker_3" />
          </Move>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>42,256,506,634</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>42,256,0,634</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>42,256,0,0</NewValue>
          </PropertyChange>
          <Move X="0" Y="-9">
            <Element Name="Label_3" />
          </Move>
          <PropertyChange Object="Label_3" Property="Margin">
            <NewValue>42,199.52,606,688</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_3" Property="Margin">
            <NewValue>42,199.52,0,688</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_3" Property="Margin">
            <NewValue>42,199.52,0,0</NewValue>
          </PropertyChange>
          <Move X="0" Y="17">
            <Element Name="ListPicker_3" />
          </Move>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>42,239,506,651</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>42,239,0,651</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>42,239,0,0</NewValue>
          </PropertyChange>
          <Move X="-263" Y="146.48">
            <Element Name="Label_3" />
          </Move>
          <PropertyChange Object="Label_3" Property="Margin">
            <NewValue>305,53.04,343,835</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_3" Property="HorizontalAlignment">
            <NewValue>Stretch</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_3" Property="Width">
            <NewValue>Auto</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_3" Property="Margin">
            <NewValue>305,53.04,343,0</NewValue>
          </PropertyChange>
          <Move X="-263" Y="161">
            <Element Name="ListPicker_3" />
          </Move>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>305,78,243,812</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="HorizontalAlignment">
            <NewValue>Stretch</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Width">
            <NewValue>Auto</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>305,78,243,0</NewValue>
          </PropertyChange>
          <AddControl Parent="Grid_1" Assembly="PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="System.Windows.Controls.Label" Left="306" Top="185" Right="342" Bottom="703" Row="0" Column="0" />
          <PropertyChange Object="Label_4" Property="Width">
            <NewValue>Auto</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_4" Property="VerticalAlignment">
            <NewValue>Top</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_4" Property="Margin">
            <NewValue>306,185,342,0</NewValue>
          </PropertyChange>
          <Move X="1.09666666666669" Y="59.48">
            <Element Name="Label_4" />
          </Move>
          <PropertyChange Object="Label_4" Property="Margin">
            <NewValue>304.903333333333,125.52,343.096666666667,762</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_4" Property="Margin">
            <NewValue>304.903333333333,125.52,343.096666666667,0</NewValue>
          </PropertyChange>
          <Resize Type="BottomRight" X="-143" Y="0">
            <Element Name="Label_4" />
          </Resize>
          <PropertyChange Object="Label_4" Property="Margin">
            <NewValue>304.903333333333,125.52,200.096666666667,762</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_4" Property="Margin">
            <NewValue>304.903333333333,125.52,200.096666666667,0</NewValue>
          </PropertyChange>
          <Resize Type="BottomRight" X="-142" Y="0">
            <Element Name="Label_3" />
          </Resize>
          <PropertyChange Object="Label_3" Property="Margin">
            <NewValue>305,53.04,201,835</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_3" Property="Margin">
            <NewValue>305,53.04,201,0</NewValue>
          </PropertyChange>
          <AddControl Parent="Grid_1" Assembly="Microsoft.EnterpriseManagement.UI.SMControls, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="Microsoft.EnterpriseManagement.UI.WpfControls.ListPicker" Left="343" Top="165" Right="205" Bottom="725" Row="0" Column="0" />
          <PropertyChange Object="ListPicker_4" Property="Width">
            <NewValue>Auto</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_4" Property="VerticalAlignment">
            <NewValue>Top</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_4" Property="Margin">
            <NewValue>343,165,205,0</NewValue>
          </PropertyChange>
          <Move X="38.0966666666667" Y="15">
            <Element Name="ListPicker_4" />
          </Move>
          <PropertyChange Object="ListPicker_4" Property="Margin">
            <NewValue>304.903333333333,150,243.096666666667,740</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_4" Property="Margin">
            <NewValue>304.903333333333,150,243.096666666667,0</NewValue>
          </PropertyChange>
          <Resize Type="BottomRight" X="-128" Y="0">
            <Element Name="ListPicker_4" />
          </Resize>
          <PropertyChange Object="ListPicker_4" Property="Margin">
            <NewValue>304.903333333333,150,115.096666666667,740</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_4" Property="Margin">
            <NewValue>304.903333333333,150,115.096666666667,0</NewValue>
          </PropertyChange>
          <Resize Type="BottomRight" X="-85" Y="0">
            <Element Name="Label_4" />
          </Resize>
          <PropertyChange Object="Label_4" Property="Margin">
            <NewValue>304.903333333333,125.52,115.096666666667,762</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_4" Property="Margin">
            <NewValue>304.903333333333,125.52,115.096666666667,0</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>305,78,291,812</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>305,78,291,0</NewValue>
          </PropertyChange>
          <Resize Type="BottomRight" X="-52" Y="0">
            <Element Name="ListPicker_3" />
          </Resize>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>305,78,239,812</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_3" Property="Margin">
            <NewValue>305,78,239,0</NewValue>
          </PropertyChange>
          <Resize Type="BottomRight" X="25" Y="0">
            <Element Name="ListPicker_4" />
          </Resize>
          <PropertyChange Object="ListPicker_4" Property="Margin">
            <NewValue>304.903333333333,150,140.096666666667,740</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_4" Property="Margin">
            <NewValue>304.903333333333,150,140.096666666667,0</NewValue>
          </PropertyChange>
          <PropertyChange Object="TabItem_1" Property="Header">
            <NewValue>Request VM</NewValue>
          </PropertyChange>
          <PropertyBindingChange Object="Label_1" Property="Content">
            <NewBinding Enabled="False" />
          </PropertyBindingChange>
          <PropertyChange Object="Label_1" Property="Content">
            <NewValue>VM Processor</NewValue>
          </PropertyChange>
          <PropertyBindingChange Object="Label_2" Property="Content">
            <NewBinding Enabled="False" />
          </PropertyBindingChange>
          <PropertyChange Object="Label_2" Property="Content">
            <NewValue>VM Memory (GB)</NewValue>
          </PropertyChange>
          <Resize Type="BottomRight" X="-19" Y="0">
            <Element Name="Label_2" />
          </Resize>
          <PropertyChange Object="Label_2" Property="Margin">
            <NewValue>42,125.52,587,762</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_2" Property="Margin">
            <NewValue>42,125.52,0,762</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_2" Property="Margin">
            <NewValue>42,125.52,0,0</NewValue>
          </PropertyChange>
          <PropertyBindingChange Object="Label_3" Property="Content">
            <NewBinding Enabled="False" />
          </PropertyBindingChange>
          <PropertyChange Object="Label_3" Property="Content">
            <NewValue>Disk Capacity (GB)</NewValue>
          </PropertyChange>
          <PropertyBindingChange Object="Label_4" Property="Content">
            <NewBinding Enabled="False" />
          </PropertyBindingChange>
          <PropertyChange Object="Label_4" Property="Content">
            <NewValue>Operating System</NewValue>
          </PropertyChange>
          <Resize Type="BottomRight" X="25" Y="0">
            <Element Name="Label_4" />
          </Resize>
          <PropertyChange Object="Label_4" Property="Margin">
            <NewValue>304.903333333333,125.52,140.096666666667,762</NewValue>
          </PropertyChange>
          <PropertyChange Object="Label_4" Property="Margin">
            <NewValue>304.903333333333,125.52,140.096666666667,0</NewValue>
          </PropertyChange>
          <PropertyChange Object="ListPicker_1" Property="ParentCategoryId">
            <NewValue>99de03b3-7821-66d2-28ec-29aeb9c9530b</NewValue>
          </PropertyChange>
          <PropertyBindingChange Object="ListPicker_1" Property="SelectedItem">
            <NewBinding Enabled="True" Path="CMY_SRF_Req_VM_Proc" Mode="TwoWay" BindsDirectlyToSource="False" UpdateSourceTrigger="PropertyChanged" />
          </PropertyBindingChange>
          <PropertyChange Object="ListPicker_3" Property="ParentCategoryId">
            <NewValue>07c4d6ed-3c41-8e76-0ac7-1834bfbb45c0</NewValue>
          </PropertyChange>
          <PropertyBindingChange Object="ListPicker_3" Property="SelectedItem">
            <NewBinding Enabled="True" Path="CMY_SRF_Req_VM_Mem" Mode="TwoWay" BindsDirectlyToSource="False" UpdateSourceTrigger="PropertyChanged" />
          </PropertyBindingChange>
          <PropertyChange Object="ListPicker_4" Property="ParentCategoryId">
            <NewValue>083b6cbf-eb05-7593-0843-33370fd2117f</NewValue>
          </PropertyChange>
          <PropertyBindingChange Object="ListPicker_4" Property="SelectedItem">
            <NewBinding Enabled="True" Path="CMY_SRF_Req_VM_OS" Mode="TwoWay" BindsDirectlyToSource="False" UpdateSourceTrigger="PropertyChanged" />
          </PropertyBindingChange>
          <PropertyChange Object="ListPicker_2" Property="ParentCategoryId">
            <NewValue>07c4d6ed-3c41-8e76-0ac7-1834bfbb45c0</NewValue>
          </PropertyChange>
          <PropertyBindingChange Object="ListPicker_2" Property="SelectedItem">
            <NewBinding Enabled="True" Path="CMY_SRF_Req_VM_Mem" Mode="TwoWay" BindsDirectlyToSource="False" UpdateSourceTrigger="PropertyChanged" />
          </PropertyBindingChange>
        </Customization>
      </Form>
    </Forms>
  </Presentation>
  <LanguagePacks>
    <LanguagePack ID="ENU" IsDefault="true">
      <DisplayStrings>
        <DisplayString ElementID="CMY_SRF_Extension_RequestVM">
          <Name>CMY_SRF_Extension_RequestVM</Name>
        </DisplayString>
        <DisplayString ElementID="ClassExtension_756a76f3_e5ec_499a_b2f8_d947352c5557">
          <Name>Service Request - Class Extension - Request VM</Name>
          <Description>Extension of class Service Request</Description>
        </DisplayString>
        <DisplayString ElementID="ClassExtension_756a76f3_e5ec_499a_b2f8_d947352c5557" SubElementID="CMY_SRF_Req_VM_Proc">
          <Name>CMY_SRF_Req_VM_Proc</Name>
        </DisplayString>
        <DisplayString ElementID="ClassExtension_756a76f3_e5ec_499a_b2f8_d947352c5557" SubElementID="CMY_SRF_Req_VM_Mem">
          <Name>CMY_SRF_Req_VM_Mem</Name>
        </DisplayString>
        <DisplayString ElementID="ClassExtension_756a76f3_e5ec_499a_b2f8_d947352c5557" SubElementID="CMY_SRF_Req_VM_Disk">
          <Name>CMY_SRF_Req_VM_Disk</Name>
        </DisplayString>
        <DisplayString ElementID="ClassExtension_756a76f3_e5ec_499a_b2f8_d947352c5557" SubElementID="CMY_SRF_Req_VM_OS">
          <Name>CMY_SRF_Req_VM_OS</Name>
        </DisplayString>
        <DisplayString ElementID="CMY_SRF_Req_VM_Proc">
          <Name>Service Request VM Processor</Name>
          <Description></Description>
        </DisplayString>
        <DisplayString ElementID="CMY_SRF_Req_VM_Mem">
          <Name>Service Request VM Memory</Name>
          <Description></Description>
        </DisplayString>
        <DisplayString ElementID="CMY_SRF_Req_VM_Disk">
          <Name>Service Request VM Disk Capacity</Name>
          <Description></Description>
        </DisplayString>
        <DisplayString ElementID="CMY_SRF_Req_VM_OS">
          <Name>Service Request VM OS</Name>
          <Description></Description>
        </DisplayString>
        <DisplayString ElementID="CustomForm_9fb62a84_7fd2_49f6_af7f_9164602a720c">
          <Name>Microsoft.EnterpriseManagement.ServiceManager.Applications.ServiceRequest.Forms.ServiceRequestForm  (Customized)</Name>
          <Description>Microsoft.EnterpriseManagement.ServiceManager.Applications.ServiceRequest.Forms.ServiceRequestForm  (Customized)</Description>
        </DisplayString>
      </DisplayStrings>
    </LanguagePack>
  </LanguagePacks>
</ManagementPack>

That is all for now. We have the MP in XML, next post we will be focusing on making a MPB (Management Pack Bundle) for the MP.

Extending Service Request Form - Part 2 (Extending SR Form)

Extending Service Request Form Series
Extending Service Request Form - Part 1 (Extending SR Class)
Extending Service Request Form - Part 2 (Extending SR Form)
Extending Service Request Form - Part 3 (Customizing the MP)

From the previous post Extending Service Request Form - Part 1 (Extending SR Class), we have gone through on how can we extend the Class of Service Request. The next that we going to do is to extend the Service Request form, which we will cover in this post.


1. Go to the Form Browser. you have to locate the out-of-box SR Form. Search with keyword servicerequestform. Right-click the form and select View.


2. At the Management Pack Explorer, right-click the form and select Extend Class.


3. At the result pane where to form loaded, click Customize.


4. From the Form Customization Toolbox, drag the Tab Item to create a new tab in the SR Form.


5. A new tab item is now available with a black page.

 6. Drag the rest of the needed items. In this scenario, we are going to use both Label and List Picker.


7. For each Label you have place in the form, rename it to a friendly name for each.


8. And for the List Picker, we have to bind thins list to each Class we have extended earlier. Right-click the List Picker and select Edit Binding Path.


9. At the Details page, select to bind the path.


 10. Select the Class that reflect the List Picker. We have to repeat step 8 to 10 for each List Picker.


On we have all these done, we are now ready to work on the Management Pack coding. Of Course the first think, DO NOT FORGET TO SAVE THE MP. As for this time we are NOT going to SEAL the MP first. A long way of code needed to be alter which will be covered next post.


Monday, March 3, 2014

Extending Service Request Form - Part 1 (Extending SR Class)

Throughout my experiences in implementing Service Manager 2012 (SCSM) for enterprise organisation, one of the challenge that repeat itself in each project is Service Request Fulfilment (SR).

For those who has come across the SR module of SCSM 2012, SCSM 2012 SP1 and SCSM 2012 R2, I am sure you will find that the SR Form out-of-box is nothing to fancy about. Instead you may find it very constraint and you barely can make anything out of it. Say for scenario below that you achieve which I am quite sure you could not achieve these

Scenario 1: Request Offering to Create AD Account
IT People always as how can I delegate this to HR Department (maybe) and there can request AD account through SSP. The challenge is how do you ask and map information such as First Name, Last Name, Middle Name, Proposed Username and etc. Well, asking the HR to use the "Description" box maybe a solution, but often they find it not practical.

Scenario 2: Request Offering to Request VM
Again, how could the IT Department allow the Business Unit to request for a virtual server. While the IT infrastructure is operating on a Private Cloud Concept, there is no practical way for user to request a VM with specific specification such as Processor, Memory, Operating System require.

Most of the people I come across they find it SR module of SM is not user friendly as why "M" does not consider all of this.

Well, it time to look from another angle. Service request is a very subjective module of all. You can have... ALL SORT OF REQUESTS...literally. To think about this, how could we expect "M" to make all sort of forms that could suit all of us. Of course "M" don't do that. That's where we come into picture, to understand user requirement and EXTEND the existing SR form.

Extending the SR form simply means to introduce more "field" to the form to capture the require information. This field is then use in Request Offering and publish through SSP as and interface to end user.

The rest of this topic explain how to extend the SR form to make request such as "Request VM" through SR possible and more practical.

Requirement
1. Service Manager 2012 - Management Server (of course)
2. Service Manager 2012 - Development Management Server (Good to have)
3. Service Manager console
4. Service Manager Authoring Tool
5. Basic understanding of SCSM Projection, Class and Management Pack Components
6. Knowledge in Visual Studio and programming is added advantage (no kidding)

Extending Service Request Form Series
Extending Service Request Form - Part 1 (Extending SR Class)
Extending Service Request Form - Part 2 (Extending SR Form)
Extending Service Request Form - Part 3 (Customizing the MP)

Extending Service Request Class

1. Install the SM Authoring Tool either on the Management Server or on your desktop.

2. Launch the SM Authoring Tool. Click on "New" to create a new Management pack for SM.


3. I created the MP with name "CMY_SRF_Extension_RequestVM"


4. Review the new MP created


5. At the Class Browser pane, select System Work Item Service Request Library and search for Service Request class. Right-click the class and select View.


6. Back to the Management Pack Explorer, you will see Service Request class listed under the sealed MP of System Work Item Service Request Library. Right-click Service Request class and select Extend class.


7. Review the changes will be saved in the MP that we have created earlier, click OK.


8. Lets name the extended class.


9. In the result pane, click Create property. We name the propoerty as CMY_SRF_Req_VM_Proc. This is the property we create to capture information of VM Processor Count in request.


10. Right-click the property create and select Edit data type.


11. Select List.


 12. Select the List that will be use by this property.


13. Repeat step 11 to 12 for all the items.


We are now done with the SR Class extension. Next we will focus on extending SR Form.