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

Thursday, August 23, 2012

How to get all SharePoint Users with web services in c#


SPservice.UserGroup usergroup = new SPservice.UserGroup();
usergroup.Credentials = System.Net.CredentialCache.DefaultCredentials;

XmlNode allusers = usergroup.GetAllUserCollectionFromWeb();

foreach (XmlNode child in allusers.ChildNodes) {
                            foreach (XmlNode item in child) {
                                  foreach (XmlAttribute atr in item.Attributes) {
                                              if (atr.Name.ToString() == "LoginName") {
                                              MessageBox.Show(atr.OuterXml);
                                              }
                              }
                }
}

SPservice - name of web reference in your visual studio project with URL:
http://<your server name>/_vti_bin/usergroup.asmx