Hi,
Sharing a sample code to retrieve more than 5000 records using the Fetch XML.
Version 1 :
private List<Entity> GetTotalRecordsfromFetch(string fetchXML, IOrganizationService orgService) { List<Entity> lstEntity = new List<Entity>(); int fetchCount = 5000; int pageNumber = 1; string pagingCookie = null; while (true) { // Build fetchXml string with the placeholders. string xml = this.CreateXml(fetchXML, pagingCookie, pageNumber, fetchCount); RetrieveMultipleRequest fetchRequest = new RetrieveMultipleRequest { Query = new FetchExpression(xml) }; var returnCollections = ((RetrieveMultipleResponse)orgService.Execute(fetchRequest)).EntityCollection; if (returnCollections.Entities.Count >= 1) { lstEntity.AddRange(returnCollections.Entities); } if (returnCollections.MoreRecords) { pageNumber++; results.pagingCookie = returnCollections.PagingCookie; } else { // If no more records in the result nodes, exit the loop. break; } } return lstEntity; } public string CreateXml(string xml, string cookie, int page, int count) { StringReader stringReader = new StringReader(xml); XmlTextReader reader = new XmlTextReader(stringReader); XmlDocument doc = new XmlDocument(); doc.Load(reader); XmlAttributeCollection attrs = doc.DocumentElement.Attributes; if (cookie != null) { XmlAttribute pagingAttr = doc.CreateAttribute("paging-cookie"); pagingAttr.Value = cookie; attrs.Append(pagingAttr); } XmlAttribute pageAttr = doc.CreateAttribute("page"); pageAttr.Value = System.Convert.ToString(page); attrs.Append(pageAttr); XmlAttribute countAttr = doc.CreateAttribute("count"); countAttr.Value = System.Convert.ToString(count); attrs.Append(countAttr); StringBuilder sb = new StringBuilder(1024); StringWriter stringWriter = new StringWriter(sb); XmlTextWriter writer = new XmlTextWriter(stringWriter); doc.WriteTo(writer); writer.Close(); return sb.ToString(); }
Version 2 :
private static List<Entity> GetTotalRecordsFetchXML(OrganizationServiceProxy orgProxy, string fetchXML) { XDocument xDocument = XDocument.Parse(fetchXML); var fetchXmlEntity = xDocument.Root.Element("entity").ToString(); EntityCollection entityColl = new EntityCollection(); List<Entity> lstEntity = new List<Entity>(); int page = 1; do { entityColl = orgProxy.RetrieveMultiple(new FetchExpression( string.Format("<fetch version='1.0' page='{1}' paging-cookie='{0}'>" + fetchXmlEntity + "</fetch>", SecurityElement.Escape(entityColl.PagingCookie), page++))); lstEntity.AddRange(entityColl.Entities); } while (entityColl.MoreRecords); return lstEntity; }
Hope it helps..