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();
}
}