Update to CRM Utilities for Visual Studio

Just recently updated the CRM utilities extension with the following fixes :

  • Supports SVG files correctly. Although publishing files to an SVG Web Resource was working, if a file in Visual Studio had the SVG extension, when right clicking it, it would not offer the option to Link or Publish.
  • When extracting a solution from Dynamics, if the Web Resource naming convention does not have a file extension, then the Publish and Linking features would not work properly. Now, if it detects that the file has a corresponding “filename.data.xml” file (which it will if its been exported and unpacked from Dynamics), then it will offer the Publish and Linking options.
  • When trying to link or publish a TypeScript file, if an equivalent JavaScript file exists in either the same folder, or in an alternative JS folder, then its that file that will get linked or published. This means you can directly edit a TS file, save it and publish, without having to select the JS file.
  • An Entity Filter has been added to the Class Generation options allowing a list of entity logical names (separated by a semi-colon) to be entered. When creating a class file, any entities that are found in this list are not added to the file. This is very useful when you have a similar named custom entity that always clashes with a system entity. For example, if you have your own address entity, you can exclude the system address entity.

As usual, you can get the update from the Marketplace, or by downloading here :

Microsoft Dynamics Template for Visual Studio updated

I have recently updated my Visual Studio Template for holding Microsoft Dynamics Assets. Its available on the Marketplace by searching for Hallstudios, or you can download it using the button below.

  • I have added a new Project within the Solution Template for holding TypeScript files for use in the Entity Forms. Creating and editing a TypeScript file will automatically create a matching JavaScript file which can be uploaded to Dynamics.
  • The solution also includes Intellisense for the Xrm Client API within the TypeScript files.
  • The Solution Unpacker tool has been updated with the latest version so it now supports packing and unpacking Dynamics Solutions that contain Flow’s.

PDF Lite Viewer update

The PDF Lite Viewer application has been updated so that when re-opening the last file via file association, the page number is preserved.

This was a small issue where if you double clicked the file to re-open the file that was last read, it would lose the page number.

PDF Lite Viewer

I have decided to release the PDF Lite Viewer app that I built initially for my own personal use, but others may find it useful.

Its a keyboard driven PDF viewer that allows me to read PDF Books on my GPD Pocket 2 computer, rotated, like a book, and using the arrow keys to page through it.

Trying to emulate the traditional eBook experience, but as none of the eReaders seem to have decent PDF support, I thought I would see if this works. Check out the video below, and you can download it from its own page.

Download from the PDF Lite Viewer page.

DevOps Home Server – Part two – Software

For the purposes of my own home DevOps server, I decided to use the range of Atlassian software.

Source Code Control Atlassian Bitbucket
Project and Issues tracking Atlassian JIRA
Documentation Atlassian Confluence
Build and Deploy server Atlassian Bamboo
Code Analysis SonarQube

The main reasons for this are :

  • I have used these applications in a previous job
  • They all integrate really nicely with each other
  • They are affordable (even though there are free open source equivalents)

Once they are all set up, and connected together, you can quickly change between them when browsing the web interfaces.

In terms of price, each one of these applications (apart from SonarQube which is free) costs $10 for a permanent license for 10 users.  If you wish to get software maintenance, then you can pay that price every year (actually, its half that for extending the maintenance after the initial purchase), but in my case, the initial purchase is going to be fine, costing not much more than a decent takeaway.

The Virtual Machines

Both VM’s are running on my original Intel NUC Server (i7, 16GB RAM), set-up with Microsoft Windows Server 2012.  I decided to create a separate SQL Server machine for a couple of reasons, one to reduce risk of failure (so one VM is not hosting everything), but also in case I ever need a general purpose SQL Server, it can be used for that as well.

SQL Server

I have installed Microsoft SQL Server 2016 on the VM, opened up appropriate ports, firewall rules etc., and that was about it.  It now sits there chugging away nicely.  I have still yet to sort out any form of backup system.  I will probably set up some automated database backups, but I will also aim to have the actual VM backed up as well.

DevOps Server

The DevOps Server is another VM, although I have given it a big more power than the SQL one purely as it will be hosting a number of applications at the same time, and it will need a fair amount of oomph to keep it all running smoothly.

Installing the software

NOTE: this is not a guide on how to install everything, just an overview of the experience.

The first step was to install Java as most of the Atlassian products are built on Java, after which I also installed Visual Studio as I knew that was a requirement for the Bamboo Build and Deploy server.  I then one by one installed and configured the following applications :

  • Atlassian JIRA
  • Atlassian Confluence
  • Atlassian Bitbucket
  • Atlassian Bamboo
  • SonarQube

Each piece of software required me to choose a program location, and a data directory.  Most software also added a Windows Service as well (although some had to be manually installed by running some command scripts).  Each application would start, and allow me to perform the first time configuration.  This involved the usual initial settings, database connection etc.  Most Databases had to be created prior to running the first time config, and also had to adhere to the softwares requirements in terms of collation settings.  Each Database was given its own specific user for the application to use (a standard sql user).

As I was wanting them all to have the same user database, I elected to use Active Directory, although this had to be set up after the initial install.  Most of the applications required the same AD config, and once I had figured it out for the first one, the others were straight forward.

Once everything was up and running, I was able to connect all of the Atlassian applications together so they show up on each applications hamburger menu, and as they are all configured with the same set of AD users, I am able to switch seamlessly between the applications.

External access

Obviously, as this is all just running on my home network, if I ever have to go anywhere, I don’t want to not be able to access it all, so I wanted to expose it to the outside world.  I am not worried about security, or about having my home broadband thrashed by outside users as its only going to be me using it.

To expose them online, all I had to do was configure up some port redirects on my router, so that any traffic hitting it on the relevant applications ports where forwarded to the correct port on the virtual server.  I configured my router to use a dynamic DNS service (Netgear’s own service) so that my home network could be reached on somehost.mynetgear.com on all of the configured ports.

I then configured an appropriate domain so that the various sub domains would also redirect to the somehost.mynetgear.com.

jira.someexternaldomain.co.uk → somehost.mynetgear.com

confluenace.someexternaldomain.co.uk → somehost.mynetgear.com

bitbucket.someexternaldomain.co.uk → somehost.mynetgear.com

bamboo.someexternaldomain.co.uk → somehost.mynetgear.com

sonar.someexternaldomain.co.uk → somehost.mynetgear.com

Unfortunately, this means that everything is still reliant on ports, so when accessing one of the sites, I would still need to use something like http://confluence.someexternaldomain.co.uk:8090, but I am not too bothered about that.

Internal DNS

Now, one issue that I discovered with this plan was that each application, when trying to internally communicate with the other applications, because all URL’s (on the server itself) where full domains, and not just IP addresses, they would actually do the round trip to the internet and back.  This was not good as it would of caused delays etc.  What I did to fix this was to go on to my Active Directory VM, and set up DNS so that forward lookup DNS settings meant that any machine on the internal network, using AD, would not need to go outside the network for these URL’s.


In terms of performance, it all seems to work well.  There are times (such as if there is a build job running), that things seem to slow down somewhat, but I would say its no worse than I have seen in a real production environment.  It all works rather well, and it feels like I have my own professional business environment right at home.  The only issue is that the actual server makes a bit of noise. The fan seems to be working pretty hard, but I can just shut the door on my office and forget about it.

In the next blog post, I am going to describe the workflow of using it all.

Portals Support added to CRM Utilities for Visual Studio

Get it on the Marketplace

I have updated my extension to support publishing of files from Visual Studio to Microsoft Dynamics Portals.

The tool now supports publishing files to Web Templates and Web Files, allowing you to use Visual Studio to edit and track changes of your portal related files, and quickly update Dynamics with the appropriate Portal files.

Web Files and Web Templates are simply listed within the Web Resource linker dialog for you to select.  You can then publish the appropriate files within your Visual Studio solution to Dynamics.

If you have installed the extension from the Marketplace, then it should prompt you to update, but if not, you can get it from the below link.

CRM Utilities for Visual Studio

My utilities are now on the Visual Studio Marketplace

Just a quick update to say that all of my Visual Studio extensions are now on the Microsoft Visual Studio Marketplace, and are available to download and install direct from Visual Studio.

Visual Studio Marketplace

Simply go into the Tools menu and choose Extensions and Updates, select Online and search for me, James Hall.  My extensions are the top two in the list.

In theory, if you install them this way, you should get notified of when I update them.

CRM Utilities for Visual Studio – Update to menus, and class generation options

Today I have released an update to the CRM Utilities for Visual Studio 2017 extension.

New features:

Reorganised the menu structure so that the Generate Class options are now grouped together.

Generate Class options menu to allow a custom namespace and class name to be used when generating the class files to represent the Dynamics Entities.

Redesigned the Connection dialog to make it look better, and to include a hyperlink to the instruction pages on this blog.


Please note this feature is only available in the Visual Studio 2017 version. This version may still install on VS2015, although I have not personally tested it.

CRM Utilities for Visual Studio – Publish All option

A recent request for a new feature has resulted in a quick update to my CRM Utilities for Visual Studio.

There is now a Publish All Web Resources feature which will publish all files that have already been linked within a Project.

Hopefully this will be very useful for making sure all the Web Resources part of a solution are up to date in CRM before doing a Solution release.

Get it from here

CRM Utilities for Visual Studio – Generating Entity Classes

Most CRM Developers either use, or have at least heard of CrmSvcUtil for generating early bound classes for developing code and using the resulting classes to manipulate CRM data.  I personally do not like working with early bound entities as the resulting class files are huge, and I personally prefer working with the standard Entity Framework for creating and updating entities, and for Linq queries.

Often, I use some helper class libraries that I can use to represent the custom entity names and attributes, so that they can be referenced in code and provide a degree of separation from the actual Schema names and to make code easier to write, and support Intelli-sense.

Something like the code sample below:

public static class Contact
    public static const string EntityName = "contact";
    public static const string Name = "fullname";

This would then allow you to do the following:

public void createContact()
    Entity contact = new Entity(Contact.EntityName);
    contact[Contact.Name] = "Joe Blogs";

I was offered a suggestion by a fellow developer that wouldn’t it be good if my CRM Utilities for Visual Studio allowed you to generate this kind of Class file automatically.  Well, I thought it was a brilliant idea, and so thanks to the wonderful gentleman  of XRTSoft, here it is.

Its split into two options, one to generate classes for your Custom Entities, and one to do the Standard CRM entities.

The resulting file will look something like this:

Notice that for each Entity, it will add the Logical Name, Primary ID Attribute, and the Primary Name Attribute as standard, and then all of the attributes as well.  It will also add sub classes for any Option Sets to allow you to reference specific Option Set Values without having to look them up in CRM.


Please note this feature is only available in the Visual Studio 2017 version. This version may still install on VS2015, although I have not personally tested it.