Microsoft to Expand Dynamics CRM Capabilities in 5.0

Microsoft will officially debut CRM 5.0 in 2010, but test versions of the application are slated for release to partners in the coming months.   According to Brad Wilson, General Manager of Microsoft Dynamics CRM, CRM 5.0 is in “deep development” at the moment but will feature such expanded functionality as improvements in the user interface and data visualization features, enhanced sales and marketing capabilities, and tighter integration with Microsoft’s SharePoint Server.  Read more here.

Read More

Crm Sdk: Extension Methods for the CrmService

I often find it tedious writing something like the following:


//Instantiate our ColumnSet with desired columns.
ColumnSet cols = new ColumnSet() { Attributes = new string[] { "firstname", "lastname" } };
//Call the Retrieve method on crmService for our desired contact
contact c = (contact)_crmService.Retrieve(EntityName.contact.ToString(), new Guid("7C0F232E-7F72-DE11-8397-0015C5E3FA2"), cols);

Although we know the type we are fetching, in this case ‘contact’, we still have to make an explicit cast from a BusinessEntity. This is where generics can help. Another thing I find annoying is the type name is always the same, yet again I end up providing it. Here is my proposed solution:


//Using a custom extension method we now have a nice single line approach and no casting needs to be done.
contact c = _crmService.Retrieve(new Guid("7C0F232E-7F72-DE11-8397-0015C5E3FA2"), new string[] { "firstname", "lastname" });

Here I have created a generic extension method that accepts a BusinessEntity Type and simply uses the name of that type in the Retrieve. It also performs our explicit cast for us! =) I really do love the power of extension methods.


public static TEntity Retrieve(this CrmService _service, Guid entityId, string[] columns) where TEntity : BusinessEntity, new() {
return (TEntity)_service.Retrieve(typeof(TEntity).Name, entityId, new ColumnSet() { Attributes = columns });
}

Of course you can provide some extra functionality, for example a TryRetrieve method that catches the raised exception that notifies you that the entity does not exist.

Here is some more examples:


namespace CrmHelpers
{
///

/// A few examples of extension methods, specifically for the CrmSdk.
///

public static class CrmHelpers
{
///

/// Retrieves a BusinessEntity from the CrmService.
///

/// The entity type
///
/// The Guid of the entity you wish to receive
/// A BusinessEntity
public static TEntity Retrieve(this CrmService _service, Guid entityId) where TEntity : BusinessEntity, new()
{
return (TEntity)_service.Retrieve(typeof(TEntity).Name, entityId, new AllColumns());
}

///

/// Retrieves a BusinessEntity from the CrmService.
///

/// The entity type
///
/// The Guid of the entity you wish to receive
/// A string array of columns to retrieve
/// A BusinessEntity
public static TEntity Retrieve(this CrmService _service, Guid entityId, string[] columns) where TEntity : BusinessEntity, new()
{
return (TEntity)_service.Retrieve(typeof(TEntity).Name, entityId, new ColumnSet() { Attributes = columns });
}

///

/// Tries to retrieve a BusinessEntity from the CrmService, if not found it will return null.
///

/// The entity type
///
/// The Guid of the entity you wish to receive
/// A BusinessEntity
public static TEntity TryRetrieve(this CrmService _service, Guid entityId) where TEntity : BusinessEntity, new()
{
string entityName = typeof(TEntity).Name;
try
{
TEntity entity = (TEntity)_service.Retrieve(entityName, entityId, new AllColumns());
return entity;
}
catch (SoapException sex)
{
XmlNode n = sex.Detail.SelectSingleNode("//error//code");
if (n.InnerText == "0x80040217")
return null;
else throw new ApplicationException(sex.Detail.InnerText, sex);
}
}

///

/// Not a practical method. Just an example.
///

/// The entity type
///
/// An IEnumerable collection of BusinessEntity objects
public static IEnumerable RetrieveAllActive(this CrmService _service) where TEntity : BusinessEntity, new()
{
try
{
QueryExpression qe = new QueryExpression()
{
ColumnSet = new AllColumns(),
EntityName = typeof(TEntity).Name,
Criteria = new FilterExpression()
{
Conditions = new ConditionExpression[] {
new ConditionExpression(){ AttributeName = "statecode",
Operator = ConditionOperator.Equal,
Values = new object[] { 0 } }
},
FilterOperator = LogicalOperator.And
}
};

return _service.RetrieveMultiple(qe).BusinessEntities.Cast();
}
catch (SoapException sex)
{
throw new ApplicationException(sex.Detail.InnerText, sex);
}
}

///

/// Creates and Retrieves a BusinessEntity
///

/// The type of BusinessEntity
///
/// The entity
/// The Entity created
public static TEntity CreateAndRetrieve(this CrmService _service, TEntity entity) where TEntity : BusinessEntity, new()
{
return (TEntity)_service.Retrieve(typeof(TEntity).Name, _service.Create(entity), new AllColumns());
}

public static DynamicEntity RetrieveDynamic(this CrmService _service, string entityName, Guid entityId)
{
RetrieveRequest req = new RetrieveRequest()
{
ColumnSet = new AllColumns(),
ReturnDynamicEntities = true,
Target = new TargetRetrieveDynamic()
{
EntityId = entityId,
EntityName = entityName
}
};

return (DynamicEntity)((RetrieveResponse)_service.Execute(req)).BusinessEntity;
}

public static DynamicEntity RetrieveDynamic(this CrmService _service, string entityName, Guid entityId, string[] columns)
{
RetrieveRequest req = new RetrieveRequest()
{
ColumnSet = new ColumnSet() { Attributes = columns },
ReturnDynamicEntities = true,
Target = new TargetRetrieveDynamic()
{
EntityId = entityId,
EntityName = entityName
}
};

return (DynamicEntity)((RetrieveResponse)_service.Execute(req)).BusinessEntity;
}
}
}

Read More

Mobile Express for Microsoft Dynamics CRM

Mobile Express enables a user to access Microsoft Dynamics CRM in a web browser on your mobile device. This application is installed on the server and is configured in Microsoft Dynamics CRM (Settings). By downloading and installing Mobile express you also download and install Update rollup 5.Mobile Express is not available to CRM online. It is currently only available in English.

There are a few system requirements:

·         Must be installed on a server running Microsoft Dynamics CRM On Premise or Microsoft Dynamics CRM 4.0 Service Provider Editions.

·         You must have System Administrator permissions on the Microsoft Dynamics CRM server to install Mobile Express for Microsoft Dynamics CRM.

·         If you installed a prerelease version of Mobile Express for Microsoft Dynamics CRM, uninstalling is recommended before you install this version.

·         It is supported by Windows  Server 2003; Windows Server 2008, Windows Vista and Windows XP

Mobile Express will work on any device that has a web browser. You have access to Microsoft Dynamics CRM data via a mobile internet connection. It is easy to use. The CRM Mobile Express screens are similar to that of the Microsoft Dynamics CRM interface. It has a full Sales, Marketing and Customer Service Functionality. A person on the road has instant access to the same data as a person in the office.  This is a great addition to Microsoft Dynamics CRM. It is quick real Time data at your fingertips.

                                                                                                       

                          

 

Read More

New Fixes and Updates

If you’ve been getting error messages for blocked pop-ups in CRM, here’s what do:  In IE8 go to Tools->Internet Options->Security tab.  Once there, click to “Reset all zones to default level”.  Additionally, click “Enable Protected Mode”.  Close and restart both IE and Outlook.   Get more details here.  Also, Update Rollup 5 for Microsoft CRM 4.0 has been released.  This is a tested, cumulative set of updates for Microsoft Dynamics CRM 4.0. It includes performance enhancements that are packaged together for easy deployment.  Go here.   

Read More

xRM: Strategies in Action

By harnessing the power of Microsoft Dynamics CRM, xRM can deliver a new and more flexible way to manage relationships.   Here are just a few examples: 
  • A large, state government-based organization uses Microsoft Dynamics CRM to manage its teacher certification program.   In the system, contacts are educators.   Each educator has areas in the system for tracking their schooling, work history, and certifications. The system also contains a portal so that educators can, for example, update their personal information and pay certification fees online. 
  • A major financial institution wanted a system to better manage the process by which they review and interview potential hires.  Using Microsoft Dynamics CRM, a solution was built to track candidate documents (resumes and cover letters) and schedule all activities held during the process of recruitment, like the initial screening, resume review and finally, interview. 
  •  A U.S. Air Force command utilizes Microsoft Dynamics CRM to receive, disseminate, and track the chain of organizational tasks and resulting sub-tasks within their organization and from Air Force Headquarters at the Pentagon.   In this system, accounts are organizations and contacts are users and action officers charged with the coordination and response to policies and procedures.
  •  Our most recent xRM implementation involved a national sports governing body.  The organization needed a system which would consolidate operations between it and its many associations—up to 110 of them.  We created a CRM template solution which leveraged our hosted infrastructure.  This template is fully customizable and can be developed to suit the individual requirements of each association.  The system now provides a centralized entry point for disparate data sources, something which improves workflow and communications between associations. 

 

 

 

 

 

 

Read More