Dynamics SDK Paging Records

I never thought I’d have a case when I’d need to work with over 5,000 records from the Dynamics SDK.

The scenario here is that I was trying to reproduce some production issues and validate out some code changes with a higher threshold of objects.  However, as I started testing, I noticed I wasn’t bringing back everything and had hit the that magical 5,000 limit.

Without wanting to change it, I modified by query to support the retrieval of 5,000+ items that would return to my service to be worked on.

bool KeepSearching = true;
 EntityCollection results = null;
 Dictionary <Guid, Entity> Accessors = new Dictionary<Guid, Entity>();

QueryExpression query = new QueryExpression();
 query.EntityName = "contact";
 query.Criteria.AddCondition(new ConditionExpression("contactid", ConditionOperator.Equal, ContactId));
 query.ColumnSet = new ColumnSet(new string[] { "contactid", "fullname"});
 query.PageInfo = new PagingInfo();
  query.PageInfo.PageNumber = 1;

results = _service.RetrieveMultiple(query);

while (KeepSearching)
 {
 AppendContactResults(Accessors , results);

if (results.MoreRecords)
 {
 query.PageInfo.PageNumber++;
 query.PageInfo.PagingCookie = results.PagingCookie;
 results = _service.RetrieveMultiple(query);
 }
 else
 {
 KeepSearching = false;
 }
 }

The code itself is pretty simple – I append the paging info and request for the first page to come back (note even if you do not exceed the first page, you don’t need to change this code).

When the results are returned, I check if there are moreresults.  If there are no more results, I process what I have, kill the while loop and move on.  If there ARE more results, I queue up my paging information, set the watermark (the PagingCookie) and make another call to see what I missed.

The loop takes over and will close itself when there are no more results.

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s