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:  } 
