Thursday, January 20, 2011

How to write complex quires to get the data from MS Dynamic CRM 4.0 using web service.

Traditional CRM Query Attribute cannot be used to create complex queries and get the data from many entities using joins. Query attribute has ability to join many entities, but there is no way to get the data from few entities using single query. So we should go for Fetch XML.

When we wanted to generate complex queries then fetch XML also become complex. So then we think of way to generate XML using tool. I found nice tool “Fetch XML builder”, which does everything for me. It was the first tool that I found for MS CRM 4.0 and is a very simple user friendly tool that any developer can use it without any help.

Download FetchXML Builder

--Thushara Manchanayake--

http://dynamicscrmhelper.blogspot.com/

Uploading CRM data from one CRM server to another.

Hey… another cool thing that I found in MS CRM 4.0 is this.

Problem Definition:

We need some custom entity to hold configuration data especially when you wanted to develop public facing web portal which uses MS CRM as back end. Then we should upload those configuration data to QA, Staging or Production at the deployment process. Out of the box customization import process won’t be a benefit, since it only imports entity schema, form customization, views and pick list data. And also data import tool available in out of the box CRM cannot be used, when we have complex configuration data such as XML and HTML and so on. So we should think of some custom development or a tool that handles complex data.

Solution:

There were many tools in the internet, that uses excel sheet to import and export data. They were not suitable to my requirement since I have complex data. Importing and exporting complex data from and to excel sheet (comma separated) breaks in the middle. So I thought of way to connect to CRM server and import those data into the grid and connect to the target server and export those data to target server.

I found great tool "Microsoft Dynamics CRM Bulk Update and Export tool" developed by “OrbitOne”, that has grid to hold imported data. But that tool also has no ability to import those data into the grid and connect to another server and export those data. But it has ability to load data into the grid from CRM and edit them on a tool and save back to the same server. Wow…. it was great opportunity for me to customize that in a way that it provides my requirement.

So what I did was load the data into the grid and added button “Change Connection” to launch the logging window, which has connection information to connect to CRM, to change connection to target server. Out of the box tool only has ability to load the data at edit mode. So I added another button “Get from CRM Create Mode” to load data at create mode.

Download Customized Tool (exe)

Download Customized Source Code

To download the file you must agree to the following license.
How to Import and Export CRM data:

  1. Run OrbitOne.CRMUpdater.exe
  2. Provide web service connection info to connect to your source environment.
  3. Select entity.
  4. Select view.
  5. Click "Get from CRM Create Mode".
  6. When data are loaded into the grid then click "Change Connection".
  7. Provide Connection info of CRM to where you need to upload data.
  8. When connection was successful, click “Export to CRM”.

Note: If you are exporting foreign keys, target server should have same keys in foreign key reference entity as the source server.

-Thushara Manchanayake-

http://dynamicscrmhelper.blogspot.com/

Monday, January 10, 2011

Limitation encountered in MS dynamic CRM 4.0

  • Updating CRM attribute type won’t reflect on target entity at import process on another environment.

Actually CRM won’t allow us to update existing entity attribute type and only way to do this is, drop that field from entity and add it back with new attribute type.

As example if you add property “new_field1” back to the entity “SalesOrderDetail” with Bit, where it was initially as decimal, when you import that customization to another environment(to production from development or development server to another development server,..), you will get bellow error at import process and it will log this error at event log.

Customization Import failed. Error: Column names in each table must be unique. Column name ' new_field1' in table 'SalesOrderDetailExtensionBase' is specified more than once.

In order to do this, first you must drop that column from target entity in target environment manually.

  • Some of the important entities are not customizable.

Examples:

I. ServiceAppointment (CRM 2011 allow as to customize this entity)

Many of the real world implementations of MS CRM 4.0 want to associate ServiceAppointment with sales detail or sales order since there could be some items that will be sold with service activity (example: Meeting room booking with some catering items). Since ServiceAppointment is not customizable, implementation of this requirement is not straightforward

II. Announcement (BusinessUnitNewsArticle)

You may want to display announcements on public facing CRM web portal and need to add custom attribute such as new_DisplayOnWebsite to have some control over the announcements to display on public web site. We are unable to do that, since it is not customizable entity. (This required functionality can be handled using simple custom entity something call “new_PublicAnnouncements”)

III. Est..

  • Out of the box CRM tax calculation won’t work for real environment.

Out of the box CRM is having just free form text box for tax and we need to calculate tax manually and enter it on text box at the order. It won’t allow us to manage several type of tax and need to develop new custom tax module on CRM using custom entities.

  • Alter entity won’t reflect on target environment at customization import process.

Dropping attributes (Fields) and entities won’t reflect on target environment at normal customization import process. We should do it manually or need to think about some custom development using CRM metadata web service.

  • CRM 4.0 online does not have ability to deploy plug-ins (This has been addressed by CRM 2011)

  • CRM 4.0 won’t allow us to manage conflicting scenario of customization.

Most elements of CRM customization only support last one wins resolution strategy. So customization done by some can be override by another one

These are the limitations that I have encountered and in my mind right now. So there could be few more.

--Thushara Manchanayake---

http://dynamicscrmhelper.blogspot.com/

How to enable tracing in Microsoft Dynamics CRM - Server was unable to process request.

When it comes to web portal development, MS Dynamics CRM 4.0 provide powerful web service interface to communicate over the CRM back end. When you move into MS Dynamic CRM customization area using CRM web service, common error message, that you will see first is “Server was unable to process request.”

Basically this is the common error message, which will be thrown, when anything goes wrong at CRM web Service call.

Only way to troubleshoot this issue is enable MS Dynamics CRM tracing.

How to enable tracing?

Copy billow registry entries into notepad and save it as “EnableTracing.reg”

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM]

"TraceEnabled"=dword:00000001

"TraceCategories"="*:Error"

"TraceCallStack"=dword:00000001

"TraceRefresh"=dword:00000001

Then double click on EnableTracing.reg file. Then it will create registry entries required to enable CRM tracing. Tracing will be logged at “C:\Program Files\Microsoft Dynamics CRM\Trace” folder.

Happy Coding!

Thushara Manchanayake