The April Dynamics 365 release is coming! Make sure you are prepared

The world hates change, yet it is the only thing that has brought progress. -Charles Kettering

Microsoft Dynamics 365 and the Power Platform h ave two major releases a year in April and October and it’s your responsibility to be ready and to make sure your solutions are compatible.

Why should I care?

Since Microsoft moved the one version, Microsoft updates your production instance in April and you cannot stop it. You need to make sure your solutions works with the new version of Dynamics 365.

The responsibility for testing the new release doesn’t break your solutions is the owner of the instance/Dynamics 365 environment. If in April your production instance is upgraded and it breaks your solution, the blame is all yours.

I wrote about the new release schedule — The new Microsoft Dynamics 365 release schedule is coming.

It’s easy to forget about the release and don’t test it or leave it too late to test. Discuss with your team and the client that a new release is coming and decide the level of acceptable tests.

A key concept to understand is this is a release wave and not just a new version of Dynamics 365. It’s a wave because multiple services are being updated.

  • Dynamics 365
  • Dynamics 365 Sales
  • Dynamics 365 Customer Service
  • Dynamics 365 Field Service
  • Dynamics 365 Marketing
  • Dynamics 365 Operations, Finance, Commerce, and HR applications
  • Power Platform
  • Power Automate
  • Power Apps
  • Power BI

The updates will come in April, but then further releases will happen between April and September.

What’s happening when?

It’s already happening, so catch up. First check the Dynamics 365 release schedule and early access

This shows the key dates

Jan 27, 2020 — Release plans available

Feb 3, 2020 — Early access available

April 1, 2020 — Production deployment for the 2020 release wave 1 begins

Monday 27th, Microsoft released plans on what new functionality will be available in the new wave of releases.

You can read the highlights of the new features coming

Dynamics 365: 2020 release wave 1 plan

Power Platform: 2020 release wave 1 plan

These post has mention a few interesting new features

Top ten features by Joe Gill

2020 Release Wave 1 — random picks

The two features which looked interesting is Power App Portals can call the CDS Web API directly. This will enable Power App Portals to be more powerful and overcomes one of the major frustrations.

Canvas App can create a PDF from the UI, a useful way of a quick report of the form.

On Monday the 3rd February you can enable the new release on a sandbox instance and start playing with the new features and testing your solution.

If you have questions about the new release, read the FAQ section

Enable the new features in a sandbox instance and test your solutions. You will need to do this for both release waves each year (April and October) so invest in some automated tests to speed up the process of testing your solution.

You can enable the new release in your development and test environments and test by using them. You cannot avoid the update so the sooner you get used to it and sooner you find problems, the sooner you can fix them.

Anything else I should know?

Jukkan Niiranen discusses how Microsoft will enforce licensing, he noticed a new solution called Licence Enforcement has appeared. One of the key drivers for this will be the enforcement of team licences, which Microsoft realised could be used by many users and would cost them money.

A change in pricing is coming to the Power App Portals (which was Dynamic Portals) Understanding Power Apps Portals pricing and how it differs from Dynamics Portals

Know what is being depreciated because when the new release is installed some old functionality might stop working. It’s important you stop using depreciated functionality and get into good habits now.

Important changes (deprecations) coming in Power Apps, Power Automate, and model-driven apps in Dynamics 365

When using the solution checker I found XRM.page code in our solution which we had to replace. Get in good habits now and stop using functionality which will be depreciated.

Learn more about solution checker with this article — What the solution checker does and why you should use it

Do I really need to test my solutions?

Do you need to test the new release wave, if it’s focused on new features and you don’t plan to enable those new features.

When code/customisations change, they can break functionality, e.g. you create a bug by fixing a bug (or adding new functionality in this case). When ever code is changed, things can break.

Microsoft might change the way functionality works, change the way it works and these could affect your solution. I have experienced bugs with the minor patches, so things could break with a major release.

It’s better to test and find problems in a sandbox environment than finding problems in production. Production problems send people into a panic and need to be fixed quickly.

Save yourself the stress of a production problem and check the new release wave in a sandbox before April.

Understanding Power Apps Portals pricing and how it differs from Dynamics Portals

“You know you’re priced right when your customers complain—but buy anyway.”

John Harrison

Dynamics portals are changing name to Power Apps portals and the pricing is changing which could cause a significant rise for some portal users.  This Dynamics portals are changed their name to Power Apps Portals, and the pricing is changing, which could cause a significant rise for some portal users. This post helps readers understand the price changes. It’s important to discuss with current customers the coming increase in costs so they have time to act before it’s implement. The new pricing comes into effect on the 1st October 2020 for existing Portal customers.

The Power App Portal price increase was announced in Inspire 2019 and active for new portals from October 2019, read Microsoft Pricing FAQ portal section for more details from Microsoft

The Power Apps Portals pricing is used for new portal customers but for existing customers need to assess how the pricing change will affect their monthly costs.

The goal of this blog is to understand the new Portal pricing and how it will affect existing customers.

What are Dynamic Portals?


Power App Portals is the new name for Dynamics portal.  A portal is a way to extend your Dynamics environment or Power Platform environment with people outside your organisation (e.g. not Dynamics or Power Apps users).  The portal functionality is built on the old ADX studio portal functionality (brought by Microsoft and renamed Dynamics portals).  

Portals are hosted in a separate Web Server and linked to your Dynamics instance/Common Data service instance, the allows you to have a portal where your customers can raise cases which get added into Dynamics and then worked on but without your customers need full Dynamics licences.

Dynamics portals are a way to create a portal which integrates with Dynamics 365 with Dynamics developer’s only need to learn liquid templates (a mixture of Dynamics and HTML).  You need not worry about hosting the Web Server or capacity of the portal.
These posts describe Dynamics portals

This post describes the new Power App Portals

Power Portals is expanding beyond Dynamics 365 and enabling the Power Platform and the data source is Common Data Service (CDS).  The future is built around smaller solutions and based on data in CDS and the Power Portals is another step towards building an infrastructure to support this and move away from Dynamics based.

What is the current pricing

You used to get a portal with no additional cost when Dynamics 365 customers had 10 or more Enterprise licences

Additional Portals could be purchased at £377 per month.

New pricing

I say new pricing but it’s only new for existing customers
Microsoft is moving to Azure like consumption-based model and you no longer need to purchase a portal.  Like the change in not changing for instances and moving to data model. 

Portals don’t need you to purchase a portal, but they will charge you for number of logins and views.Here are the details of the new licencing from Power App licencing FAQ page

User typeModelSKU namesUnit capacityPrice/monthChannelComments
External user (authenticated)Per loginPower Apps portals login capacity add-on100 logins$200AllA login provides the authenticated user with access to a single portal for up to 24 hours
Power Apps portals login capacity add-on Tier 21000 logins$1000All
Power Apps portals login capacity add-on Tier 25000 logins$3500CSP only
External user (anonymous)Per page viewPower Apps portals page view capacity add-on100,000 page views$100All
Internal userVia licenseDynamics 365 (various)n/an/an/aCustom portal use rights are aligned with custom app use rights
Power Apps per app plan
Power Apps per user plan

Microsoft distinguishes between external user (authenticated) and External user (unauthenticated).  My understanding is customers who authenticate using a B2C AD authentication will login.

External users who don’t authenticate will view the page and the users who authenticate will be counted as a login.  

The difference here is if you have a FAQ or documentation on a portal for people to view are external unauthenticated.  Users who login and raise a case are authenticated.

Views are cheap $100 for 100000 views, whereas logins are more costly. 

A login is counted every 24 hours, so a user can login multiple times in 24 hours and it will count as one billable login, Microsoft cheerily says we should look at it as a day pass :-). 

A user can also access multiple portals for no extra cost if it links them to the same Dynamics or CDS instance.
Microsoft explains the differences on the licencing FAQ page Power App licencing FAQ page

What is the difference between Power Apps Portals and Dynamics 365 Portals in terms of licensing?**

ParameterDynamics 365 PortalsNew Power Apps Portals
Provisioning a portal environmentPurchase Dynamics 365 Additional Portal SKU at $500 per monthProvision a portal—no need to purchase portal addons to provision a portal
Qualifying base offersDynamics 365 licenses onlyCustomers can add on portal external login or page view capacity to Dynamics 365, Power Apps and Power Automate licenses
Internal use rightsDynamics 365 enterprise licenses, Dynamics 365 team member license.Internal users can now access portals with a Power Apps per-app/per-user license. For a Dynamics license it is same as custom Power Apps use rights.
MonetizationPer portal environment Per page viewPer log in Per page view
Entitlement for Dynamics 365 customers1 portal environment for the first 10 full Dynamics 365 USLsNot applicable―Power Apps Portals environments can be provisioned

Understanding costs

The good news is like Dynamics environments, we no longer pay for creating environments.  This makes it easier to deliver enterprise projects and create separate environments for dev, testing, QA, training, UAT, pre-production and production. 

Life Dynamics environments you aren’t charged for instances but charge for the data you use.  The benefit of this is it allow you to create other environments for development and testing, particularly useful with Microsoft have two major releases (April and October) which you must take.  This means you must test your customisations with the new release before your production instance is upgraded.

Portals no longer require you to purchase portal environments, but you will pay for logins and views.  This will make non-production environments cheaper because they will have low volume, it raises the question what happens when you want to load test a portal environment!


The portals look a good deal for low usage customers because the removal of a portal provision fee. The pricing that we know of at the moment is this

  • 100 logins at $200 = $2 per login
  • 1000 logins at $1000 = $1 per login
  • 5000 logins at $3500 = $0.70 per login

UK prices

  • 100 logins at £153 = £1.53 per login
  • 1000 logins at £765 = £0.75 per login
  • 5000 logins at £2677 = £0.53 per login

For over 5000 logins or more per month, speak to Microsoft because I think you would get some extra discount based on size.

You can see small users who get 200 logins per month will find it the same or cheaper but once you move above 300, then the new portal pricing will be more expensive (depending on how many portal environments you have)

if we use the 5000 logins to estimate the price of a heavier portal use we get

  • 10000 logins = £5354
  • 20000 logins = £10708

Customers with busy portals will face a bigger monthly, although I would suspect they could get a better deal by negotiating with Microsoft.

Why have Microsoft changed the pricing?

Since Microsoft moved Dynamics 365 to Azure they know the cost of supplying services and can price accordingly.  The previous model was great for customers who had high portals traffic because they paid a flat fee.

Portals is a powerful and popular functionality, with the previous low cost licencing it was attractive to most customers.  The competitive portal pricing would have helped Dynamics or the Power Platform win projects.
The popularity of portals has grown steadily, this article published on July 2019, it highlighted the growth in portals

  • 13,000 monthly active portals, up 33 percent in the last six months
  • 8.03 million monthly active users in the last month, up 180 percent in the last six months
  • 200 million page views per month – excluding bot traffic – which is 106 percent growth
  • 52 million monthly transactions, up 110 percent–this includes all CDS operations as well as log in and log out

I would expect these numbers to have continued to grow at the rate above.  Take into account increased portals would result from increased Dynamics 365 and Power Platform licencing.

The change to a consumption model is an increase in costs for heavy users, but you will only pay more if you have more portal users, so Microsoft will say it’s fair.

No one complains with Azure consumption based pricing because it’s a fair price, the portals pricing seems expensive compared to the previous price and this is the main complaint with the new pricing.

 Is the pricing fair?

Is this price increase fair?  If you have more portal users, you pay more and fewer portals uses will cost less. It’s cheaper than its competitors but it could be a significant increase for heavy users.  

Microsoft is in a difficult position, their initial portal pricing seems discounted to win users and now this big increase seems unfair, particularly to existing customers where their portal costs can jump significantly.  It would have been a smoother increase if Microsoft ramped their pricing increase over a 2 or 3 years.

To understand the pricing lets consider what you get for your money.
A portal framework to create a portal linked with Common Data Service or Microsoft Dynamics 365.   A portal service, with a hosted website where Microsoft deal with scaling, capacity, disaster recovery.

If you consider the cost to create and host your own website.  Additional development costs to integrate the website with Dynamics 365 or Power Platform, then the cost per login doesn’t seem overpriced.

Comparing the price of Salesforce portals, you can see (I think) they charge $2 per login and Microsoft are charging half that price.  I admit I know little about Salesforce portals and don’t know how the functionality compares, I just wanted to get a rough price.

Conclusions

Microsoft is moving to consumption based pricing.  Why this pricing increase has caused complaints is, it’s potentially an increase for existing portal users.  The goal of this post is to understand the pricing increase and encourage Dynamics professionals/partners to discuss the increase with their existing customers and help prepare and plan the increase.

The potential increase in portal pricing will anger customers who chose Dynamics 365 because of the cheap portal functionality.  Many businesses will have built a portal to be a key part of their business, the increase in portals might ruin their business model and these customers can feel aggrieved because they have invested a lot of money in Dynamics 365.

Looking at competitors prices or alternates to Power Portals then it feels Power Portals is still the best value for money.  There is the possibility that this could cause a better priced competitor to rise but I’m not sure they could do this and charge lower than Microsoft. 

There is a possibility people can take the portal source code.
A version Microsoft Dynamics 365 Portals Source Code Available for On-Premise Customers read this for more details.

you can download here

There is an open source portal project – xRM-Portals-Community-Edition

A good alternative would be an open source portal with similar functionality to Power Portals but this would need a community contribution.

The other painful part of the new portal pricing is the now customers have estimate and purchase the number of logins at the start of each month.  The logins do not roll over to the next month.  This will lead to customer buying more logins than they need and losing those extra logins.  It will involve wasted time estimating and purchasing views each month.  It’s extra hassle with no benefit.

What the solution checker does and why you should use it

lake and trees

Quality is never an accident. It is always the result of intelligent effort. John Ruskin

The solution checker is a free tool to help developers verify their code doesn’t contain many bad practices and code smells.  I recommend developers incorporate into your development life cycle to help you keep your code quality high.  This post will explain what is, why use it and some common errors.

How does the solution checker work?

You can find out what the solution checker is and instructions on how to run in the post Use solution checker to validate your model-driven apps in Power Apps
The solution checker runs static analysis on your
  • Plugins – C#
  • Custom Workflows – C#
  • Web resources – JavaScript and HTML

The static analysis will find common problems in your code and suggest you fix them.  This is like code analysers such as FX Cop, Resharper or Code analysis rule set reference.

I like static analysis because it was a code review on my code before I submitted it for a review.  You can set the rules to automatically run and it helps you create higher quality code.

The other benefit was it would highlight problems and suggest best practices that I hadn’t heard of, I would read up about the rule and suggestion to see if I wanted to use it.

You can run the solution checker on a solution and it will check all your code, identify issues and give documents on how to solve it.

How do you use it?

You need to enable the solution checker and then you can trigger it manually in the Power Apps maker portal.  Go to solutions, select the solution and then you can right click or click the run solution checker button on the top.

The solution checker could take a few minutes to run, depending on how big your solution is.

You kick off the solution checker and then it creates a report that you can either view online or download as an Excel file.

Go through the warnings and fix the problems.

There is a PowerShell module which would allow you to automatically run the solution checker in your DevOps build, this enables you to make sure your code is clean.  Read Get started using the Microsoft  Power App checker PowerShell

There is another way to use it my using the XRM Toolbox plugin by Jonas Rapp, you can find more information and full tutorial – Power Apps Checker for XrmToolBox. It has the bonus of applying different rule sets

Why would you use it?

You should have the mindset of all code and customisation don’t work until they are proven to work, until you have tested them.  Assume the quality of your code is low until you prove it to be high by testing it with static analysis and/or a code review.

The best moment to sovle a bug is when you are writing the code and testing it yourself.  At this moment you know the most about the solution and will be able to fix it quickly and make changes before other code is dependent on it.

When writing code it’s better to spend more time doing it right and less time fixing it later #HoskCodeWisdom

The initial goal of an IT project is to turn the requirements into customisations and a solution the business can use to do their job.  This is the short-term goal, the long-term goal is to create a solution easy to maintain and the most effective way to do that is to create high quality, well-structured customisations.

The creation of a customisation is a quick part, the maintenance and extension of a customisation last for years.  If you don’t create quality code, the customisations become complex and maintaining, extending and debugging will take longer.

The solution checker helps you find your bad code and suggest how to fix it.  A good tool to improve the quality of your coding and raise the standard of your code.

Microsoft offer free code reviews for projects which quality for Fast Track assistance (250 seat plus), it’s a good idea to run the solution checker to proactively fix the warning that would appear when Microsoft do a code review.

The solution checker doesn’t run the same rules as a Microsoft code review, but the solution checker is a minimum check and a subset.  More information about FastTrack for CE projects can be found – FastTrack customer success service and with big projects it will be there, so you should learn to align with it.

Some common warnings and explanations

The section below will cover some common warnings I have found with the solution checker.  I will explain what they mean and what you should do to fix those problems.  The solution checker gives some text and links but sometimes these are not obvious and take some interpretation.

Event registration not enabled

An event registration entry was detected on the form form name on the entity account for the event Form.onload that is disabled. Consider enabling or removing the function name

This error occurs because you have an event on OnLoad or OnSave that is disabled.  You should delete the event because it’s not running.  It’s bad practice to leave customisations disabled or inactive because they confuse people and can easily be enabled accidently or on purpose.  A disabled or deactivated customisation can be enabled and then you have a new bug which is very difficult to identify.

Use strict equality operators

For most comparisons the strict equality comparison algorithm is the right choice as it will return the expected results. The strict operators handle null and undefined values as expected.

This error means we should not use == but use the strict ===

The reason is JavaScript lets you compare different variable types but this can have unexpected results, so by using the strict ===  it compares the same type and won’t have unexpected results

this gets a warning

entity.field == “Line1”

this is good

entity.field === “Line1”

Learn more here

Use strict mode when possible

Strict mode is a way to introduce better error-checking into your code. Code should run in strict mode wherever possible. This is a JavaScript warning.

Add use strict to the JavaScript file, this link explains it more detail

According to this article it Strict mode helps :

  • It catches some common coding bloopers, throwing exceptions.
  • It prevents, or throws errors, when relatively “unsafe” actions are taken (such as gaining access to the global object).
  • It disables features that are confusing or poorly thought out.

Should you use single or double quotes e.g.

‘use strict’;

or

“use strict”;

In JavaScript, it doesn’t matter if you use single or double quotes, here for more details

To invoke use strict for the whole file, place it before any other JavaScript statements.  It’s possible to apply use strict for specific functions.

Read more – web-use-strict-mode

Do not ship debug helper code in production source

Remove debugger and console statements and it’s lazy and don’t do it, they are found in JavaScript files

Remove these

  • debugger
  • console.error(“Error: “ + message)
  • console.log(“field updated”)
Xrm.Page

‘Xrm.Page’ references or accesses a deprecated API in the client context object model. Replace this call with the following client context API: ‘ExecutionContext.getFormContext’

Xrm.Page is depreciated and will not work in October 2020 release, DO NOT WRITE THIS CODE, get into the habit now.  There is no excuse because it’s been well publicised and there are lots of examples of using the new syntax.

Xrm.Utility.alertDialog(this.statusText)

This highlights a depreciated Xrm call.  Xrm.Utility.alertDialog(this.statusText)’ uses a deprecated API in the client object model.  You should Replace this call with the following client object model API: ‘Xrm.Navigation.openAlertDialog’

Replace Xrm.Utility.alertDialog with Xrm.Navigation.openAlertDialog

il-specify-column

This warning will be thrown for Plug-in or workflow activites and its about selecting all columns not specifict columns

Avoid selecting all columns via Common Data Service query APIs.

example

new Microsoft.Xrm.Sdk.Query.ColumnSet(1)

Evaluate the use of AllColumns in ColumnSet constructor call with ‘true’ argument.

Don’t select all columns in your queries, select only the fields you need.  It will make your code faster and easier to understand.

Async JavaScript

var requestXhr = new XMLHttpRequest(); // Explicitly setting the async parameter to false or supplying a variable with a value of false will force this as a synchronous

call.requestXhr.open(‘GET’, ‘/test/test.txt’, false);req.open(“GET”, globalContext.getClientUrl() + “/api/data/v9.1/opportunities?$select=status&$filter=opportunityid eq” + “ “ + OpportunityID, false)

Read an explanation of this error Interact with HTTP and HTTPS resources asynchronously

You can have a query which does an OData query to retrieve data from another entity but best practice is to set this as Async, the warning comes when you this query is synchronous and slows the form load.

Create quality

The solution checker is minimum standards you should aim for, you should be aiming higher.  The bigger the project the more important it is to keep the quality high.  Enterprise projects create a lot of customisations and code, so you want to put in steps to ensure what is created is quality, otherwise you will have a huge mess on your hands quickly. There are lots of problems on an enterprise project and reducing your problems by having quality code will help you focus on them.

Other suggestions

Embrace DevOps and automate your builds and releases.  This speeds up the feedback loop, reduces manual mistakes and takes the boredom out of development.

Unit test your code will shorten the feedback loop, help the developers write better code and have reusable tests you can run to see has broken the build.  It helps find bugs now and when you change the code.

Create standards and best practices and make people stick to these.  The best way is to run static code analysers and have code reviews.  Code reviews are a great motivator for people to write higher quality code (because they know their code will be reviewed) and a good way to teach developers to write good code by having someone explain changes.

Use TypeScript instead of JavaScript.  I like TypeScript because it’s strongly typed and more like C# and this means you create better quality and more standard code.  JavaScript is a powerful scripting language but it makes it easy to write poor quality code which is hard to maintain.

Make quality and not speed your priority.  Taking shortcuts and doing things fast doesn’t save you time in the long term, all it does it kick the problems down the road and they hit you later when time is more limited and the long-term effects of poor code is to slow down the project and increase the difficulty of maintaining the code.  In the same way you don’t want a builder to take short cuts building your house, you don’t want developers to take shortcuts creating code and customisations on a project.

Start today to create better quality customisations and be a great software engineer because no one ever got into trouble for creating high quality code.