Dynamics 365 v9 – Changes for Developers


After the Dynamics 365 v9 preview sessions we are now getting a little bit more detail direct from the Microsoft website detailing what the changes mean in practical terms for users, configurers and developers.

Head over to https://docs.microsoft.com/en-us/dynamics365/get-started/whats-new/ to see the full details or just read my summary below.

Here is my take on some of the major points that caught my attention.


deprecatedOutlook Client is deprecated. This is a good thing in the long run. Hopefully it means that the new server to server App for Outlook gets resources poured into it while it’s usability improves. Forget about registering plugins for Offline Access in future.

Dialogs are deprecated – I was surprised with this one, but again with the new unified interface it’s quite logical. Dialogs have been around for a long time and the effort to make them work in future versions is probably counterproductive considering task flows and business process flows are now available.

Parature Knowledgebase – I’ve never encountered anyone who has used this – enough said.

Mail Merge – This one again is understandable as it is clearly legacy, but it remains to be seen how the functionality provided by mail merge can be provided with Word Templates as they currently work. Mail Merge is limited to 62 fields, so word templates are a clear advantage, however there are many many use cases where people want to print out documents in a single batch, in the context of one word document. By the time this is fully removed, I’m hoping for the Word Templates functionality to be at least feature equivalent as many people will still need the ability to select and merge multiple records into a single word document.

Service Scheduling – As one of the possibly few people to have used the not very well documented service scheduling APIs extensively in the past, I will miss this. It was a bit clunky but it did the job. Time for me to bone up on the new field service scheduling.


light-bulb-1458612887G8aAdvanced Find – now has the option to build a NOT IN query. Wow – I thought they were never going to do this. When you select a related record type in advanced find, you will see the Does not contain data operator. No more need to get your hands dirty with FetchXml and semi-supported view updates.

Multiple Execution Contexts – here’s one for the client side developers to get their heads around. On a form, there can be multiple execution contexts active at the same time- for example, one for a form, one for a quick form and one for an editable grid. In practice it looks like we should use executionContext.getFormContext. Xrm.Page is being deprecated, but can be replaced with executionContext.getFormContext. For upgrades to v10, there might be a little bit of refactoring required here, but nothing too scary.

WebAPI – Custom actions that return EntityReference, Entity, or EntityCollection types are now available. Because the WepAPI is versioned, things remain backwards compatible, but it’s worth checking to see if any existing WebAPI calls work with the new endpoint to save you a headache down the road. Hoping Jason Lattimer updates his excellent CRMRestBuilder solution which makes calling these web services really easy.

New Timeline Control API Awareness – Previously, the Social Pane was not accessible programmatically. As a result, if you created an activity via the WebApi, you would have to click on ‘Activities’ on the social pane to refresh it. Thankfully the new timeline functionality is a proper control in it’s own right and is called ‘timelinewall’. As such, it is API aware and supports the standard Xrm methods such as getControlType, getName, getLabel, setLabel, getVisible, setVisible, setFocus and refresh. This is a great addition.

AppModule – When apps were first release, I blogged about not being able to retrieve them programmatically. Now it can be done. We have the AppModule entity to create, manage, and validate apps, the AppModuleComponent entity to create and manage components in an app such as forms, dashboards, views, charts, and business processes and AppModuleRoles entity to associate and dissociate security roles that define access for users to an app.

More control over apps – This one looks interesting. There is more granularity over apps, controlled by the  NavigationSetting, AppConfigInstance and AppConfig entities. We can now use the new NavigationSetting entity to configure a customised settings experience for a business app. The jury is out on how useful this one will be – looking forward to the API documentation and getting a play with this.

Custom Control Framework – Ever since the editable grid controls were added in Dynamics 365, it seemed that the logical next step was that developers would be able to build their own controls – with this release the ability to create controls is being released as a preview feature using the Custom Control Framework (CCF). This one could be very useful, and an ISV driven cottage industry in new controls for Dynamics 365 may emerge.

JavaScript Web Resource dependencies – Have you ever added a web resource and spent 20 minutes checking out what other libraries or resources it depended on. Now it looks like you can configure this so that if you load one JavaScript library, you can specify the dependencies so the dependencies will be automatically loaded when needed.

Clicking the wrong link fixes – It happens to users old and new – user is looking at a grid of widgets where the second column is the related contact. They want to open the widget, but open the contact instead. Now we can get rid of this annoying behaviour with the wonderfully titled ‘Override the default open behavior of data rows in an entity-bound grid’. In practical terms, this appears to be configuring the ribbon to call Actions, so Ribbon Workbench will be needed no doubt.

Looking forward to getting my trial instance to see how good these look in practice.

One thought on “Dynamics 365 v9 – Changes for Developers

  1. where can I read more about Custom Control framework. I don’t see any info about it in the docs linked.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s