Knowledge found and lost while working with Microsoft Dynamics CRM
RSS icon Home icon
  • Retrieving a list of CRM Queues

    Posted on June 18th, 2007 mitch Print Print No comments

    As I'm putting the finishing touches on my first commercial CRM Utility, I found the need to obtain a list of CRM Queues so that the user can select one from a combo box, like this:

    image

    When working with queues, you need to know two things:

    1) The Queue Name ( for the user to see ).

    2) The Queue ID ( for the CRM system to reference ).

    Both of which can be returned by performing a query against the CRM web service.

     

    The following .NET method will return just such a list:

       1: private ArrayList GetQueueNames(CrmService myCRMService)
       2: {
       3:     string fetchString =
       4:         "<fetch version=\"1.0\" "+
       5:         "output-format=\"xml-platform\" "+ 
       6:         "mapping=\"logical\" distinct=\"false\">" +
       7:         "<entity name=\"queue\">"+
       8:         "<attribute name=\"name\"/>"+
       9:         "<attribute name=\"emailaddress\"/>"+
      10:         "<attribute name=\"businessunitid\"/>"+
      11:         "<attribute name=\"queueid\"/>"+
      12:         "<order attribute=\"name\" descending=\"false\"/>"+
      13:         "<filter type=\"and\">"+
      14:         "<condition attribute=\"name\" operator=\"not-null\"/>"+
      15:         "</filter></entity></fetch>";
      16:  
      17:     XmlDocument xmlDoc = new XmlDocument();
      18:     xmlDoc.LoadXml(myCRMService.Fetch(fetchString));
      19:     XmlNode node = xmlDoc.SelectSingleNode("resultset");
      20:  
      21:     ArrayList queueList = new ArrayList();
      22:     string n1 = string.Empty;
      23:     string n2 = string.Empty;
      24:  
      25:     foreach (XmlNode n in node.ChildNodes)
      26:     {
      27:         n1 = n.SelectSingleNode("name").InnerText.ToString();
      28:         n2 = n.SelectSingleNode("queueid").InnerText.ToString();
      29:         queueList.Add(new ItemData(n2, n1));
      30:     }
      31:  
      32:     return queueList;
      33: }

     

    I created the FetchXML query by following Ronald Lemmen's article on pulling it from the Advanced Find query, which looked like this:

    image

     

    Populating the Combo Box

    In order to use the data within a combo box, I had to create a data structure to hold the data.  Add this class to your application:

       1: public class ItemData
       2: {
       3:  
       4:     private string m_Value;
       5:     private string m_Description;
       6:  
       7:     public object Value 
       8:     {
       9:         get { return m_Value; }
      10:     }
      11:  
      12:     public string Description 
      13:     {
      14:         get { return m_Description; }
      15:     }
      16:  
      17:     public ItemData(string NewValue, string NewDescription)
      18:     {
      19:         m_Value = NewValue;
      20:         m_Description = NewDescription;
      21:     }
      22:  
      23:     public override string ToString()
      24:     {
      25:         return m_Description;
      26:     }
      27:  
      28: }

     

    and use this code to actually populate your combo box:

       1:  
       2: ArrayList queueList = GetQueueNames(myCRMService);
       3:  
       4: if (queueList.Count > 0)
       5: {
       6:     cboQueues.DataSource = queueList;
       7:     cboQueues.DisplayMember = "Description";
       8:     cboQueues.ValueMember = "Value";
       9:  
      10: }

     

    I think the same code will work to fill a list box, but I haven't tested it.

    Customization, Dynamics CRM
    1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
    Loading ... Loading ...
    2,034 views

    Leave a reply