Showing posts with label C#. Show all posts
Showing posts with label C#. Show all posts

Thursday, August 30, 2012

SCSM Creating Manual Activity for Incident in C#


Some time ago I had to develope application that could connect two systems: Microsoft Dynamics CRM & SCSM (Microsoft System Center Service Manager). The main purpose of this application is to synchronize data between two applications.

In this article i will show you only some little part (but maybe one of the  toughest for me...) of my application code.
I will continue to post some other usefull parts from this project. 

The code consists of 3 main steps:

1. Create relationship between incident & manual activity
2. Create manual activity
3. Assign created activity to incident

There is good post about creating incident in SCSM which really helped me out: http://blogs.technet.com/b/servicemanager/archive/2009/08/09/the-system-center-platform-in-service-manager-part-3-the-data-access-service-try-it.aspx

//Create relationship between incident & manual acticvity
ManagementPackRelationship workItemContainsActivityRelationship =
mg.EntityTypes.GetRelationshipClass(new Guid("2DA498BE-0485-B2B2-D520-6EBD1698E61B"));
                                             
CreatableEnterpriseManagementRelationshipObject AssignedToIncident = 

new CreatableEnterpriseManagementRelationshipObject(mg, workItemContainsActivityRelationship);

//Create Manual Activity
CreatableEnterpriseManagementObject activityItemObject = 

new CreatableEnterpriseManagementObject(mg, classManualActivity);
Guid newActivityGuid = Guid.NewGuid();
                                             
activityItemObject[classManualActivity, "Id"].Value = newActivityGuid.ToString();                                              
activityItemObject[classManualActivity, "Title"].Value = "<Title>";
activityItemObject[classManualActivity, "Description"].Value = "<Description>";

                                             
EnterpriseManagementObjectGenericCriteria genericCr = 

new EnterpriseManagementObjectGenericCriteria("Id == '" + <SCSM Incident Id>.ToString() + "'");
IObjectReader<EnterpriseManagementObject> reader = mg.EntityObjects.GetObjectReader<EnterpriseManagementObject>(genericCr, ObjectQueryOptions.Default);


 if (reader != null && reader.Count > 0) {
foreach (EnterpriseManagementObject obj in reader) {

AssignedToIncident.SetSource(obj);
AssignedToIncident.SetTarget(activityItemObject);

IncrementalDiscoveryData dd = new IncrementalDiscoveryData();
dd.Add(activityItemObject);
dd.Add(AssignedToIncident);
dd.Overwrite(mg);

//Assign Manual Activity to Incident
AssignedToIncident.Commit();
         }
}