2009/04/15

CRM Tools Just makes Life so much easier!

Hi
CRM Tools is one of those things that just makes your life easier.Below is a list of tools found from Patrick Verbeeten.

http://www.patrickverbeeten.com/pages/ContentListPage.aspx?id=9&&&&

Make sure that befor you install these tools you comply with the system requirements:
.Net 3.5 will be required so make sure it is installed on the machine on which the toll is being deployed.

Full Installation package:
http://download.microsoft.com/download/6/0/f/60fc5854-3cb8-4892-b6db-bd4f42510f28/dotnetfx35.exe
Redistrubutable package:
http://download.microsoft.com/download/7/0/3/703455ee-a747-4cc8-bd3e-98a615c3aedb/dotNetFx35setup.exe


Event Listner
A new tool is available which allows you to view CRM plug-in events as they occur, including all details available from the IPluginExectionContext.

Tracing and Debugging error in CRM 4.0
If errors in Microsoft CRM occur there can be a user friendly or otherwise limited message presented. To find out what actually is the problem is not difficult you just have to know where to look.
Wether it is an authentication issue or a SoapException 'Server was unable to process request'. This article offers some pointers on where to look for additional details.

Microsoft CRM Date values
CRM support user working in multiple time zones by storing alle date time values as UTC. This way the time can be easily adjusted to the users time zone setting. This article explains this in a bit more detail.

As for date values, some dates such as a birth date can be fixed regardless of time zone. CRM will still adjust these to the time zone, this may show as a full day difference in the interface. This article contains a plugin to allow you to use dates without timezone dependecies in CRM.

CRM 4: Waiting workflows
In CRM 4 workflows can have the status waiting when an they are waiting for an event such as a timer or they will also have this status if an error has occured. To find out which take the following steps.

Translation assistant
With version 4.0 Microsoft CRM the option to have multiple languages in a single interface became available. To translate the various available labels CRM offers an option to export all labels to an excel file.

The problem I found with this file is that it lacks context of the text you are translating. For instance the text "Address 1: Line 1" this appears for each entity, form and view that uses this fields. So if you want to change only one label it will take you a lot of trial and error to find out which field you want to change.

Cross domain remote debugging
When you are developing with a virtual PC which is running in its own domain or want to debug any other system which is in a different domain than you own user remote debuggin will normally fail on authentication errors.

Crm 4.0 Sitemap & ISV.Config Editor
As of CRM 4.0 the sitemap and isv.config file are no longer available on the file system but stored in the database. Which means that for each change you have to export the customization, make your changes and then reimport the customizations file.

Plug-ins and Workflows: Extension of Microsoft CRM 4.0
Microsoft CRM 4.0 has several methods to add functionality, to create custom workflow in CRM you have two options plugins and workflows.

Generating an Time table in SQL
In reporting queries it happens often that you need a ruler of some sort for instance a table containing all days between a start and end date. You can generate such tables by using a looping construct but this isn't the strong point of SQL.

Source control server setup
For my source control I use subversion and I found the easiest method to install a fully working subversion server (combined with trac for issue tracking) is to do that on linux. I can setup a clean server from scratch in about an hour including all required configuration. For a windows server I would need that just to install windows and get all the software packages. Best thing is I have a single script to do this, this also includes some scripts to facilitate backups and setting up new subversion/trac repositories.

CRM 4.0 Plug-in message input parameters
The CRM 4.0 plug-in model offers great capabilities. But when working with the plug-in messages you would need to know which input and output parameters are available. Unfortunaly this is not (yet) in the supplied documentation, but here it is.

Crm Developers Tool
A combined Entity and Plug-in Browser for Microsoft Dynamics CRM. Allows you to browse the entire entity model beyond the standard list.aspx Entity Browser. And a plug-in browser which offers a GUI to view and update plug-in registrations.


CrmService Testing v1.1
I have added some new features to the Crm Test service proxy which you can read about in this article. The changes allow you to dicate which requests are expected and validation is then handled by the base class.

Embedded Sql, LINQ like behaviour
When ever you create an application which uses a database. There certainly are variatons but you have basically two option when it comes to how you have de SQL-Statements. You can choose to type the SQL-statements in the source code or you can create stored procedures. Both of these have their own advantages and disadavatanges.
In-code statements ensure that when te application is deployed, no stored procedures have to be updated. Stored procedures on the other hand offer better speed and reusablility.

To allow stored procedures to be created, maximize easy of deployment I created the this. The .sql files can be edited in either Visual Studio or the SQL Management studio with full support of the syntax checkers and code-Highlighting. This class does have one other main feature it makes each declared procedure available as a strong type .NET class to access the parameters.

Testing without touching the CrmService
If you have ever tried to do unit testing on code which uses the Microsoft Crm Webservice proxy you will is nearly impossible to test just that code. I will allways rely on the Crm Server for data and callouts to function and test these in to process. This article offers a class implementation which actually stubs out the CrmService request.

Command Crm Customization Export, Import and Publication
Import, Exporting and publishing customizations in CRM 3.0 using the web interface can be time consuming. Also when an export fails the information returned is very limited. I created a small command line application to do just the same. It uses three WebServices provided by CRM specifically for this purpose.

Localhost and integrated security
One thing I allways run across when installing a new server is that it won't allow connections over the loopback interface when using integrated security. I usually test the applications from the server console and everytime they give errors; 401.1 for most applications but the Microsoft Virtual server administration console for instance returns status 500 with a message parameter incorrect.

Captcha
For this site I wanted to add some mechanism to avoid getting the article comments spammed with links and other junk. To this end I added validation using captcha. I found the code to generate the image on the internet and extended it a little. I extended a TextBox control and created a Http Handler to facilitate easy use. The code for these is downloadable here.

Version Control
Version control is important when your developing software. I know I am not the first guy to throw away the wrong file or section off code. When properly installed using source control will also service as atleast a partial backup you of your source. And as an added benefit you can see who did what and when which can be usefull in tracking bugs.

The CRM webservice
The Crm 3.0 webservice is a great improvement on the 1.2 version but still due to the nature of webservices working with it can require some quite elaborate code. You need to instantiate the class, configure security, create a ColumnSet, add columns to the column set and finally execute the Retrieve method and cast its result. This results in about 10 lines of code for such a simple action. Using partial classes introduced in the .Net 2.0 framework you can extend the Webservice without lossing the easy of recreating the webproxy when you change or and a type. Using generics you can even enforce type safety at compiletime.

This site
As you probably will guess and easily can see this site is written in .NET to be more specific in C# .NET 2.0. It also uses some content management. This basic content management system was written in a single weekend. Granted it isn't entirely fool-proof nor does it offer the options of the system available like DotNetNuke, but using some of the framework .NET features this system offers the same extensibility. The content management is an extension of the framework it self.

Generic strong Type String to Any Converter
This is one of the oldes pieces of code i wrote in .NET and still use. This class is written for conversion of xml node values to a .NET type but can also be used to with plain strings. Every time I needed a node value I had to check if the node existed, is it an element or an attribute before I could even start converting the value. This class handles all this and using generics and the IConvertible interface returns all strongly types and correctly converted.