Developer Focus – CRM Solution Manager Review

I’ve been using the CRM Solution Manager for a few months now and I thought I’d provide some insights on the product in case you are considering making the investment.

What is it the CRM Solution Manager?

CRM Solution Manager is a productivity tool for CRM Developer that integrates with Visual Studio and Dynamics CRM. The idea is for a CRM developer who writes plugins, custom workflow activities, JavaScript and HTML web resources to be able to do his/her development and manage deployments of the development components to CRM all from Visual Studio in a user friendly way.

The product comes as a Visual Studio Extension file (.vsix) and currently supports Visual Studio 2010, 2012, 2013 and 2015, that means it very likely supports the version you are currently using (I really hope so!). There is a free 30 day trial available to try.

After the installation, when you run Visual Studio, you are presented with a screen to log onto CRM:


When the connection is completed, you can create your projects (Class Libraries for plugins and custom workflow activities, and Empty Web project for web resources). Once your projects are created, the fun can start.

Plugins and Custom Workflow Activities Development

For server side development, the tool brings a lot to the table.

If you have a class library project not linked to CRM or not containing anything at related to CRM, right clicking on the project will give you the possibility to either add the Plugin Assembly to CRM or create Proxy Classes.


For a Plugin Assembly that’s already linked to CRM, you get a menu that give you the ability do a little more:


  • Build and Publish: This will build the Project, and update or publish the Plugin Assembly in your the CRM Organization you are connected to
  • Add Proxy Classes to Project: This will open a window for you to selected the entities you want to generate proxy classes for, as well as other settings such as the path (folder in which you want the classes to be created/updates), and which naming convention you want to use for your entities and fields (Display Names or Schema/Logical names)


  • Edit Plugin Assembly Details: Allows changes to Plugins Assembly details such as Location, Isolation Mode. Also gives the ability to configure ILMerge for merging multiple assembles at build time. This is helpful if you are used to creating ILMerge post-build event all the time.


  • Edit Plugins and Steps: This will give you a screen that looks very similar to the Plugin Registration Tool with options to add plugins, register/edit/disable steps, add and edit plugin images etc. Basically you get the same content as the Plugins Registration Tool directly from Visual Studio


  • Download all linked Items from CRM: This option will force a download of all the items that are linked to CRM. In this case, we are talking about the Proxy Classes that were generated using the feature described above.
  • Update all items: This will update CRM with the content of the project, in this case, it will update the plugin assembly using the latest build

Worth nothing, all the configuration (linked items to CRM, CRM connection etc.) is saved in an Xml file that resides in your solution root folder. If you need and want to carry your CRM Solution Manager configuration across multiple environments and for multiple developers, make sure you include it in your source control (it is not done automatically).

Client-Side (JavaScript/HTML) Development

The experience is very similar with to what we get on the server side. Right clicking on the right button will give you a CRM option with a few options.


  • Add Items to Project: Given that it is a web project in this case, the items that can be added to the project are a bit different than what we had in the Plugin project. You can select a CRM Solution, and from there you can download the Charts, Images, JavaScript, Sitemap, Web Files (HTML), as well as generate JavaScript and TypeScript Intellisense files for selected entities.


  • The other options are similar to what we had in the section above:
    • Downloading all linked items from CRM will update all web resources by getting the latest version from CRM
    • Update all items will update CRM with the items in your Visual Studio project
  • Worth noting, individual web resource files in the VS project are linked to their CRM counterpart which means you can publish single web resources by right clicking on them in the VS project and selecting Publish file to CRM


Wrap-up

The Good

  • The product is really not too intrusive. It doesn’t add any project creation template that your solution becomes dependant on. It doesn’t create any additional cumbersome toolbox that you need to open to manage your CRM related operations (no point intended)
  • It is a HUGE productivity booster. One can easily get used to having proxy classes easily regenerated on demand, as well as JavaScript Intellisence. One can also really get used to deploying web resources and plugin assembly without opening CRM or the plugin registration tool
  • The support team is very reactive, I have received an answer to all my inquiries within a day
  • The product is being actively maintained and updated to support the latest versions of Dynamics CRM and Visual Studio

The Bad

  • If you are using CRM Solution Manager for specific things (e.g. creating Proxy classes and Option Set Enumerators), it means one of two things. Either all of your developers need to be equipped with the add-on in case the classes need to be regenerated  or the entire team dependent on one person to regenerate the entities classes when required. If you are the only developer on the project, it will work well for you. However if you are a consultant and need to hand-off the code when you are done, you may not want to us it to generate the proxy classes as people who will maintain the code might not have it to generate identical classes in the future.
  • The price point is a bit high. At $209.95 US per license (with volume pricing available), it is almost as expensive as some of the excellent and proven productivity tools such as Resharper ($300), Coderush ($250). That makes your development environment a bit expensive to set up. Pricey also considering there are free tools like the CRM Developer Toolkit (for which we are still waiting for a new version for VS2015, CRM 2015/2016), some of the tools in the XRM Toolbox and also the CRM Developer Extension developed by fellow CRM MVP Jason Latimer. The latter is a must try, the feature set is impressive and extremely complete! I haven’t had a chance to work with it yet but I will make sure to review it once I do.

All in all, I would recommend the CRM Solution Manager if you are an Organization with Dynamics CRM deployed internally with multiple developers writing code that targets the platform. If you are a solution integrator or a consulting shop, make sure you don’t create too much of a dependency with the tool, because your clients won’t necessarily have access to the add-on.

Hope this help!

For further questions and assistance with your CRM Development tools and environment, or other Dynamics CRM related inquiry, feel free to reach out to us!

 

Why Integrate Dynamics CRM with BPM Tools?

I came across this article a few days ago about integration between Dynamics CRM and Business Process Management (BPM) tools. As much as I believe there is a case to be made on integration between CRM and BPM tools, I felt like the examples/scenario presented in that article weren’t strong enough.

For example, if we take the scenario were “once a lead record has been created, it is assigned to the appropriate owner on the sales team, and that person can take the necessary steps to nurture the lead towards an opportunity“, it is simple enough to be handled directly in Dynamics CRM. Same for a case management solution, when a “case has been created in Dynamics CRM with all of its details,” how do we “ensure that the proper support team member receives it, handles it according to defined steps, possibly escalates it, and ensures that it is completed accurately in an optimal manner?“. From these simple lines, depending on the specs, Dynamics CRM offers enough with its Windows Workflow Foundation based workflow engine. In the CRM integration context, the different BPM products out there are essentially about managing workflows with a third party software that does what CRM Workflows (WF) can do and more.

So why would one use a BPM tool when CRM already offers some workflow capabilities? Here are a few reasons that I think are key to help deciders make a sound decision on whether to invest in a BPM tool to integrate with CRM or not…

Workflow Complexity

When building very complex and long workflows, the Microsoft Dynamics CRM workflow editor is very limited and it can become very frustrating and reduce productivity:

  • The user interface is sometimes slow to respond (especially when there is a lot of custom code)
  • You can only go (I think) 5 or 6 levels deep and create child WF if you want to go deeper
  • It’s not easy to read at all

BPM tools often provide a better workflow design experience by using visual editors, either custom built or on top of other applications (e.g. MS Visio, MS Visual Studio etc.). That makes the workflows easier to build and to read. It also takes away the “levels” issue, removing the need to create child workflows when you have more than 5 deepness levels.

Workflow Systems Integration/Complex Workflow Operations

If you need your workflows to talk to other systems (web service calls, external connectors etc.) or just to perform some more complicated operations (retrieve multiple, bulk delete/update etc.), it’s all possible in CRM by creating custom workflow activities (.NET Code). These would have the logic within them to make the necessary web services/external calls/complex operations. Some BPM tools provide with the ability to integrate web services calls or make complex operations with simple configuration (no code). A few good reasons to use a BPM tools in this context would be:

  • You don’t have the Dynamics CRM expertise in house to build the custom pieces (custom workflow activities)
  • You have so many different external calls/integration to do within the workflow that it’ll create too much custom code resulting in more difficult debugging and costly maintenance in the future

Workflow Version Management

Depending on what the WF does, you may need to keep a detailed history of WF execution, including which version of WFs have been triggered for specific records. Also what CRM is lacking is a workflow “live update” feature. Say you trigger a WF on record A and it gets to some wait mode. At which point you update the WF in the CRM solution. Well, the version of the WF that is executing against record A is still the “old version” of the WF and you cannot change that. Some BPM tools have this feature built in.

Workflow Looping Mechanism

CRM Workflows don’t really allow looping. You can create a mechanism where a WF keeps calling itself as a child but that has a very negative impact on performance and eventually, CRM kills the loop thinking it’s an infinite loop (managing resource consumption). BPM tools have the capability to use loops sometimes very easily and with a much lover impact on system performance. Something to think about if you have plenty of WF in waiting and looping mode in your system at the same time.

These are a few elements that can help you decide if you want and/or need to use a BPM tool with your CRM. From my experience, depending on what you are building, BPM add-ons can be costly so before going down that road, it is important to assess the need and selected the right solution based on these needs. On the flip side, if what you really need is  a BPM tool to manage your workflow/processes, do you really need CRM? Food for thoughts… There are plenty of options out there, including AgileXRM, K2, PNMSoft and many more. They all come with different features so just checking them out is an interesting exercise!

Cheers!

CRM 2011 Solutions Manager Update

I recently made changes to the CRM Solutions manager. One of the most requested feature was the ability to import solutions from a computer directory as opposed to having a “source” organization from which the solutions had to be exported. The list of features is available below and the tool and source code are available on the CodePlex project. Enjoy!

CRM 2011 Solutions Manager features

  • Export CRM Solutions as managed and/or unmanaged from Source Organization
  • Import unmanaged and managed Solutions from source organization to target organization
  • Import unmanaged and managed Solutions from local folder (.ZIP solution files) to target organization
  • Publish all Customizations in target environment after each solution import or after all solutions are imported
  • Supported installation types
    • CRM Online (tested)
    • On Premise (tested)
    • ADFS (not tested)

Always, for background on the tool, you can always check out the article I wrote a while back that provides more details on why the tool the built in the first place.

CRM Solutions Import/Export Tools

Using the development methodology defined in the picture below (for more details, see Gonzalo Ruiz’s blog post here), our team spends a lot of time exporting unmanaged solutions from the Integration Development / Configuration environment (B) to our development environments (A), exporting and importing our “transport solutions”.

With the master solution growing in size, it takes more and more time to export, import and publish it every time. My colleague Jean-Francois Fortin and I worked on a very simple console application that automates the process of exporting and importing CRM solutions from one organization to another. Since then, it’s been transformed into a nice looking tool with a GUI (yes, we are that nice!). You can download the executable and the source code on the CodePlex project. The UI version of the application is the recommended and default download. Configuration is straight forward.

If you are using the Console version (older release), make sure you read the user guidelines below. All you have to do if you are not a developer is download the executable and edit the configuration file to point to your environments and solutions.

Application Guidelines

Usage

The menu is self-explanatory:


It should be noted that currently only unmanaged solutions are supported for import. If a timeout occurs during a solution import, the program polls the server every 10 seconds to see if it has finished the import task. To avoid a timeout during publish all customizations or other operation, set the ServiceTimeout, configuration parameter to a reasonable time (default is 2 minutes).

During import, the file matching your solution name which has the most recent time stamp and not containing managed.zip in its filename is imported.

During export, the version number of the solution is appended, as per the CRM default export filenames.

For now, this only work for Microsoft Dynamics CRM on Premise.

Configuration

Once compiled, you can modify the Crm.Utilities.SolutionsDeploymentTool.exe.config file in the bin directory to change the values for the source and destination organizations or App.config before compilation.

CrmOriginOrganizationName

The name of the organization to export from. There can be several organizations on a server, so with this parameter you can select which one to export from.

CrmOriginServer

The URL of the server to export from. Include the http:// prefix and the port number if necessary.

CrmTargetOrganizationName

The name of the organization to import to. There can be several organizations on a server, so with this parameter you can select which one to import to.

CrmTargetServer

The URL of the server to import to. Include the http:// prefix and the port number if necessary.

ServiceTimeout

The value of the default CRM organization service timeout value in minute. If left blank, timeout will be set to 2 minutes.

SolutionNames

These are the solution(s) to export and later import. They are semi-colon separated.

ExportFolder

This is the folder the solutions will be exported to and imported from. There should be a trailing slash.

CrmDomain

This parameter is optional (it can left blank). It can be the active directory domain on which your username is valid.

CrmUsername

This parameter is optional (it can left blank). This is the active directory user name used to log on to the server.

CrmPassword

This parameter is optional (it can left blank). It is not encrypted (saved in plain-text). This is the password matching the username in the previous parameter.