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.

Multiple connection support added to CRM Utilities

In a new update, the CRM Utilities for Visual Studio now supports multiple connections per project.  This is useful when you have multiple folders within each Visual Studio project, all linking to different Dynamics 365 Organisations.

Within the Web Resource linker window, you can now swap between connections and link a local solution file with a web resource from different organisations.

You can only link a file to a single organisation.

Also, in the options screen for the Class Generation tool, you can also specify which connection to connect to when generating classes.

You can download the new version below :

CRM Utilities for Visual Studio

Dynamics Documentation PowerShell Downloader

A common issue I am always faced with these days is the ability to have some Dynamics CRM / D365 Documentation, offline.  I am always a fan of PDF documentation that I can carry with me on my iPad, and since Microsoft stopped providing the usual CHM files with the traditional SDK’s, I have been at a bit of a loss.

With the advent of the new Documentation site that Microsoft have moved everything to, they now provide you with a handy option to download chunks of the documentation in PDF format.  Brilliant.

However, I don’t want to have to go through all of the sections to manually download the documents, and of course, what if, and how often do you need to do this to keep your documentation up to date.

Well, stand by for the amazing Dynamics Documentation PowerShell Downloader.  It really is quite simple, and feel free to add as many other documents as you wish to the script.  You can of course also modify it to save it to a different folder by changing the folder at the top of the script.  This goes hand in hand with the Dev Tools downloader that I blogged about previously.  Although the previous Script was provided by Microsoft, this one is all me 🙂


# Change the variable folder to the location you wish to save the Documentation to
$folder = "c:\DevTools\Documentation"

# Add the documents you wish to download below, in the format "filename" = "URL";
$documents = @{ "Customer Engagement Admin Guide.pdf" = "https://docs.microsoft.com/en-gb/dynamics365/customer-engagement/opbuildpdf/admin/TOC.pdf?branch=live";
                "Customer Engagement Customisation Guide.pdf" = "https://docs.microsoft.com/en-gb/dynamics365/customer-engagement/opbuildpdf/customize/TOC.pdf?branch=live";
                "Customer Engagement Developer Guide.pdf" = "https://docs.microsoft.com/en-gb/dynamics365/customer-engagement/opbuildpdf/developer/TOC.pdf?branch=live";
                "Customer Service User Guide.pdf" = "https://docs.microsoft.com/en-gb/dynamics365/customer-engagement/opbuildpdf/customer-service/TOC.pdf?branch=live";
                "Unified Service Desk.pdf" = "https://docs.microsoft.com/en-gb/dynamics365/customer-engagement/opbuildpdf/unified-service-desk/TOC.pdf?branch=live";
                "Customer Engagement Portals Guide.pdf" = "https://docs.microsoft.com/en-gb/dynamics365/customer-engagement/opbuildpdf/portals/TOC.pdf?branch=live";
                "Customer Engagement Field Service Guide.pdf" = "https://docs.microsoft.com/en-gb/dynamics365/customer-engagement/opbuildpdf/field-service/TOC.pdf?branch=live";
                }


md $folder -ErrorAction Ignore
cd $folder

foreach ($h in $documents.Keys) {
    Write-Host "Downloading ${h}"
    Invoke-WebRequest $documents.Item($h) -OutFile $h
}

 

Diagnostics and Information page, a reminder

As I keep forgetting that these pages exist, I am re-blogging the following information as its very useful :), and maybe I will eventually remember these URL’s.

Diagnostics
 

 
Debug Information (on premise only)
 

Here are some bookmarklets that you can drag to your bookmarks bar which should allow you to just click on them while on a CRM instance, and the appropriate pages should pop up.

Dynamics 365 service status tip

A nice little tip to get updated on Dynamics or Office 365 service status.

Virtual Entities for pulling in CRM data from other instances

A new feature in Dynamics is the concept of Virtual Entities.  This allows an entity to be created in Dynamics  where its data is not actually stored in Dynamics.  Its read only at the moment, but it allows you to pull in data from any ODATA data source, and display it in Dynamics as if it were part of the system, and that includes displaying data in quick view forms, grids, advanced find etc.

Now, one of the issues I have come across within my CRM experience is a requirement to pull in data from one CRM environment, into another.  This has generally involved data migration, or some sort of costly integrations.  So, with this new feature, I wondered if it would help solve this issue.

Well, it does and it doesn’t.  When trying to use Virtual Entities to pull in data from one CRM environment to another, I discovered a pretty big flaw, and that is authentication.  From one CRM environment, trying to get it to authenticate with another environment while querying the ODATA endpoint is tricky, or even impossible.  I didn’t spend too much time on trying to solve this, I just assumed it was a no go, so to be able to test Virtual Entities, I decided to throw all security concerns out the window, and come up with a simple test solution.

So, my plan was this :

  • Create my own ODATA web service
  • Connect to a CRM instance that contains the data using a specific user account
  • Pull out the CRM data, and present it in an unauthenticated ODATA endpoint.

Yes, yes, I realize that’s a bit scary (exposing CRM data without any kind of authentication), but this was just a test.  So, I now have an endpoint that proxies queries against the Contact entity.  So, the following URLS should return data from my CRM test environment, without requiring any username.

http://crmproxydata.azurewebsites.net/Contacts

http://crmproxydata.azurewebsites.net/Contacts?$filter=contains(Name,’Spencer’)

So, now that I have that very basic web service, I can now configure my new Dynamics 365 version 9.0 environment with an ODATA data source.

So, from the Settings, administration page, I can do the following :

And configure it like so:

And in my test solution, I create a new Entity and mark it as a Virtual Entity.

And configure the appropriate fields to match the information my web service is returning:

Now, if I do an Advanced Find in the CRM that does not contain any Contacts, but instead choose my new External Contacts, it shows the information from a completely different CRM environment.

And clicking on one of the records shows it in a normal “Read Only” form.

Bear in mind that it also supports all of the standard filtering criteria as well so you can filter the views, choose columns etc.

Now how great is that.  I think these Virtual Entities could be one of the best new features for Integrations I have seen in quite a while.  No more having to mess with Web Resources pulling in information from other systems.  No, instead, just treat the data in other systems as part of your main database, read only of course.

Dynamics 365 SDK tools – Powershell Downloader from Microsoft.

Since Microsoft have now removed the standalone SDK download, instead offering it via NuGet packages, they have also released a handy PowerShell script that allows you to keep them updated on your machine. Very useful.

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.

 

Download
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.

DevOps for Dynamics 365

DevOps (a clipped compound of “development” and “operations”) is a software development and delivery process that emphasizes communication and collaboration between product management, software development, and operations professionals.

DevOps – The new buzzword.

Although I have never actually tried any of the following (but it is on my list of things to do), here are a collection of resources for applying the concept of Continuous Integration and Delivery for Microsoft Dynamics 365.

Continue reading “DevOps for Dynamics 365”