Perhaps one of the best pieces of news arising from the detail behind the Dynamics 365 for Enterprise (D365E) announcement was the introduction of a number of freebies that are included as part of any subscription. Previously, under CRM Online licensing, you would have to purchase a number of Professional licenses before getting any free items. Now, regardless of the number of user licenses in your subscription, new and existing customers get all of the following at no additional charge:

  • 10GB of total database storage across all of your instances (Production/Sandbox)
  • Free Sandbox instance
  • Free Portal
  • Add-on services, such as Microsoft Flow and Project Online.

Given that the monthly cost for most of the above previously amounted to a significant figure in the hundreds of £’s, it is good to now see that arguably essential subscription elements (for example, Sandbox instances, to ensure a separate development/testing environment for customisations) are included at no additional charge. The question of whether or not this is value for money, however, is something that will likely depend on the size of your D365E deployment and the number/type of user licenses involved.

With this in mind, there is doubtless a high amount of impetus to encourage organisations who are currently on Dynamics CRM 2016 Update 1 or earlier and/or are still on the “old” Office 365 SKUs for CRM Online to start migrating across to one of the new plans – either Enterprise Plan 1, Dynamics 365 for Sales/Field Service etc. or Team Members. Organisations who are still on CRM Online plans can choose to either upgrade now or when their plan retires, in addition being able to take advantage of transition upgrade pricing. In some cases, this can amount to an average reduction in monthly prices of up to 20%. Therefore, if you are currently paying for excess storage at £7.50 per GB per month, additional sandbox instances at £113.10 per month and a Portal instance at a whopping £377 per month, then there may be a good business case for not waiting until renewal and to upgrade straight away to the new D365E SKU’s.

This was certainly the case with an organisation I was working with previously. The deployment was rather small in nature, approximately 60-70 users in total. The majority of licenses were allocated towards Basic and Essential license types. As such, the organisation was unable to benefit from the previous offer of a free sandbox instance with 25 CRM Professional licenses and additional, free database storage with more Professional users; meaning that they had to buy 2 additional sandbox instances and a large amount of additional storage to cover their requirements as part of the solution. The organisation was, therefore, an excellent candidate to transition across their CRM Online Professional to Plan 1 Enterprise license types.

With the above TechnNet article open and during an appropriate out of hours timeslot, I was then tasked with carrying out the license migration. I was relieved that the process went largely to plan, with no major hiccups. I was able to confirm successfully that the free sandbox instance appeared within the Dynamics 365 Administration centre after purchasing the new plans and did not vanish when cancelling the CRM Online Professional subscription. However, the same could not be said for the free storage. In the past, myself and colleagues have observed that purchasing additional storage can take some time to appear on the Dynamics 365 Administration Centre – sometimes up to an hour or more. After noting no change in the storage count after waiting this long, it definitely looked as if something had gone wrong as part of the upgrade. : /

After temporarily adding on some additional storage to cover the amount that we expected to gain as part of the transition and waiting until the next weekday, I opened a support ticket with Microsoft to clarify the situation regarding the additional 5GB of free storage we were expecting to receive and to determine whether something had in fact gone wrong. In good time, I was duly informed the following by a Microsoft support representative:

We informed you that “to get 5gb free storage for their organisation, update of CRM organisation to 8.2 is recommended and you will receive this free storage whenever your organization will be updated”.

At this juncture, it should be noted that one crucial piece of information has been left out as part of the above 🙂 All of the organisations CRM instances were at version 8.1. According to the above then, one (or all) of the organisations Dynamics CRM 2016 Update 1 instances need to be upgraded to D365E to take advantage of the free storage offer.

Since the above incident, we have scheduled in all of the organisations instances to be upgraded to 8.2 i.e. to D365E. I will report back after this upgrade has been completed to confirm the presence (or lack thereof) of the additional 5GB storage. Why the scepticism? I find it rather strange that you have to upgrade all of your instances to the latest version to take advantage of the new storage offer. I was always under the impression that the storage “layer” of your CRM/D365E instances are separate from the instances themselves. This being the case, I had therefore assumed that the SKU change would have been the flag to tell Administration Centre to add on an additional 5GB storage. This would appear to be how the additional Sandbox instance worked because, as demonstrated above, the free instance updated into Administration Centre without issue. The world of CRM/D365E can always throw up interesting and bizarre behaviours, so I won’t rule anything out at this stage. Stay tuned…

UPDATE (28/03/2017): Well, I can confirm that the support engineer is correct and at least one of your instances as part of your subscription needs to be running 8.2 for the free additional storage to appear on the portal. So if you have a spare instance and are itching to get your hands on additional database space, then I would recommend that you reset one of your spare sandbox instances to the latest version via the Administration Centre.

An oft-requested requirement as part of any Dynamics CRM/Dynamics 365 for Enterprise (D365E) deployment is a level of integration with another application system. In some of these cases, this will involve pulling through external web pages and passing them form-level attribute values, to load an external systems report, record page etc. From a CRM/D365E point of view, this can be very straightforwardly achieved thanks to some of the functionality provided as part of the Xrm.Page object model. For example. let’s assume that you have an IFrame control on your form and you wanted to load an ASP.NET web page, passing the ID of the record as a query parameter in the URL. Setup your IFrame on your form, with a random URL and set to hidden. Then, a JScript function like this on the OnLoad event would get the job done for you:

function loadIFrame() {

    //Get the current record ID

    var entityID = Xrm.Page.data.entity.getId();

    //Replace { & } with their appropriate URL counterparts in entityID

    entityID = entityID.replace("{", "%7b");
    entityID = entityID.replace("}", "%7d");

    //Create the URL

    var url = "http://myexternalwebpage.com/MyAspPage.aspx?id=" + entityID;

    //Then, update the IFrame with the new URL and make it visible on the form

    Xrm.Page.getControl("IFRAME_myiframe").setSrc(url);
    Xrm.Page.getControl("IFRAME_myiframe").setVisible(true);
}

What helps with the above is that there are well-documented code samples that assists when putting together this example, so you can be confident that the solution will work and is fully supported.

Things get a little more complicated once we are operating outside the standard CRM/D365E environment. Assume that instead of displaying this IFrame control on a form, it needs to be displayed as part of an Entity Form in Adxstudio/CRM Portals. Here is where the head scratching can commence in earnest, and you need to look at getting your hand’s dirty writing custom code to achieve your requirements. There a few hurdles to overcome in the first instance:

  • How do you access attribute values from an Entity Form, such as a record ID?
  • Once you are able to access the attribute value, how to you set this up on your Entity Form?
  • How do you embed an IFrame within an Entity Form?

Let’s take a look at one approach to the above, working on the same basis as above – an external URL that we pass the record ID to, from within an Entity Form Web Page. Things may get a bit more difficult if you need to access other entity attribute values, which may require some kind of trickery with Liquid Templates to achieve successfully.

Accessing Entity Form Record ID

When your Entity Form page is loaded on your Portal, there are a number of properties regarding the record that are exposed on the underlying web page – the name of the entity, the record ID, Status and Status Reason values. These can be accessed via a div element on the page, which can be viewed within the DOM Explorer as part of a Web Browsers developer tools (in the below example, Internet Explorer is used):

1

The id of the div class will always be the same, except for the value in the middle, which is the GUID for the Entity Form record within CRM/D365E, but without the dashes. So you don’t need to necessarily go into the DOM to get this value; as a time-saving mechanism, simply export your Entity Form record into Excel and view the first hidden column to obtain this value.

Suffice to say, because we know that this value is accessible when our Portal page loads, we can look at programmatically accessing this via a JScript function. The following snippet will do the trick:

var recordID = document.getElementById('EntityFormControl_31c41a020771e61180e83863bb350f28_EntityFormView_EntityID').value;

Now that we have a means of accessing the attribute value, our options in terms of what we can do with it greatly increase 🙂

Executing Entity Form Custom JScript Functions

There are two ways you can place custom JScript on your portal page – you can either place your functions within the Custom JavaScript field, located on the Entity Form form within CRM:

2

Functions will be added to the bottom of your Web Page when loaded, meaning they can be freely accessed after the page has loaded. The second way, which leads us nicely onto the next section, is to wrap your JScript function as a custom HTML snippet on the Web Pages Copy (HTML) field.

Embedding an IFrame on your Web Page

All Web Pages in Adxstudio/Portals – irrespective of what other content the page is loading – contain a Copy (HTML) field. This enables you to write your own bespoke text or other HTML content that is displayed on the Web Page. In the case of an Entity Form Web Page, then the content will be displayed just below the Entity Form. Thanks to the ability to access and write our own custom HTML code for this, options for bespoke development are greatly increased – simply click the Source button to switch to the underlying HTML editor:

3

Then, using a combination of the snippet we used earlier and utilising the <iframe> HTML tag, we can place the following in our Copy (HTML) to do the lot for us – get our record ID, pass it to an external web page and then load this within an IFrame:

<p>
    <script>
        function getEntityID() {
            var url = "http://myexternalwebpage.com/MyAspPage.aspx?id=";
            var entityID = document.getElementById('EntityFormControl_31c41a020771e61180e83863bb350f28_EntityFormView_EntityID').value;
            var iframeSrc = document.getElementById('myiframe').src;

            if (iframeSrc != url + "%7b" + entityID + "%7d") {

                setTimeout(function () {
                    document.getElementById('myiframe').src = url + "%7b" + entityID + "%7d";
                }, 2000);
            }
        }
    </script>
</p>
<h1>My IFrame</h1>
<p>
    <iframe width="725" height="250" id="myiframe" src="" onload="getEntityID();"></iframe>
</p>

The reason why setTimeout is used is to ensure that the entity form <div> class loads correctly, as this is one of the last things that Adxstudio/Portals loads last on the page. For obvious reasons, if this hasn’t loaded, then our JScript function will error. Putting this aside, however, the above solution gets us to where we want to be and means that we can achieve the same outcome as the CRM/D365E example demonstrated at the start of this post 🙂

Conclusions or Wot I Think

Adxstudio/Portals presents some interesting and different learning opportunities, both given its genesis as a separate product to its gradual integration as part of the CRM/D365E family. This can often mean that you have to abandon your base assumptions and ways of thinking when it comes to CRM/D365E development, and instead look at things from a more general approach. I would hope that, in time, we will begin to see the gradual introduction of common XRM object models within CRM Portals, as it is crucially important that there is a unified approach when developing Portal extensions in the future and that we are not in the situation where unsupported code becomes rampant across different Portal deployments. This latter concern would be my chief worry with the examples provided in this post, as there is currently no clear way of determining whether the approach taken is supported or considered “best practice” from an Adxstudio/Portal perspective. I would be interested in hearing from anyone in the comments below if they have any thoughts or alternative approaches that they would recommend to achieve the above requirement.

November 1st, 2016 is looming closer and closer, and anyone who is working with Dynamics CRM should be aware of the importance of this date. Dynamics 365 Enterprise will be officially released on this day, replacing all existing Dynamics CRM Online pricing/licensing offers for new customers. Existing Dynamics CRM customers & partners are starting to get a clear vision of what the product offering looks like, from a licensing and pricing structure. I am eagerly looking forward to getting my hands of a trial instance of Dynamics 365 so that I can take it for a whirl. But for now, I wanted to publish a post that takes a look at the most interesting aspects of Dynamics 365 Enterprise, its release and my general thoughts on what we can hope to expect in the months ahead:

Tiered Pricing

The new tiered pricing structure of Dynamics 365 presents one of the major areas where Microsoft can challenge their competitors in the marketplace, as well as driving high volume license sales for their Dynamics 365 Enterprise plans. How it basically works is that the more licenses you consume for a particular plan, the cheaper each license in that plan will become. The following image from this really interesting article from ZDNet provides an excellent summary of how this will work:


Those who currently subscribe to a high number of Basic, Essential & Professional licenses for CRM Online will, therefore, benefit greatly from moving across to Dynamics 365 as soon as possible, in order to take advantage of the very high levels of price reduction – in particular, for Team Member and Enterprise Plan 1 licenses.

Team Members

Under Dynamics 365, the previous “light-use” Essential & Basic licenses have been replaced with the new Team Members license, that provides a standard set of user rights across the entire range of Dynamics 365 apps. They come in at about £10 less per month compared to the current £18.70 for Basic Licenses, potentially going down as low as approx. £3, thanks to tiered pricing. In terms of what they provide from a user access point of view, functionality appears to sum up as Essential + Basic = Team Members, covering typical record access requirements for most users in an organisation.

Free Portal and Non-Production instances!

Previously, you would have to purchase at least 25 Professional CRM licenses to get a Sandbox (i.e. Non-Production) instance of CRM for free, or alternatively, cough up £93.50 per month for a Sandbox. Portals, introduced earlier this year, have also been a paid add-on until now, for a significantly higher price of £311.60 per month!! With Dynamics 365 Plan 1 subscriptions and higher, your subscription will automatically include the following alongside your Production instance:

  • 1 Sandbox Instance
  • 1 Portal Instance

Given that there is no minimum seat requirement for Enterprise 1 plans, the above could represent a significant saving on average, particularly when you take into account tiered pricing. It also presents a major opportunity to drive increased adoption towards CRM Portals in the months and years ahead.

More database storage

It is pleasing to see the minimum database storage rise to 10GB as opposed to 5GB. One of the (potentially) hidden problems over time as part of any CRM deployment is storage being slowly eaten away by entity record types. I have blogged previously about one of these entities in question, and it is something that customisers and administrators need to be acutely aware of when designing and planning the system. The increase in storage goes some way towards mitigating this, but I would question whether a further increase could be warranted; particularly given the cost of storage on Azure for SQL databases being so much cheaper in comparison.

And it’s goodnight from MDM…and Parature

Perhaps the most significant announcement as part of the above is that Microsoft Dynamics Marketing (MDM) and Parature will no longer be sold to new customers from November 1st, 2016 onwards. Microsoft has already announced that Adobe Marketing Cloud will become Dynamics 365 for Enterprise’s preferred marketing solution, but this has been confused further by an additional follow-up announcement regarding the Dynamics 365 Marketing App for Business, coming up Spring 2017. For Parature, no successor product to has been announced, indicating that existing Parature users will eventually need to migrate across to some of the recently acquired service-focused modules within Dynamics 365, such as Customer Service, Field Service and Project Service Automation. I am unsure of the exact, specific numbers when it comes to Parature and MDM sales, but the above demonstrates clearly that not all Microsoft acquisitions are destined for success and products that are perceived to be “too different” from the core CRM/Dynamics 365 experience can and will be dropped. I cannot speak for Parature, but I have had some experience with MDM in the past and, although it does provide some useful and effective campaign automation tools, seems to be too bloated as a product, desperately trying to do everything but not in a particularly effective way. Microsoft’s mixed messaging in regards to what can be considered MDM’s true successor product means that it is prudent to perhaps wait before upgrading or moving away from MDM immediately. Hopefully, by Spring 2017, we will be able to see how both offers compare from an integration point of view with Dynamics 365 Enterprise.

Generous upgrade pathways for existing CRM customers

Up to 47% discounts when upgrading to Dynamics 365 from Dynamics CRM Online. Microsoft has already published a list of promo codes that can be used for early adopters, so if you are itching to move across to Dynamics 365 next week, you can very quickly get upgraded.

Is Dynamics 365 Enterprise actually a “major” release?

Looking carefully through the following TechnNet article on how to access the new Dynamics 365 apps, and I noticed the following tidbit:

What is “Dynamics 365 – custom”?

“Dynamics 365 – custom” is the app name for all online organizations with a version 8.1 and lower as well as the default app on 8.2. The name for the 8.2 default app can be changed by the administrator.

My reading of this is that the version number of Dynamics 365 Enterprise is 8.2, as opposed to 9.0. This is a minor thing, but interesting that Microsoft does not consider the Dynamics 365 Enterprise release to be a “major” one. This potentially raises the prospect for a further release in 2017 that adds in a plethora of new features – something that ties in well with the expected release of the Dynamics 365 for Business in Spring 2017.

Conclusions or Wot I Think

The Dynamics 365 release looks to be a major reset of a number of base assumptions surrounding Dynamics CRM – including, most crucially, the price. Some of the very early scenarios I have seen from a migration point of view look to point to a very definite price rise for those moving across to Dynamics 365 (assuming you follow Microsoft’s recommended migration pathway). This is mitigated somewhat if you have a high number of licenses, thanks to tiered pricing, but I am troubled about where this leaves small to medium size businesses who currently use CRM Online. I have highlighted previously my worries and concerns that Dynamics 365 for Enterprise could be seen as an adoption barrier for these type of businesses, so the reaction to these businesses to the new pricing will be an important bellwether for Dynamics 365 Enterprise – and whether businesses decide to just ditch it altogether when it comes to the eventual, forcible upgrade to the new plans; or look at moving across to Dynamics 365 for Business instead. The sooner we get some clarity on what this offering looks like, the better.

Something else to add into the mix, solely for UK-based customers, is the announcement that Microsoft’s cloud services prices will rise significantly in the new year, in a move that has been linked to the current state of Pound Sterling following the Brexit vote. To my knowledge, exact pricing for UK customers of the new Dynamics 365 plans have not been released (although we can do a rough currency conversion from US Dollars), so we are unable to exactly determine at this stage what the prices will look like at launch and whether they take into account the above price rises. If not, then it would add a degree of urgency towards migrating across to Dynamics 365 sooner rather than later, in order to lock in your prices for another 12 months.

All said and done, Dynamics 365 presents some interesting opportunities and challenges for organisations who work with the product – lets hope that it’s weighed more towards the latter in the months ahead 🙂

Did you know that the CRM SDK contains a WebsiteCopy tool, that can be used to backup/migrate your CRM portal website? I was surprised actually, as there is no page on the CRM Setup & Administration website that refers to it. When I initially started looking more closely at the CRM portals release as part of the Spring Wave update, one of my first questions was “OK, portals are great! But how can I deploy my development portal site out to a production system when it’s ready?”. As a best practice approach, you will always want to ensure that you have distinctly separate development and production environments for any system that your business is using, and portals are no different in this regard. At first, I was concerned that there did not appear to be any “supported” mechanism for migrating development portal content into production environments; utilising the WebsiteCopy tool helps to overcome this issue and saves you from having to manually re-create records within your production CRM environment. Let’s take a closer look at how to get the tool, use it in practice and also review some of the supported scenarios that it can potentially assist with.

How to obtain the WebsiteCopy tool

In a rather counter-intuitive step, you will need to download the Dynamics CRM 2015 SDK. This is because the tool is not available whatsoever within the 2016 SDK. This seems like a rather strange oversight, so I would expect this to eventually be addressed as part of a future SDK release. Indeed, even the official MSDN page for this tool is listed as being only applicable to CRM 2011, 2013 & 2015. The 2015 SDK can be downloaded from here. Once you’ve got it and extracted it successfully, the tool can be found in the Bin folder in the root directory:

1

It is also worth pointing out that this tool is an exact copy of the Website Copy Tool provided by Adxstudio, which is obtainable via an installation of Adxstudio portals. Users of this tool should, therefore, face no challenge using the SDK version of the tool.

Using the tool

Due to simplistic nature of the wizard tool (and the fact that there are already well-documented walkthroughs available for both import and export scenarios), I will not go into detail documenting the entire process from start to finish. However, it is worthwhile pointing out the following:

  • There appears to be a bug on the Connect to Server screen where, after specifying your credentials and hitting Enter on your keyboard, the application thinks that you are pressing the ‘Go‘ button as opposed to ‘Next‘; clearing the credentials you have entered in the process and essentially going back a step: 5 6 7It took me a good half an hour or so before I figured this out, so make sure you hit the correct button!
  • When prompted to provide a Name value when importing your portal, the value can be anything you want it to be – the Website record’s Name field will be populated with this value in CRM on import.
  • I would generally recommend exporting to XML first, and then running the wizard again to import your newly created XML That way, you can double-check to ensure that you have run the initial export correctly and obtain a backup of your entire website in the process.
  • Exporting the cmd script at the end of the wizard is recommended if you intend to run the same export/import process frequently. For example, if you are running daily backups of your in-development website, then running the script instead of the wizard each day can save you some time.
  • Be prepared to put the kettle on as the import/export process can take some time.

Now that the website and all associated records are in CRM, how do you set this as your live website?

You will need to go to the configuration page for your CRM portal, and change your website record to point to your newly imported website. This is the same page you see when you first setup your portal, and can be accessed from the CRM Online Administration Center -> Applications and then Manage from your Portal Add-On subscription:

2

 

Then select your newly imported website from the Update Portal Binding drop-down:

8

Note that your changes may not take effect immediately after saving and that you will likely need to attempt the old “turning it off and back on again” trick using the Change Portal State dropdown:

3

As an additional bonus, the tool can also be used in the following scenarios:

  • Backup an Adxstudio website to a CRM Online portal deployment
  • Backup a CRM Online portal to an Adxstudio website (On-Premise/Online CRM)

To prove this, I did a test importing the ghastly looking portal, previously created as part of a previous post on Bootstrap templates. This was originally created using Adxstudio and I was able to successfully import this into CRM portals, in all its horrid glory 🙂

4

By covering both of the above scenarios, the tool instantly becomes a lot more powerful and versatile – enabling you to very quickly get your existing Adxstudio website setup as a CRM portal site. It also gives portal developers the flexibility to setup their own development Adxstudio environment, safe in the knowledge that they can straightforwardly migrate these across to CRM portals when they are production ready. Note that the above test does not confirm whether or not bespoke Adxstudio customisations via custom generated ASP.NET pages etc. will definitely migrate across 100% to CRM portals and that the steps involved in changing/modifying the bindings for Adxstudio differ significantly from CRM portals.

Conclusions or Wot I Think

CRM portals, as a product offering, is still in its early life cycle stages. As such, it is reasonable to expect that clear and broad documentation that covers the types of scenarios discussed in this blog post (e.g. managing CRM portal development environments) is not yet forthcoming and that some trial and error may be involved in figuring what to do (it wouldn’t be fun otherwise 🙂 ). What is good to know is that Microsoft has not made a conscious decision to restrict or remove some of the existing tools available for Adxstudio and that they “just work” with CRM portals. This is perhaps a rather obvious assumption, given that both products are technically identical. Nevertheless, it is good to know that those who are venturing into CRM portals for the first time can very easily get running with tools, like the WebsiteCopy Tool, when planning, developing and rolling out solutions for businesses who have taken the plunge early on with CRM portals.