Friday, 27 March 2015

Theming with CRM 2015

How long you have wanted to have the branding in your CRM applications for your clients? With CRM 2015 you will now be able to use branding and change the colours for navigation. You can also give the colour to your entity which is quite cool.

There will be a new option in solutions area called Themes.

This allows you to select the existing sample CRM Default Theme which user should be able to copy and create a new one.



You can preview the theme to make sure you are happy with the final outcome and if you are, you can then publish the theme just like any other solution.

All themes are not solution aware. However users can export and import themes to different organisations just like solutions.

There are few things that is still not possible:
1) Changing the font
2) Changing the background colour
3) Changing the OOTB icons

Hope to see many colourful CRM implementations now.

Thursday, 19 March 2015

CRM Administrator's New Assistant!!!!

When running Dynamics CRM on-premise, it is critical to monitor the server health constantly. So far we relied on looking at various places to monitor our server health and try to figure out what is going on. But for Dynamics CRM 2015, Microsoft has released a new management console which allows administrators to monitor all relevant components of CRM from one place and identify root cause of any failures very quickly.

Here is the list of services available (source for further information)

Feature Summary
  • Monitors the availability and heath of the following components
    • Microsoft Dynamics CRM Server 2015
    • Microsoft Dynamics CRM 2015 E-mail Router
    • Microsoft Dynamics CRM 2015 Reporting Extensions
  • Monitors the availability and health of the following component services:
    • Microsoft Dynamics CRM Asynchronous Processing Service
    • Microsoft Dynamics CRM Asynchronous Processing Service (maintenance)
    • Microsoft Dynamics CRM Sandbox Processing Service
    • Microsoft Dynamics CRM E-mail Router Service
    • Microsoft Dynamics CRM Unzip Service
    • World Wide Web Publishing Service
    • Indexing Service
  • Monitors the availability and health of the following application components and functionality:
    • Operability of ISV plug-ins
    • Web application requests processing, SOAP exceptions, and unexpected failures
  • Monitors the performance metrics of the following components:
    • Web application requests processing
    • Database query processing
  • Monitors the system for configuration-related failures.

The download link for this tool from Microsoft website.

https://www.microsoft.com/en-us/download/details.aspx?id=46371

Enjoy the Microsoft System Centre Management Pack and hassle free monitoring of your CRM servers administrators!!!!!

Monday, 23 February 2015

CRM Outlook client error

Recently we tried to install Dynamics CRM outlook client for CRM 2013 on a specific organisation and it failed with following error:

Microsoft.Crm.Application.Outlook.Config.OutlookConfigurator.InitializeMapiStoreForFirstTime
10:17:28| Error| Exception : |NativeError:61b8 HResult 80040e2f Message: A duplicate value cannot be inserted into a unique index. [ Table name = MetadataSchema.EntityClientStatistics,Constraint name = PK__MetadataSchema.EntityClientStatistics__0000000000000780 ]| at Microsoft.Crm.Application.SMWrappers.CrmSqlCeCommand.ExecuteCommandWithRetry[TResult](Func`1 body, Int32 retryCount)
at Microsoft.Crm.Application.Outlook.ClientMetadataCache.SqlCeManager.ExecuteStepsInTransaction(SqlCeTransaction tx, String[] commands)
at Microsoft.Crm.Application.Outlook.ClientMetadataCache.SqlCeManager.<>c__DisplayClassd.<CommitChanges>b__c(CrmSqlCeConnection conn)
at Microsoft.Crm.Application.SMWrappers.CrmSqlCeConnection.<>c__DisplayClass8.<ExecuteInNewConnection>b__7(CrmSqlCeConnection connection)
at Microsoft.Crm.Application.SMWrappers.CrmSqlCeConnection.ExecuteInNewConnection[TReturn](String connectionString, Func`2 actions, Func`2 exceptionHandler)
at Microsoft.Crm.Application.Outlook.ClientMetadataCache.MetadataCacheManager.IncrementVersion(Object infoObj)
at Microsoft.Crm.Application.Outlook.ClientMetadataCache.MetadataCacheManager.SyncComplete(Guid orgId, ISync sync, Boolean forceSyncIncrement)
at Microsoft.Crm.Application.Outlook.ClientMetadataCache.ClientDynamicMetadataCache.<>c__DisplayClass23.<DoSyncInternal>b__22()
at Microsoft.Crm.Application.Outlook.ClientMetadataCache.DeferredDynamicMetadataCache.ExecuteWhenReady(Action action)
at Microsoft.Crm.Application.Outlook.ClientMetadataCache.ClientDynamicMetadataCache.DoSyncInternal(IOrganizationContext context)
at Microsoft.Crm.Application.Outlook.ClientMetadataCache.ClientDynamicMetadataCache.<>c__DisplayClass1b.<.ctor>b__18()
at Microsoft.Crm.Application.Outlook.ClientMetadataCache.ClientDynamicMetadataCache..ctor(IOrganizationContext context, Boolean reloadAsynchronously)
at Microsoft.Crm.Application.Outlook.ClientMetadataCache.ClientDynamicMetadataCache.LoadCache(IOrganizationContext context, Boolean unusedHere)
at Microsoft.Crm.Metadata.MetadataCache.GetInstance(IOrganizationContext context)
at Microsoft.Crm.Application.Outlook.Config.OutlookConfigurator.InitializeMapiStoreForFirstTime()
at Microsoft.Crm.Application.Outlook.Config.OutlookConfigurator.Configure(IProgressEventHandler progressEventHandler)
at Microsoft.Crm.Application.Outlook.Config.ConfigEngine.Configure(Object stateInfo)
10:17:28| Error| Exception : A duplicate value cannot be inserted into a unique index. [ Table name = MetadataSchema.EntityClientStatistics,Constraint name = PK__MetadataSchema.EntityClientStatistics__0000000000000780 ] at System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr)
at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommandText(IntPtr& pCursor, Boolean& isBaseTableCursor)
at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options)
at System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery()
at Microsoft.Crm.Application.SMWrappers.CrmSqlCeCommand.<ExecuteNonQuery>b__0()
at Microsoft.Crm.Application.SMWrappers.CrmSqlCeCommand.ExecuteCommandWithRetry[TResult](Func`1 body, Int32 retryCount)

Thanks to my friend and colleague Rafael Urbano to finding a solution to this issue. Found few articles for this issue which suggested we log a support call for this but we found the solution.

Connect to Plug-in registration tool and check if Plug-in Profiler is enabled. If this is enabled, the error could be due to that. This was an issue for us. When we disabled the plug-in profiler, the issue was resolved for us.

Hope this helps.

Sunday, 25 January 2015

Connecting to CRM 2015 from 2013 Outlook client

With Dynamics CRM 2015 being rolled out to most online organisations now, it is tine to decide for Outlook client. For most organisations this needs to be a roll out strategy as to when to roll this out to all client machines. To enable organisations making this decision, it is first required to check  what versions are supported.

In order to upgrade to the 2015 Outlook client, you must be on Outlook 2010 or higher.  As long as Dynamics CRM is not used in offline mode, users having CRM 2013 outlook client will be able to connect to CRM 2015 server.  (i.e., no offline capabilities will be supported). However all client machines must have Dynamics CRM 2013 Outlook client at the minimum.

Dynamics CRM 2013 Outlook client can be downloaded from the given link below:

http://www.microsoft.com/en-au/download/details.aspx?id=40344

The recommended process for upgrading your Outlook Client for Dynamics CRM is following.  This process will ensure users are able to continue to use Dynamics CRM and their Outlook Clients during your server upgrade to Dynamics 2015.
  • Conduct what's new training for all users for Dynamics CRM 2015
  • Upgrade your server to 2015
  • Conduct a short training for Dynamics CRM 2015 outlook client
  • Upgrade all Outlook Clients to 2015
For complete list of pre-requisites refer to following TechNet article:

https://technet.microsoft.com/en-us/library/hh699818.aspx

Outlook client for Dynamics CRM 2015 can be downloaded from the following link:

http://www.microsoft.com/en-us/download/details.aspx?id=45015

Hope this helps!!!

Friday, 9 January 2015

Form Performance in Dynamics CRM

There are many times when we have to make a choice between how much to display on a form versus it is taking too long to load.

This is a complex question to answer as there is no rule of thumb to guide and answer this question. However there are few key considerations that must be made while deciding on form layout.

It is always best to start the form design as agile as possible. Take the client in the journey with you and help them make the decision in terms of what fields to display on the form. If the field is not one of the fields that the client wants when they open the form, do not display on the form. There are other ways to get the data like Advanced Find.

Do not overload the form with a lot of scripts. More complex and convoluted the script, more time it will take to load the form. There are new features available to avoid a lot of scripts / rules on the form. Consider using different forms for different roles.

Avoid loading a lot of related entities. This is a lot of times a main killer for the performance. It is great from the user experience perspective to get all the data on the form but loading more than what the client needs is overkill. Users can always get to the related entities from navigation pane.

Do not have long running synchronous processes. It is never a good idea to write a synchronous process for things like external fetch. It is always good idea to write a background / asynchronous plug-in for this to make sure client does not wait for the form to load / save for a long time.

Hope this helps.

Friday, 2 January 2015

Migration Strategy for Dynamics CRM

I was asked recently to suggest what is the best strategy for Migrating medium ( 1000 + ), large (Million +) records to Dynamics CRM.

It is a complex question and relies on many things like complexity of data model and ability to perform all validations outside system. However the following things must be considered to make sure maximum through put can be achieved.

1) Do not rely on plug-ins while data in inserted.

At the time of migrating large data, it is best if SQL can work only on inserting data. If SQL needs to perform additional fetches to perform additional validations, performance will be affected. Hence to increase performance, switch off all plug-ins.

2) Turn off all workflows.

Workflows are not designed to help correct / update data during migration. It is best to make sure data is inserted first and if need be trigger workflows in batch for 1000 records at a time after data is inserted.

3) Prepare and validate data before running migration

It is critical that all data is validated before data is inserted into Dynamics CRM to make sure it meets business validations. Also, staging area needs to be setup where data is transformed in CRM like structure to easily map data as 1-to-1 for most tables for Dynamics CRM. This will make sure that a lot of complex queries are not needed during migration. It is a well known fact that if a lot of joins are needed for queries, performance will be affected.

4) Optimised servers

This is the most important factor for migration. At the end of the day it will rely on how much network bandwidth is available and how much physical grunt the servers can take at a given time. Make sure the servers are optimised for gaining better performance. There are many articles for this. Here is link to few of them for CRM 2011 but most are still relevant for 2013 and 2015:

http://technet.microsoft.com/en-us/library/hh413200(v=crm.6).aspx

http://www.microsoft.com/en-au/download/details.aspx?id=27139


Microsoft has completed bench mark tests for migration and links for this can be found here.

https://www.microsoft.com/en-au/download/details.aspx?id=34688

Hope this helps!!!

Tuesday, 18 March 2014

CRM 2013 with Google Glass

With emerging technology it is required for the platform to keep up to date. It is great to see CRM emerge from it's IE only days to now most browser and most device enabled. Word is also to make CRM offline capable OOTB in near future.

However the topic for the day is Google Glass capability for CRM. I am pleased to see the capability built by Resco.Net. Refer to  following news release from Resco.

http://www.resco.net/news.aspx?file=2014-03-04

Exciting days ahead!!!