The following code example demonstrates how to route an incident from a user's work-in-progress queue to another queue.
1: //# Route an Incident from a User to a Queue
2: using System;
3: using CrmSdk;
4: using Microsoft.Crm.Sdk.Utility;
5: 6: namespace Microsoft.Crm.Sdk.HowTo
7: {8: public class HowToRoute
9: {10: static void Main(string[] args)
11: {12: // TODO: Change the server URL and organization to match your Microsoft
13: // Dynamics CRM Server and Microsoft Dynamics CRM organization.
14: HowToRoute.Run("http://localhost:5555", "CRM_SDK");
15: } 16: 17: public static bool Run(string crmServerUrl, string orgName)
18: {19: bool success = false;
20: 21: try
22: {23: // Set up the CRM Service.
24: CrmService service = CrmServiceUtility.GetCrmService(crmServerUrl, orgName); 25: 26: // Get the ID of the system user.
27: WhoAmIRequest userRequest = new WhoAmIRequest();
28: WhoAmIResponse user = (WhoAmIResponse)service.Execute(userRequest); 29: 30: #region Setup Data Required for this Sample
31: // Create a new customer account.
32: account myAccount = new account();
33: myAccount.name = "A Bike Store";
34: Guid accountID = service.Create(myAccount); 35: 36: // Create a new subject.
37: subject mySubject = new subject();
38: mySubject.title = "Bicycles";
39: Guid subjectID = service.Create(mySubject); 40: 41: // Create a new incident.
42: incident incident = new incident();
43: 44: Customer myCustomer = new Customer();
45: myCustomer.Value = accountID; 46: myCustomer.type = EntityName.account.ToString(); 47: incident.customerid = myCustomer; 48: 49: Lookup subjectLookup = new Lookup();
50: subjectLookup.Value = subjectID; 51: subjectLookup.type = EntityName.subject.ToString(); 52: incident.subjectid = subjectLookup; 53: 54: incident.title = "Broken Chain";
55: Guid incidentID = service.Create(incident); 56: 57: // Create a new public Bicycle Cases queue.
58: queue publicQueue = new queue();
59: 60: Lookup businessLookup = new Lookup();
61: businessLookup.Value = user.BusinessUnitId; 62: businessLookup.type = EntityName.businessunit.ToString(); 63: publicQueue.businessunitid = businessLookup; 64: 65: Lookup userLookup = new Lookup();
66: userLookup.Value = user.UserId; 67: userLookup.type = EntityName.systemuser.ToString(); 68: publicQueue.primaryuserid = userLookup; 69: 70: Picklist plist = new Picklist();
71: plist.name = "Public";
72: plist.Value = 1; 73: publicQueue.queuetypecode = plist; 74: 75: publicQueue.name = "Bicycle Cases";
76: Guid publicQueueID = service.Create(publicQueue);77: #endregion
78: 79: // Find the WIP queue for the user who currently owns the incident.
80: // The queue type code for a WIP queue is 3.
81: QueryByAttribute query = new QueryByAttribute();
82: // Be aware that using AllColumns may adversely affect
83: // performance and cause unwanted cascading in subsequent
84: // updates. A best practice is to retrieve the least amount of
85: // data required.
86: query.ColumnSet = new AllColumns();
87: query.EntityName = EntityName.queue.ToString();88: query.Attributes = new string[] { "primaryuserid", "queuetypecode" };
89: query.Values = new string[] { user.UserId.ToString(), "3" };
90: BusinessEntityCollection results = service.RetrieveMultiple(query); 91: 92: queue wipQueue = (queue)results.BusinessEntities[0]; 93: 94: // Create a Target object that refers to the incident.
95: TargetQueuedIncident target = new TargetQueuedIncident();
96: // SDK:target.EntityId = new Guid("A0F2D8FE-6468-DA11-B748-000D9DD8CDAC");
97: target.EntityId = incidentID; 98: 99: // Route the incident from the WIP queue to the public queue.
100: RouteRequest route = new RouteRequest();
101: route.Target = target; 102: route.RouteType = RouteType.Queue;103: // SDK:route.EndpointId = new Guid("A0F2D8FE-6468-DA11-C748-000D9DD8CDAC");
104: route.EndpointId = publicQueueID;105: // SDK:route.SourceQueueId = new Guid("A0F2D8FE-6468-DA11-D748-000D9DD8CDAC");
106: route.SourceQueueId = wipQueue.queueid.Value; 107: 108: RouteResponse routed = null;
109: routed = (RouteResponse)service.Execute(route); 110: 111: #region check success
112: 113: if (routed != null) success = true;
114: 115: #endregion
116: 117: #region Remove Data Required for this Sample
118: 119: service.Delete(EntityName.incident.ToString(), incidentID); 120: service.Delete(EntityName.queue.ToString(), publicQueueID); 121: service.Delete(EntityName.subject.ToString(), subjectID); 122: service.Delete(EntityName.account.ToString(), accountID); 123: 124: #endregion
125: }126: catch (System.Web.Services.Protocols.SoapException ex)
127: {128: Console.WriteLine(String.Format("{0}. {1}", ex.Message, ex.Detail.InnerText));
129: } 130: 131: return success;
132: } 133: } 134: }
No comments:
Post a Comment