CRM 2013 – Managed solution problems with out of sync solutions

Solutions were a fantastic concept added into CRM 2011 allowing CRM developers to easily group their CRM customizations in groups (solutions) and easily move their customizations between CRM organisations.

Solutions in CRM offer the CRM developer great flexibility but which can lead to complex multiple and overlapping solutions mixed with branched/versioned solutions.

or

The CRM developer can use unmanaged solutions 🙂

I have written many blogs on CRM solutions

Solutions are great but when they go wrong they are awful and can take lots of time poking around trying to find out the cause of the problem.

I’m sure many CRM developers have had problems trying to import a solution where someone has deleted a field, only to add it again as a different type (covered in SQL error whilst importing solution)

Here are some common errors I have encounted with solutions

Solution import Errors

Solutions brief introduction

If you want to learn about solutions read this blog CRM 2013 – Understanding Solutions and how they work, below is a quick recap

  • A solution is a way to manage and deploy groups of customizations.
  • Managed solutions are read only and the customizations cannot be modified
  • Unmanaged solutions copy the changes into the default solution; the solution container is merely a wrapper to move the customizations between CRM organisations.

One of the major headaches with managed solutions is if you remove a managed solution, it removes all the customizations and the data.  This combined with the customizations being non editable (read only) can lead to many frustrating situations which the CRM developer has to work round because they cannot uninstall and install a CRM solution due to the loss of data.

Why use managed solutions

Choosing your solution strategy is an important and scary decision because it can be difficult to swap back from a managed solution to an unmanaged solution.  There is usually some anxiety before you make the decision and push the button and import a managed solution.

There are many choices you have to make in CRM which are very hard to undo like

CRM Entity ownership – How do you decide?

I have talked to many CRM developers who hate managed solutions and only deploy unmanaged solutions. I have been asked numerous times why anyone would use a managed solution, so lets investigate the reasons.

The logic behind a managed solution is two fold

  1. Managed solutions are read only to protect the customization creator from users and CRM developers taking and changing the customizations
  2. Stopping users from changing the customizations which could result in the customizations not working or working incorrectly.

Managed solutions are great for CRM resellers who created a solution for CRM which acts like a products.  E.g. an Autonumber solution.  They can sell the Autonumber solution, it’s gets deployed and the users can’t change any of the code to stop it working and other CRM developers can look at the code to steal the code/ideas.

This scenario is ideal for managed solutions because if the users change their mind and don’t want to use the solution they can uninstall it and it removes all traces of the solution and its data.

Why doesn’t everyone use unmanaged solutions?

If managed solutions can be problematic why doesn’t everyone use unmanaged solutions?

Unmanaged solutions are great but there are some things to consider

When importing unmanaged solutions, your changes will be written to the default solution.  This will overwrite all

This article Use solutions for your customizations

Never import an unmanaged solution unless you are sure you want to accept all the customizations in it and allow any of those customizations to overwrite any customizations you previously created.

Unmanaged solutions means all customizations are editable, this means users could possibly change a customizations and stop them working as intended by

  • Deleting a field
  • Add conflicting customizations
  • Modifying customizations
  • Importing unmanaged solutions could overwrite customer’s modifications or change how they work.

Unmanaged solutions can avoid conflicts but can lead to other problems, often problems caused by overwriting customizations which are not initially obvious.

Managed solutions

Below I discuss some problems CRM developers can experience when using managed solutions.

Multiple managed solutions can be tricky in general

Managed solutions can be problematic is when you have overlapping managed solutions where you have different managed solutions which have the same entity in both.

Managed solutions can have problems when different managed solutions overlap when values and files can overwrite each other and CRM developers being unsure what will happen when one solution is imported over another.

The worst problem can be conflicting problems which cause a manage solution to fail.

Managed solutions out of sync

Managed solutions can be problematic when different versions/phases of the same managed solution are deployed in different environments (e.g. prod, pre prod, dev) with different functionality being delivered.

To visualise this scenario it helps to think of CRM solutions as branches in source control.  Users want changes made to an earlier version but later versions have already been modified.

The CRM developers is in a tricky situation of adding fields/customizations to an older solution but cannot bring these changes to the later branches because it could/would overwrite changes made in the later solution.  This can lead to manually adding fields into the different versions of solutions which can lead to problems

Problems with branched solutions

I recently experienced a problem with branched/versions of solutions which I will explain the problem (I will try, it’s complex), the cause and the solution.

When I use the term branched solution, I am referring to the same solution but with different versions.  I find it easier to visualize and explain the problem if you consider these solutions as code branches.

Resolving conflicts

Any developer who has gone through the process of merging changes through code branches knows it can be a difficult and slow process, involving merging the code, working out if the merged code works and importantly checking the merged code hasn’t broken anything.

When you merge code this can lead to a conflict (this happens when the same piece of code has changed in code being merged) and the developers needs to decide what to replace.

This highlights one of the problems CRM developers have, we don’t do the merging, CRM does and if there is a conflict!  A conflict in customizations

  • Plugins
  • Workflows
  • Web resources (JavaScript)

Conflicts usually involve the imported customization overwriting the current customizations.

Branching solutions problem

I had multiple versions of a solution which was managed

e.g.

  • Hosk Solution version 1
  • Hosk Solution version 2
  • Hosk Solution version 3
  • Hosk solution version 1 deployed in production/Live
  • Hosk solution version 2 deployed in pre production
  • Hosk solution version 3 deployed in Dev and currently being worked on

The solutions above are the same solution with entities, JavaScript, plugins in.

  • HSV1 (Hosk solution version 1) was the current live solution and is not being changed
  • HSV2 is in preproduction and being tested with some functionality
  • HSV3 the current development functionality

solution waterfall

Understanding the solutions and their states is easier if you visualise the separate solutions as a waterfall.

Remember HSV2 was created from HSV1 but is now very different and HSV3 was created from HSV2 but now is very different with lots of new and cool functionality.  I have tried to show this by creating them as different colours and shapes.

A situation can occur where a bug is found in Hosk version 1 – HSV1, the CRM developer must decide which solution the fix should be put in.  This problem needs some extra fields to be added to an entity as well as some code.

Where to put the fix?

We can’t put the fix into the latest version HSV3 because we couldn’t deploy this solution to live until all the customizations were finished and tested.

If we put the change into HSV2 we would then need to put all the customizations and changes into live and the customer hasn’t finished testing the customizations.  We would have a problem where HSV2 and HSV3 are out of sync.

The choice made was to put the fix into HSV1 (production solution), add the fields and code, test it on the HSV1 organisation we have and deploy the fix to live.

We now have a problem because the CRM solutions HSV2 and HSV3 are now out of sync.

There are fields and code in the live CRM system which doesn’t exist in HSV2 and HSV3.

One of the main concerns is the current development might not work when deployed with the changes in HSV1, so we have to sync the environments.

How do you get these changes into HSV2 and HSV3?

The fields were manually added to HSV2 and the code added/merged.

The plan was to export HSV3 as unmanaged.

Import HSV2 into HSV3 and then reimport HSV3 with the previous exported version, this will have added the new fields.

Problems occurred when we tried to import HSV2 managed into HSV1 Managed.  The reason it complained was because of duplicate fields.

We added new fields in HSV1 and HSV2.   These fields have the same schema name but importantly different guids.

CRM doesn’t see the new fields as the same field because they have the same schema name; it sees it as a CRM developer trying to add another field with the same schema name.

Gulp, we now can’t import HSV2 solution into the HSV1 environment!

Managed solutions make this tricky

Managed solutions make things tricky because if you remove a managed solution it takes away all the precious data with it.

One of the reasons we ran into this problem was because we didn’t use any other solutions to move new fields/customizations between the different solutions.

Solving the problem

Created a new organisation with HSV1 unmanaged – the CRM org we will call Operation SYNC

Deleted newly added fields/views/dashboards in HSV2

Export HSV2 unmanaged – call this HSV2 modified

Imported HSV2 modified solution onto HSV1

We now have the customizations with the same guids in HSV2

Merge code customizations

This organisation now could be used for the HSV2 environment (old one had to be trashed)

The same technique was used to get the changes from HSV2 to HSV3.

How to avoid Sync/branching solution problem

The key to the problems I experienced was you need to be aware you have different branched solutions.

If you need to add changes to the earliest solution (e.g. HSV1) you need to have a mechanism to bring these changes through the other branched solutions.  It’s important you bring the SAME changes through the CRM systems otherwise (if you add the fields manually) you will be get duplicate errors.

The solution we used above seems easy when you read it but it took a whole day of creating organisations, importing solutions and we weren’t sure it was going to work (fingers and legs were crossed) until it worked.

If the solution didn’t work we hadn’t considered the alternatives but none of them would have been very pleasant, which is why we put of making any further plans.

The first step to avoiding this scenario is don’t create duplicate fields in different branched solutions.  This will lead to duplicate fields and cause solution importing problems.

Ideally it’s better to add new fields in the latest solution; you wouldn’t have to worry about syncing your solutions.

Sometimes this isn’t an available choice because the customer needs a resolve a bug in the production solution.

If need to make a change to an older version you need to view your solutions like a water fall and make sure the changes flows down through all the solutions to ensure the fields have the same guids in all your solutions and as good CRM developers know we should never create duplicate customizations.

You could create a patch solution and import it to your branched solutions but you will need to export/import.

Say you want to add new field called HoskField

  • Export current branch – HoskField doesn’t exist
  • Import patch solution – Hoskfield added, other entity customizations are older
  • Import current branch – Refresh entity customizations, HoskField exists

The most important message in this blog post is for people know the danger of branched CRM managed solutions and the potential problems.

You can’t import a CRM 2011 solution into CRM 2015

Whilst I was at work on friday 2nd and everyone else seemed to be still on Christmas holiday, I was reading Develop 1 Limited Blog by CRM MVP Scott Durow

Scott Durow has written a framework called SparkleXRM and he has updated it, which you can read about here

http://www.develop1.net/public/post/SparkleXRM-for-CRM2015-with-process-API-support.aspx

The interesting thing I noticed (and I am probably slow on the update here) is he had to make two versions available one for CRM 2011 and one CRM 2015.

This line stuck out

Now that CRM2015 does not support installing CRM2011 solutions I’ve had to branch and make both CRM2011 and CRM2015 versions available

Hmm I didn’t know and hadn’t thought about CRM 2011 solutions and CRM 2015.  I have some study notes for solutions for CRM 2013 CRM 2013 – Understanding Solutions and how they work but what about CRM 2015.

There is an msdn article called Maintain managed solutions for CRM 2015 and the article has this about version compatability.

Version compatibility

Any solution exported from a newer version of Microsoft Dynamics CRM cannot be imported into an older version of Microsoft Dynamics CRM. This includes major and minor versions. You can install solutions exported from Microsoft Dynamics CRM 2011 and earlier releases of Microsoft Dynamics CRM Online into Microsoft Dynamics CRM 2015 and Microsoft Dynamics CRM Online 2015 Update. Solutions exported from Microsoft Dynamics CRM 2015 and Microsoft Dynamics CRM Online 2015 Update cannot be imported into earlier versions.

Like most MSDN articles is great for cold hard facts, but it’s written to be consumed by robots and computers, which is my way of saying I sometimes find MSDN articles and CRM SDK very factual but bordering on being hard to understand to non robots.  I will preface this by saying writing documentation is a very difficult job the Microsoft do a great job overall.

I read the article, found it useful/interesting/hard to understand, I reread the article and then thought that didn’t sound right because I thought you couldn’t import CRM 2011 solutions into CRM 2015.

 

What’s the truth about CRM 2011 solutions and CRM 2015

I dangerously decided to use the potentially unreliable world of the internet to find out the truth.

I first came to this forum post

https://community.dynamics.com/crm/f/117/t/146740.aspx

This picture definitely seems to say suggest you cannot import CRM 2011 solutions into CRM 2015.  Microsoft uses package version numbers, which is confusing because what are package version numbers

Package Version numbers

I will take a quick side track from the main topic to understand the package version numbers.  There is an MSDN article called Export a solution for a specific CRM version and this talks about new functionality brought in with CRM 2013 Service Pack 1.

CRM 2013 Service Pack 1 was a major enhancement to CRM 2013 (duh that’s why it was a service pack and not a rollup Hosk) and I’m guessing it must have rejigged some fundamental functionality inside CRM 2013.  So solutions created in CRM 2013 service pack 1 and higher would have dependancies on the new functionality in CRM 2013 service pack 1 which wouldn’t be available in CRM 2013 environments earlier than service pack 1 and CRM 2011 environments.

To combat this Microsoft added some functionality to allow you to export solutions which would work in older versions.

The MSDN article has this table which shows us the package version number

IntroducedVersion Value Solution components introduced
5.0.0.0 Before Microsoft Dynamics CRM 2013 and Microsoft Dynamics CRM Online Fall ‘13
6.0.0.0 Microsoft Dynamics CRM 2013 and Microsoft Dynamics CRM Online Fall ‘13
6.1.0.0 Microsoft Dynamics CRM 2013 Service Pack 1 and CRM Online Spring ‘14

 

I believe CRM 2015 is version 7

Back to Solutions

CRM MVP Jason Latimmer answered the forum post

That was a mistake in the SDK – solutions exported from CRM 2011 won’t be able to be imported into CRM 2015.

CRM 2011 solutions imported into a CRM 2013 environment will function as expected (assuming they use CRM 2015 supported methods) when the organization is upgraded to CRM 2015.

So this suggests you cannot import CRM 2011 solutions in CRM 2015

Next I found this blog post

https://community.dynamics.com/crm/b/magnetismsolutionscrmblog/archive/2014/10/05/upgrading-from-microsoft-dynamics-crm-2013-to-microsoft-dynamics-crm-2015.aspx

Not solutions but upgrades must be CRM 2013 Service Pack 1 or higher

Upgrades to Microsoft Dynamics CRM 2015 must start from Microsoft Dynamics CRM 2013 plus Service Pack 1 or higher.

Finally  I finished with Feridun’s knowledge base

http://fkbase.info/node/224

Solutions

CRM 2013 managed and unmanaged solutions (6.0 and 6.1) can be imported into CRM 2015 (but not CRM 2011)

Verdict

The verdict seems to be you cannot import CRM 2011 solutions in CRM 2015.   This makes logical sense when you consider the changes in CRM 2013 and many of the customizations could be different.

If you had a CRM 2011 solution the best practice would be to upgrade to a CRM 2013/CRM 2015 to check it still worked as expected

So what does this mean

For most people this doesn’t mean anything but if you have a solution you have developed and you want the solution to work in CRM 2015 and earlier versions of CRM then you will need to have two versions.

This probably won’t affect many people because I can’t think of many solutions which would not have changed from CRM 2011 to CRM 2013 (let alone CRM 2015) due to the major GUI rethink in CRM 2013.

It is likely tools and code not touching the front end and using core functionality could be the same.  Core plugin code hasn’t changed much in the from CRM 2011 to CRM 2015 but there is a possibility the CRM 2011 code could be using deprecated methods or the SDK code works differently in CRM 2015.

I would advise people to upgrade the solutions and test the customizations because you can’t be sure they work as expected until you try them.

It does mean if you will need to have two solutions, one CRM 2011 solution and one CRM 2015 solution, in the same way Scott Durow has created two solutions

Why did I blog about this

The likelihood is most people will never have to worry about this scenario, but this is the sort of problem that crops up when people assume they can load up their CRM 2011 solution into CRM 2015.  When you try to do it,  you get errors, a bit of head scratching before you need to import an unmanaged solution into CRM 2013 which you could then export to a managed solution and into CRM 2015.

This is the same version hop you run into if you want to upgrade a CRM version up more than one version e.g. CRM 2011 to CRM 2015, you first have to upgrade to CRM 2013 before you can upgrade to CRM 2015.

 

Upgrade Path

Whislt thinking about solutions, I was thought about upgrading to CRM 2015 and read this blog post CRM 2013 to CRM 2015 Server Upgrade

The blog mentions the upgrade path of CRM must go from CRM 2013 Service Pack 1 to CRM Server 2015.

The only supported upgrade path to Microsoft Dynamics CRM Server 2015 is from Microsoft Dynamics CRM 2013 Service Pack 1 (SP1).

The blog also mentions CRM 2013 server roles are not compatible with a CRM 2015 deployment.  So if I understand the blog correctly it means when you upgrade one server to CRM 2015 the other servers (if you have multiple servers) will become disable and need upgrading too.

I’m not sure when you would have a scenario where you only upgrade some servers but the point about a CRM 2013 server must be at Service pack 1 before upgrading it’s certainly useful to know.

Why Apply rollups before upgrading

When you upgrade CRM two versions e.g. CRM 2011 to CRM 2015, the best practice is to apply the highest rollup or a particular recommended rollup to a certain level before upgrading,

The reason for this is when rollups are applied to CRM they not only include new CRM dll’s/new code and functionality but behind the scenes they can make changes to the CRM database, adding and removing fields.

Adding/removing fields is one reason why you should never create customizations directly agaisnt the CRM database because fields or tables (in reality tables rarely change, but they could!) could be changed/removed during any upgrade or patch release.

Random solution facts

whilst looking for more details on this problem I found this MSDN article, which has a couple of random size issues I wasn’t aware of

Maximum size of solution to import

For Microsoft Dynamics CRM Online the maximum size for a solution is 29.296 MB.

For on-premises organizations, the default maximum size for a solution is 6 MB, but this can be increased as needed.

Really random fact

CRM 2011/2013 – Progress of solution import

I recently had a bit of trouble getting a solution to import which you can read more about here, it was timing out when trying to import a solution.

One frustrating aspect of importing a solution is the CRM GUI basically freezes or doesn’t tell you any useful information whilst the solution is importing, you have a progress bar which doesn’t really tell you anything

So I was wondering what was happening inside CRM whilst the solution imports and found there is an ImportJob view (made up of ImportJob base and extended tables) and this holds a bunch of interesting information about the solutions you have previously imported and solutions which are currently importing and their current progress in percent.

if you run this query on on the your org database e..g (orgname_MSCRM)

select CreatedByname, OrganizationIdName, progress, Solutionname, data
from importjob (NOLOCK)

this will give you a list of all the solutions you have imported

I then found this great blog post SQL Query to get the progress of importing Customization in MS CRM 2011

This contains a query to run which will give you details on the progress of the current solution being imported

 

Below query will help you to find out the progress of import.

 

Use <<OrgName_MSCRM>>

Go

 

SELECT TOP 1

progress                                 [Progress%],

Solutionname                             [SolutionName],

DATEADD(hh, 5.5, startedon)              [StartedOnPST],

DATEADD(hh, 5.5, completedon)            [CompletedOnPST],

DATEDIFF(second,startedon,completedon)   [TimeTakenInSec],

DATEDIFF(minute,startedon,completedon)   [TimeTakenInMin],

createdbyname                            [ImportedBy],

OrganizationIdName                       [OrgName],

Data                                     [ImportOutput]

FROM

importjob IJ (NOLOCK)

ORDER BY

IJ.startedon DESC

 

This was really useful because we could see the progress of the import.  Also if it didn’t import correctly you can look at the XML in the data and see the error

I haven’t tried this on CRM 2013 but I’m guessing it has the same table with the same information in.

CRM 2011 – Solution not importing – Timeout errors

We had an annoying error, we tried to import a solution with a new field on the case table.  The case table already had 300 plus fields on it so it was a bit a mammoth table.

Whilst trying to find the problem we split the various enhancements into separate solutions in an attempt to make each separate solution smaller and increase the chances of smaller solutions importing rather than one big one.

The reason we split up the solution was because we thought the problem was a timeout issue.

Interestingly the solutions with workflows and plugins imported.  The solutions with other entities included also imported and we were left with a solution with just the case entity in which was still refusing to import.

The changes in the solution were minimal, we were basically adding one new field to the case entity but I guess this is adding a new field and value to all the case records which already exist in CRM database.

 

I remembered I previously had problems importing a large solution, so I searched my blog and found this

CRM 2011 – A time-out occurs when you import a solution in Microsoft Dynamics CRM 2011

In the blog I also refer to this KB article about a timeout when importing solutions

 

We were pretty sure the import was timing out because it was taking too long to import, so we increased the OLEDBTimeout and the ExtendedTimeout and this allowed the import process more time to import the solution and finally it worked.

A good reason to write blogs is you might run into the problem again later and if you have blogged about it you can easily find the solution to your problem even when you have forgotten the solution yourself.

I imagine this solution and the two registry keys would probably still be used in CRM 2013 although I haven’t tried this out yet.

 

 

CRM 2013 – Exporting your changes in a solution from your CRM 2013 trial

I have had my CRM 2013 trial for a month and those of you who jumped on board on Hosk’s CRM Dev youtube channel will also have also created a CRM 2013 trial which will be expiring soon.  It would be nice if Microsoft could just give me a CRM 2013 organisation to use, particuarly as I mainly use it answer Forum questions and to test CRM and write blogs on CRM 2013 functionality.  Still I’m sure there are a lot of people who would like that but I like everyone else have to create a new CRM 2013 trial every time my current ones runs out days

Here is the video, where I run through the steps of exporting your solution

http://youtu.be/njq9kMbpxsc

Usually Microsoft send you some emails saying your trial is ending soon, you better act quick because all your data and changes will soon be deleted, unless you give Microsoft some money and sign up for a minimum 5 user monthly license and a years contract (I think these details are correct)

The good news is you can just create another trial and in the past my CRM 2013 Trial was still accessible up to 60 days later but it might become accessible any time after 30 days, so we need to act now to save our customization’s from being sucked away.

 Visual Studio

You code components are usually safe from the trail ending.  The reason they are safe is because they will probably be offline in your CRM 2013 Developer toolkit, so you have an offline backup of these file and the ability to import them into a new solution.

The plugins in a solution are an interesting limbo point because in solutions plugins are compiled DLL’s, which is great for moving between CRM organisation, if you want to change those plugins you will need the class files and the code logic (although I do appreciate you can decompile dll’s, its not something you want to be doing often).  So you do need to keep track of your Visual studio CRM 2013 Developer solutions and projects.

Exporting your solution

Open your solution in CRM and make sure you have all the components you have changed or want to take to your new CRM 2013 Trial

Click on components and this will show you all the components that are currently in your solution

solution export 1

anything you don’t want select and click the remove button.

There may be things you have edited in the default solution, if you want those then you need to click the add existing component and select that component.

 

When  you are happy click the Export Solution button.

It will ask you to publish customizations, if you have changes saved but not published you should publish those changes because you cannot export any save but not published changes.

click next

now you will see a list of dependent components, these are components that must exist in the target system to work and the reason for this is because they are referenced in the components in your solution.  An example is Contact is a required component in my solution because there is a contact lookup on the account called Primary Contact.

solution export 2

 

In my example I know all these required components will exist in my next CRM system because they are all default components but if you may need to add some custom ones if you had added them and they don’t exist in your current solution.

Press Next

It asks you if you want to bring the system settings with you?  This depends if you have changed any

Press Next

You now have to choose managed and unmanaged.  If you are not sure export both solutions (it means you will have to run the export wizard again).

I view managed and unmanaged as

managed = Read Only

Unmanaged = Editable

if you export a managed solution it means you won’t be able to modify that code on the target CRM organisation.  This is usually for a customer release.

In my example I want an unmanaged solution because I want to be able to edit and change the components in the next CRM instance I import them into.

 

Data

If you have changed the data in your CRM system and want to bring it with you to the next CRM organisation then  you need to do an advanced find, select the records you want and then export those records into Excel.

Don’t tick the allow for remimport button we want to import this data into a new CRM organisation so there is no point getting the guids because they won’t exist in my new CRM trial.

 

Backing up

It’s a good idea to back up your Solutions as Managed and unmanaged.  I would advise you to keep a backup of all the solutions you create, particularly changes in version format.  Solutions provide a great way to backup custmoziation and allow you to quickly import component changes without having to import new/old data

 

So now you have an export of your changes in a solution ready to import into your next CRM 2013 trial, where you can continue to learn about CRM Development and try the new CRM 2013 features.

 

 

CRM 2011 – Free universal search solution from Sonoma Partners

The Sonoma partners have done many great things for the CRM community, they have an excellent blog, they have authored some of the best books on CRM out there and now and again they write an excellent add on for CRM and give it away for free.

This is some functionality which I have been asked for by customers previously. It gives you the functionality to search multiple entities at once.

The video below show the functionality in action

if you want to download the free solution then go to Pinpoint by clicking the link below and in exchange for you name and email address you get a free universal search tool in CRM

http://pinpoint.microsoft.com/en-us/applications/universal-search-for-microsoft-dynamics-crm-2011-free-12884946856

it can also be configured to specify which entities you want to be able to search.

CRM 2011 – Tool – Export Web Resources

CRM MVP Mitch Milam has created a useful CRM 2011 for exporting web resources out of CRM 2011.  This link will take you to the blog page where you can read about the tool in more detail.  Once again Mitch is showing why he is a CRM MVP

click here to download the tool

This screen shot gives you a good idea of what the tool does

Mitch also has a few other free tools which are worth checking out.  Click the link below to see all of his tools for CRM 4 and CRM 2011