Showing posts with label Service Manager 2012. Show all posts
Showing posts with label Service Manager 2012. 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.


Saturday, March 8, 2014

SCSM 2012 - Exploring Worflow in Sealed MP

Few days ago, I posted a question to TechNet to ask around if anyone come across any way to explore or see what is inside a sealed MP in SCSM 2012. My thread SCSM 2012 - Workflow customization. Thank you so much for those who answer my post.

For those who has been dealing with SM Authoring Tool, I believe you are familiar in Extending the Class and Form. But do you notice you cannot copy or extend the Workflow from an existing sealed MP ?

Below screen capture is from SM Authoring Tool showing the contents of Service Manager Change Management Library (a Sealed MP). What if we want to see how does the workflow look like ?


I come across a very good blog that tells how we could access to a sealed MP through SQL Queries.

DISCLAIMER: USING SQL QUERIES TO ACCESS SCSM CONTENT IS NOT SUPPORTED AND RECOMMENDED BY MICROSOFT. BE SURE YOU ARE WIDE AWAKE WHEN YOU ARE DOING THIS.

At the SCSM Management Server, launch MS SQL Management Studio. Connect to Database Engine and execute the query below

#SQL Query
Use ServiceManager
select MPName, CONVERT(xml,MPXML) from ManagementPack order by MPName
 

Now we can locate the MP that we want and noticed the column next to MP Name. Those are the Management Pack in XML !!! Click on it and you will get the entire MP contents in XML.


Now I can take a closer look on the Activity Status Changed workflow, and it looks as below


Activity Status Changed Rule

<Rule ID="ServiceManager.ChangeManagement.ActivityStatusChangedRule" Enabled="true" Target="System.WorkItem.ChangeRequest.InternalWorkflowTarget" ConfirmDelivery="true" Remotable="true" Priority="Normal" DiscardLevel="100">
        <Category>System</Category>
        <DataSources>
          <DataSource ID="DS" TypeID="Subscriptions!Microsoft.SystemCenter.CmdbInstanceSubscription.DataSourceModule">
            <Subscription>
              <InstanceSubscription Type="$MPElement[Name='CoreActivity!System.WorkItem.Activity']$">
                <UpdateInstance>
                  <Criteria>
                    <Expression>
                      <Or>
                        <Expression>
                          <And>
                            <Expression>
                              <SimpleExpression>
                                <ValueExpression>
                                  <Property State="Pre">$Context/Property[Type='CoreActivity!System.WorkItem.Activity']/Status$</Property>
                                </ValueExpression>
                                <Operator>Equal</Operator>
                                <ValueExpression>
                                  <Value>$MPElement[Name="CoreActivity!ActivityStatusEnum.Active"]$</Value>
                                </ValueExpression>
                              </SimpleExpression>
                            </Expression>
                            <Expression>
                              <SimpleExpression>
                                <ValueExpression>
                                  <Property State="Post">$Context/Property[Type='CoreActivity!System.WorkItem.Activity']/Status$</Property>
                                </ValueExpression>
                                <Operator>NotEqual</Operator>
                                <ValueExpression>
                                  <Value>$MPElement[Name="CoreActivity!ActivityStatusEnum.Active"]$</Value>
                                </ValueExpression>
                              </SimpleExpression>
                            </Expression>
                          </And>
                        </Expression>
                        <Expression>
                          <And>
                            <Expression>
                              <UnaryExpression>
                                <ValueExpression>
                                  <Property State="Pre">$Context/Property[Type='CoreActivity!System.WorkItem.Activity']/Status$</Property>
                                </ValueExpression>
                                <Operator>IsNull</Operator>
                              </UnaryExpression>
                            </Expression>
                            <Expression>
                              <SimpleExpression>
                                <ValueExpression>
                                  <Property State="Post">$Context/Property[Type='CoreActivity!System.WorkItem.Activity']/Status$</Property>
                                </ValueExpression>
                                <Operator>Equal</Operator>
                                <ValueExpression>
                                  <Value>$MPElement[Name="CoreActivity!ActivityStatusEnum.Ready"]$</Value>
                                </ValueExpression>
                              </SimpleExpression>
                            </Expression>
                          </And>
                        </Expression>
                      </Or>
                    </Expression>
                  </Criteria>
                </UpdateInstance>
              </InstanceSubscription>
              <!--<StartWatermark>1</StartWatermark>-->
              <PollingIntervalInSeconds>10</PollingIntervalInSeconds>
              <BatchSize>100</BatchSize>
            </Subscription>
          </DataSource>
        </DataSources>
        <WriteActions>
          <WriteAction ID="WindowsWorkflow" TypeID="Subscriptions!Microsoft.EnterpriseManagement.SystemCenter.Subscription.WindowsWorkflowTaskWriteAction">
            <Subscription>
              <WindowsWorkflowConfiguration>
                <AssemblyName>Microsoft.EnterpriseManagement.ServiceManager.ChangeManagement.Workflows</AssemblyName>
                <WorkflowTypeName>Microsoft.EnterpriseManagement.ServiceManager.ChangeManagement.Workflows.ActivityStatusChangedWorkflow</WorkflowTypeName>
                <WorkflowParameters>
                  <WorkflowParameter Name="InstanceId" Type="guid">$Data/BaseManagedEntityId$</WorkflowParameter>
                </WorkflowParameters>
                <RetryExceptions />
                <RetryDelaySeconds>11</RetryDelaySeconds>
                <MaximumRunningTimeSeconds>7200</MaximumRunningTimeSeconds>
              </WindowsWorkflowConfiguration>
            </Subscription>
          </WriteAction>
        </WriteActions>
      </Rule>