Condividi tramite


Custom Activity with User Picker in Service Manager 2012

Well, so we need to create an extended Manual Activity Class/Form or a brand new custom Activity Class/Form and we want to have a new User Picker (or Single Instance Picker) on the Form to be able to select a User (or CI) which is somehow related to this Activity. Pretty easy huh? Well ... yeah, but there's something that we still need to do extra in Notepad (or your favorite XML editor) after we are done with this in the Authoring Console.

I am going to consider that you "know" the next steps having read the SM 2012 Authoring Guide.

1. So let's start in the SM 2012 Authoring Console and create a new Management Pack which we will name MyCustomActivityMP.

2. Create a new class which has the Activity class as base and call this MyActivity

3. Now delete the automatically created property Property_33.

4. Create a new Relationship for the MyActivity class and call this MyUserRelationship.

5. Now for the MyUserRelationship relationship, choose Domain User or Group (for example) as target class

6. Now create a new Form, choose your new class MyActivity as target class and call the new form MyActivityForm.

7. Add a new User Picker control to the MyActivityForm and now choose MyUserRelationship from the MyActivity class as Binding Path for the User Picker.

Aaand we are done! ... no wait ... we are not done, it seams that if import this MP and try to use it we won't get our associated user saved in an Activity of our new type. But why is this? Well as you may have noticed we did not create a new Property in our class to achieve this, but instead we created a new Relationship. For other objects to "know" about new relationships, these need to be included as components of TypeProjections. So what we need to do now is to somehow make sure that we include our new relationship to the "default" TypeProjection definition of the Activity Tab Form Type Projections which is defined for the Microsoft.EnterpriseManagement.ServiceManager.ActivityManagement.Controls.ActivityControl form and in the Microsoft.EnterpriseManagement.ServiceManager.ActivityManagement.Forms.ManualActivityForm form. So you need to also perform the next steps in the Authoring Console so that you will have the TypeProjection definition for both of these components in your Management Pack  MyCustomActivityMP.

8. In the Class Browser look in Forms for the Microsoft.EnterpriseManagement.ServiceManager.ActivityManagement.Controls.ActivityControl form and choose View, then Customize and choose the current MP for saving the customization MyCustomActivityMP (this can be also done on a separate MP but then you need to have this one sealed and the new one will reference this one, etc. - check the Authoring Guide).

9. Now do the exact same thing for the Microsoft.EnterpriseManagement.ServiceManager.ActivityManagement.Forms.ManualActivityForm form.

10. Cool - now save the Management Pack and close the SM 2012 Authoring Console.

11. We need to add the new Relationship now to the TypeProjection definitions but we cannot do this from the Authoring Console so we will open our new MyCustomActivityMP MP in our favorite XML editor or Notepad.

12. Look for the definition of the MyUserRelationship, which in this example looks like this:

  <RelationshipType ID="MyUserRelationship" Accessibility="Public" Abstract="false" Base="System!System.Reference"><br>    <Source ID="Source_71260dc2_94e5_44e9_928b_a3fd7fc36fce" MinCardinality="0" MaxCardinality="2147483647" Type="MyActivity" /><br>    <Target ID="Target_9ab71906_fd67_43ea_9f8c_31f0886fa204" MinCardinality="0" MaxCardinality="1" Type="System!System.Domain.User" /><br> </RelationshipType> 

13. We need to change the Source Type of this Relationship to be System.WorkItem.Activity, but to be able to do this, we need to know the Alias of the System.WorkItem.Activity.Library MP, so we check it's reference which looks like this:

  <Reference Alias="Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf"><br>    <ID>System.WorkItem.Activity.Library</ID><br>    <Version>7.5.2905.0</Version><br>    <PublicKeyToken>31bf3856ad364e35</PublicKeyToken><br> </Reference> 

14. Cool so we can see that the Alias for the System.WorkItem.Activity.Library MP is Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf and now using this we can change the Source Type of our Relationship - like in this example:

  <RelationshipType ID="MyUserRelationship" Accessibility="Public" Abstract="false" Base="System!System.Reference"><br>    <Source ID="Source_71260dc2_94e5_44e9_928b_a3fd7fc36fce" MinCardinality="0" MaxCardinality="2147483647" Type="Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.WorkItem.Activity" /><br>    <Target ID="Target_9ab71906_fd67_43ea_9f8c_31f0886fa204" MinCardinality="0" MaxCardinality="1" Type="System!System.Domain.User" /><br> </RelationshipType> 

15. Good, so now we need to add our new component (Relationship) to the 2 other TypeProjections - but to be able to add this, we need to get the Alias which was generated for our own TypeProjections for our class MyActivity - so we check this:

  <TypeProjection ID="MyActivityForm_TypeProjection" Accessibility="Public" Type="MyActivity"><br>    <Component Path="$Context/Path[Relationship='MyUserRelationship']$" Alias="ComponentAlias_a3638c45_8c3f_4b60_a380_68b4354fe289" /><br></TypeProjection> 

16. We can see now that the Alias we need to use for our component is ComponentAlias_a3638c45_8c3f_4b60_a380_68b4354fe289 and we can observe the fact that we see that this Alias is used for the Binding Path of our User Picker in our own custom Form:

  <Form ID="MyActivityForm" Accessibility="Public" Target="MyActivityForm_TypeProjection" Assembly="Alias_c664c5b8_c5c3_4afb_a5ec_e630bc38dcd7!AuthoringFormsAssembly" TypeName="Microsoft.EnterpriseManagement.ServiceManager.Authoring.Forms.EmptyForm"><br>   <Category>Form</Category><br>   <Customization><br>      <AddControl Parent="Grid_1" Assembly="Microsoft.EnterpriseManagement.UI.SMControls, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="Microsoft.EnterpriseManagement.UI.WpfControls.UserPicker" Left="209" Top="97" Right="211" Bottom="663" Row="0" Column="0" /><br>       <PropertyChange Object="UserPicker_1" Property="Width"><br>          <NewValue>Auto</NewValue><br>       </PropertyChange><br>       <PropertyChange Object="UserPicker_1" Property="VerticalAlignment"><br>          <NewValue>Top</NewValue><br>       </PropertyChange><br>       <PropertyChange Object="UserPicker_1" Property="Margin"><br>          <NewValue>209,97,211,0</NewValue><br>       </PropertyChange><br>       <PropertyBindingChange Object="UserPicker_1" Property="User"><br>          <NewBinding Enabled="True" Path="ComponentAlias_a3638c45_8c3f_4b60_a380_68b4354fe289" Mode="TwoWay" BindsDirectlyToSource="False" UpdateSourceTrigger="Default" /><br>       </PropertyBindingChange><br>    </Customization><br> </Form> 

17. Now we will add our Relationship as a component of the TypeProjection of the System.WorkItem.Activity.ManualActivity class - so this should now look like this:

  <TypeProjection ID="CustomForm_cd939457_b426_4102_900f_32d0a996f336_TypeProjection" Accessibility="Public" Type="Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.WorkItem.Activity.ManualActivity"><br>    <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.WorkItemContainsActivity' SeedRole='Target']$" Alias="ParentWorkItem" /><br>    <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemCreatedByUser']$" Alias="ActivityCreatedBy" /><br>    <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="ActivityAssignedTo" /><br>    <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAboutConfigItem']$" Alias="ActivityAboutConfigItem" /><br>    <Component Path="$Context/Path[Relationship='MyUserRelationship']$" Alias="ComponentAlias_a3638c45_8c3f_4b60_a380_68b4354fe289" /><br> </TypeProjection> 

18. And now the last step is to add our Relationship as a sub-component of *EVERY* System.WorkItemContainsActivity compoment of the System.WorkItem TypeProjection - like in this example (should be 4 places to add this):

  <TypeProjection ID="CustomForm_727f5557_5b16_4dac_bf30_f7494ea68ccf_TypeProjection" Accessibility="Public" Type="Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItem"><br>    <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.WorkItemContainsActivity']$" Alias="Activity"><br>       <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.WorkItemContainsActivity' SeedRole='Target']$" Alias="ParentWorkItem" /><br>       <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemCreatedByUser']$" Alias="ActivityCreatedBy" /><br>       <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="ActivityAssignedTo" /><br>       <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ActivityCanBeEditedByUser']$" Alias="ActivityCanBeEditedBy" /><br>       <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAboutConfigItem']$" Alias="ActivityAboutConfigItem" /><br>       <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.DependentActivityDependsOnWorkItem' SeedRole='Target']$" Alias="DependentActivity" /><br>       <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemRelatesToConfigItem']$" Alias="RelatedConfigItem" /><br>       <Component Path="$Context/Path[Relationship='MyUserRelationship']$" Alias="ComponentAlias_a3638c45_8c3f_4b60_a380_68b4354fe289" /><br>       <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemRelatesToWorkItem']$" Alias="RelatedWorkItem"><br>          <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" /><br>       </Component><br>       <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemRelatesToWorkItem' SeedRole='Target']$" Alias="RelatedWorkItemSource"><br>          <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" /><br>       </Component><br>       <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemHasFileAttachment']$" Alias="FileAttachment"><br>          <Component Path="$Context/Path[Relationship='Alias_8ad383fe_57ca_49c3_9020_ec5608a3b7b6!System.FileAttachmentAddedByUser']$" Alias="FileAttachmentAddedBy" /><br>       </Component><br>       <Component Path="$Context/Path[Relationship='Alias_9256840e_97a8_48ef_bf9e_203abe8deda4!System.EntityLinksToKnowledgeDocument']$" Alias="RelatedKnowledge" /><br>       <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ReviewActivityHasReviewer']$" Alias="Reviewer"><br>          <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ReviewerIsUser']$" Alias="User" /><br>          <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ReviewerVotedByUser']$" Alias="VotedBy" /><br>       </Component><br>       <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.WorkItemContainsActivity']$" Alias="Activity"><br>          <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.WorkItemContainsActivity' SeedRole='Target']$" Alias="ParentWorkItem" /><br>          <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemCreatedByUser']$" Alias="ActivityCreatedBy" /><br>          <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="ActivityAssignedTo" /><br>          <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ActivityCanBeEditedByUser']$" Alias="ActivityCanBeEditedBy" /><br>          <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAboutConfigItem']$" Alias="ActivityAboutConfigItem" /><br>          <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.DependentActivityDependsOnWorkItem' SeedRole='Target']$" Alias="DependentActivity" /><br>          <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemRelatesToConfigItem']$" Alias="RelatedConfigItem" /><br>          <Component Path="$Context/Path[Relationship='MyUserRelationship']$" Alias="ComponentAlias_a3638c45_8c3f_4b60_a380_68b4354fe289" /><br>          <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemRelatesToWorkItem']$" Alias="RelatedWorkItem"><br>             <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" /><br>          </Component><br>          <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemRelatesToWorkItem' SeedRole='Target']$" Alias="RelatedWorkItemSource"><br>             <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" /><br>          </Component><br>          <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemHasFileAttachment']$" Alias="FileAttachment"><br>             <Component Path="$Context/Path[Relationship='Alias_8ad383fe_57ca_49c3_9020_ec5608a3b7b6!System.FileAttachmentAddedByUser']$" Alias="FileAttachmentAddedBy" /><br>          </Component><br>          <Component Path="$Context/Path[Relationship='Alias_9256840e_97a8_48ef_bf9e_203abe8deda4!System.EntityLinksToKnowledgeDocument']$" Alias="RelatedKnowledge" /><br>          <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ReviewActivityHasReviewer']$" Alias="Reviewer"><br>             <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ReviewerIsUser']$" Alias="User" /><br>             <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ReviewerVotedByUser']$" Alias="VotedBy" /><br>          </Component><br>          <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.WorkItemContainsActivity']$" Alias="Activity"><br>             <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.WorkItemContainsActivity' SeedRole='Target']$" Alias="ParentWorkItem" /><br>             <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemCreatedByUser']$" Alias="ActivityCreatedBy" /><br>             <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="ActivityAssignedTo" /><br>             <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ActivityCanBeEditedByUser']$" Alias="ActivityCanBeEditedBy" /><br>             <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAboutConfigItem']$" Alias="ActivityAboutConfigItem" /><br>             <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.DependentActivityDependsOnWorkItem' SeedRole='Target']$" Alias="DependentActivity" /><br>             <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemRelatesToConfigItem']$" Alias="RelatedConfigItem" /><br>             <Component Path="$Context/Path[Relationship='MyUserRelationship']$" Alias="ComponentAlias_a3638c45_8c3f_4b60_a380_68b4354fe289" /><br>             <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemRelatesToWorkItem']$" Alias="RelatedWorkItem"><br>                <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" /><br>             </Component><br>             <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemRelatesToWorkItem' SeedRole='Target']$" Alias="RelatedWorkItemSource"><br>                <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" /><br>             </Component><br>             <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemHasFileAttachment']$" Alias="FileAttachment"><br>                <Component Path="$Context/Path[Relationship='Alias_8ad383fe_57ca_49c3_9020_ec5608a3b7b6!System.FileAttachmentAddedByUser']$" Alias="FileAttachmentAddedBy" /><br>             </Component><br>             <Component Path="$Context/Path[Relationship='Alias_9256840e_97a8_48ef_bf9e_203abe8deda4!System.EntityLinksToKnowledgeDocument']$" Alias="RelatedKnowledge" /><br>             <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ReviewActivityHasReviewer']$" Alias="Reviewer"><br>                <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ReviewerIsUser']$" Alias="User" /><br>                <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ReviewerVotedByUser']$" Alias="VotedBy" /><br>             </Component><br>             <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.WorkItemContainsActivity']$" Alias="Activity"><br>                <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.WorkItemContainsActivity' SeedRole='Target']$" Alias="ParentWorkItem" /><br>                <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemCreatedByUser']$" Alias="ActivityCreatedBy" /><br>                <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="ActivityAssignedTo" /><br>                <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ActivityCanBeEditedByUser']$" Alias="ActivityCanBeEditedBy" /><br>                <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAboutConfigItem']$" Alias="ActivityAboutConfigItem" /><br>                <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.DependentActivityDependsOnWorkItem' SeedRole='Target']$" Alias="DependentActivity" /><br>                <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemRelatesToConfigItem']$" Alias="RelatedConfigItem" /><br>                <Component Path="$Context/Path[Relationship='MyUserRelationship']$" Alias="ComponentAlias_a3638c45_8c3f_4b60_a380_68b4354fe289" /><br>                <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemRelatesToWorkItem']$" Alias="RelatedWorkItem"><br>                   <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" /><br>                </Component><br>                <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemRelatesToWorkItem' SeedRole='Target']$" Alias="RelatedWorkItemSource"><br>                   <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemAssignedToUser']$" Alias="RelatedWorkItemAssignedTo" /><br>                </Component><br>                <Component Path="$Context/Path[Relationship='Alias_87edd48e_cd87_4615_8185_9bca28f3ece1!System.WorkItemHasFileAttachment']$" Alias="FileAttachment"><br>                   <Component Path="$Context/Path[Relationship='Alias_8ad383fe_57ca_49c3_9020_ec5608a3b7b6!System.FileAttachmentAddedByUser']$" Alias="FileAttachmentAddedBy" /><br>                </Component><br>                <Component Path="$Context/Path[Relationship='Alias_9256840e_97a8_48ef_bf9e_203abe8deda4!System.EntityLinksToKnowledgeDocument']$" Alias="RelatedKnowledge" /><br>                <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ReviewActivityHasReviewer']$" Alias="Reviewer"><br>                   <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ReviewerIsUser']$" Alias="User" /><br>                   <Component Path="$Context/Path[Relationship='Alias_28b710d2_9c07_45e9_a81c_a2b70283c9cf!System.ReviewerVotedByUser']$" Alias="VotedBy" /><br>                </Component><br>             </Component><br>          </Component><br>       </Component><br>    </Component><br> </TypeProjection> 

19. Well now ... we are done! Save this, import and have fun with it!

You need to do this for *every* kind of Relationship you want to add (User Picker or Single Instance Picker). 

 

 Just in case you are wondering why we have 4 entries in the System.WorkItem TypeProjection, it is because of the maximum 4 level of Activity contains Activity relationship "depth".

I have also included a SAMPLE Management Pack which is attached so you can have a look at it and get the general idea on how this should "look".

 

Happy Authoring!

MyCustomActivity.xml

Comments

  • Anonymous
    January 01, 2003
    Hi Mihai ! - Great Blog entry, some questions on it. 1.) What are the effects of not doing it ? - simply no stored Users ? 2.) If i have an extended Manual Activity and use it as an activity of a Service Request in a template, do i have to modify the type projection of the Service reuqest ? 3.) Same with changes i guess ... Thanks / R.

  • Anonymous
    January 01, 2003
    Hi Uttam,

    Because the value entered in the User Picker (some user) in an WorkItem won't get saved.

  • Anonymous
    January 01, 2003
    Hi Roman! Sorry, just noticed now that I had auto-approval for comments off ...

  1. yes, it would totally make no point of creating this extension because it could not be used (User does not get saved)
  2. With all the modifications above, it will work in every situation we have tested
  3. same as 2 :D
  • Anonymous
    November 11, 2013
    Hi Mihai, My requirement is to add a user picker in Service request custom form...and my question is why do I need to do the steps from 8 till 19? As you see in another blog, marcelzehner.ch/.../adding-a-custom-field-to-incident-forms Here, he did not mention any thing like this...he just added the user picker and did the binding...thats it! Please clarify.. Thanks,