Unified Service Desk 3.0.0 released

You can download Unified Service Desk 3.0.0 Version Package Deployer and Executables from the below links,

Name Size Download Link Description
Dynamics365-USD-3.0.0.859-PackageDeployer 85.4 MB Click here USD Package Deployer to install solution components in CRM
Dynamics365-USD-3.0.0.859-amd64 88.9 MB Click here 64 bit USD client
Dynamics365-USD-3.0.0.859-i386 88.9 MB Click here 32 bit USD Client

Click here to see “What’s new in Unified Service Desk 3.0.0

Advertisements

OnOrAfter Vs Greater than for DateTime field in CRM

OnOrAfter:

This operator will consider Only Date but not Time to filter records.

Greater than:

This operator will consider both Date and Time.

By default both takes Time as 12:00 AM, if we don’t give any time and fetch records.

Retrieve 5000+ records using FetchXML and Query Expression

In my previous post, explained how to Retrieve 5000+ entity records using Query Expression,

In this post, will explain how to Retrieve 5000+ entity records using FetchXML and Query Expression.

Example: Retrieve All contact records where MobilePhone data is not null.

use below method,

public static EntityCollection RetrieveAllRecordsUsingFetchXML(IOrganizationService service, string fetchXML)
 {
 var moreRecords = false;
 int page = 1;
 var cookie = string.Empty;
 var entityCollection = new EntityCollection();
 do
 {
 var xml = string.Format(fetchXML, cookie);
 var collection = service.RetrieveMultiple(new FetchExpression(xml));

if (collection.Entities.Count > 0) entityCollection.Entities.AddRange(collection.Entities);

moreRecords = collection.MoreRecords;
 if (moreRecords)
 {
 page++;
 cookie = string.Format("paging-cookie='{0}' page='{1}'", System.Security.SecurityElement.Escape(collection.PagingCookie), page);
 }
 Console.WriteLine(entityCollection.Entities.Count);
 } while (moreRecords);

return entityCollection;
 }

Get the required FetchXML from CRM Advanced Find and format using FetchXML Formatter Online.

For the example stated above, required FetchXML is as follows,

string fetchXML = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false' {0}>" +
" <entity name='contact'>" +
" <attribute name='fullname' />" +
" <attribute name='mobilephone' />" +
" <attribute name='contactid' />" +
" <order attribute='fullname' descending='false' />" +
" <filter type='and'>" +
" <condition attribute='mobilephone' operator='not-null' />" +
" </filter>" +
" </entity>" +
"</fetch>";

Note: Do not forget to append {0} in the first line of the formatted FetchXML.

How to Call Method?

EntityCollection contactCollection = RetrieveAllRecordsUsingFetchXML(_orgService, fetchXML);
Inspired from MS Dynamics CRM – Tips from a Developer Blog

Retrieve 5000+ entity records using Query Expression

Example: Retrieve All contact records where MobilePhone data is not null.

public EntityCollection RetrieveAllContactEntityRecords(IOrganizationService _service) {
 // Declarations
 var contactFinalEntityCollection = new EntityCollection();
 EntityCollection contactEntityCollection = new EntityCollection();
 int pageNumber = 1;
 bool moreRecords = true;

// Retrive Contact Records using CRM Paging.
 while (moreRecords)
 {
 var queryExpression = new QueryExpression()
 {
 Distinct = false,
 EntityName = "contact",
 ColumnSet = new ColumnSet(true),
 Criteria = new FilterExpression
 {
 FilterOperator = LogicalOperator.And,
 Conditions =
 {
 new ConditionExpression("mobilephone", ConditionOperator.NotNull)
 }
 },
 Orders =
 {
 new OrderExpression { AttributeName = "createdon", OrderType = OrderType.Descending }
 },
 PageInfo =
 {
 Count = 5000,
 PagingCookie = (pageNumber == 1) ? null : contactEntityCollection.PagingCookie,
 PageNumber = pageNumber++
 }
 };

contactEntityCollection = _service.RetrieveMultiple(queryExpression);

if (contactEntityCollection.Entities.Count > 0)
 {
 contactFinalEntityCollection.Entities.AddRange(contactEntityCollection.Entities);
 }

moreRecords = contactEntityCollection.MoreRecords;
 }

return contactFinalEntityCollection;
 }