What’s coming for Developers in Dynamics 365 Customer Engagement 9.0
Dynamics 365 9.0 is going to introduce many changes for us developers. I would like to share with you my thoughts and hopes regarding the newest version of Dynamics 365 Customer Engagement.
Virtual entities
This feature was announced quite some time ago and it’s great that it’s going to finally be included in version 9.0 of Dynamics 365. What exactly are Virtual Entities? Basically they are entities that are obtained from some external system and they are not stored in D365 database. By properly implementing Retrieve and RetrieveMultiple for such entities, you will be able to show any external data inside CRM lookups and grids. Because there is no database table created for Virtual Entity, it will not use any space in the database, which is a nice feature for Online deployments, where every byte counts. If it will work as described, I’m sure that this particular feature can change the technical approach in many projects.
Web API improvements
Not much to say here – Microsoft already decided to deprecate SOAP endpoint in Dynamics365, so Web API MUST provide all the functionality that was previously in his older brother. Very useful will be GrantAccess and ModifyAccess messages, that will make it easier to handle record sharing using JavaScript. I believe that before 9.0 is publicly released, we will hear about much more new messages available in Web API
Client API enhancements
Of course it’s good thing that Microsoft is tidying up the JS API, which has always been a mess with its inconsistent naming of methods and namespaces which were totally unintuitive. Version 9.0 will introduce a lot (and by a lot I mean really a lot) of changes in this area. I believe that the most crucial change here is replacing Xrm.Page.context with Xrm.Utility.getGlobalContext. I believe that every single D365 deployment out there will require some JavaScript refresh because of that change. I strongly encourage you to read carefully the following article:
Most of the methods are only renamed or replaced by some other methods, but there are some (like addOnKeyPress for example) that will be removed in the next major release after 9.0, so it’s a good thing to remove them from your code right now (and remember not to use them in upcoming projects).
From many introduced methods, I personally believe that relatedEntities collection on entity, getEntityMetadata, getResourceString (related to new RESX support for webresources), show/hideProgressIndicator and refreshParentGrid will be the most important ones. There will be also new methods for controls like editable grid or timer, so hopefully we will have more control over their customization.
Timeline control API
For sure you’ve heard already that in Unified Interface, old control showing Posts, Activities and Notes will be replaced by a Timeline control, which will consolidate everything in one place. This is not only UI specific change – together with the new control we will get quite a few new methods that will allow to customize a little bit this control (which was impossible with the old control) with the most important among the others – refresh function (finally!)
Apps improvements
In Dynamics 365 we already have something called Apps – functionality which allows customizers to pack some pack of functionality (for example regarding Service or Sales) in an App – with specific SiteMap and only specific entities. This feature has proven to be very useful in systems used by many different divisions which not necessarily should have the same functionality exposed (of course by properly handling Security Roles it was always possible to show/hide entities for specific users, but preparing different SiteMaps with specific order of things adapted to current user is very useful and was not possible before Apps were introduced). Version 9.0 will bring us more improvements in this field – with the possibility to create an App using SDK being the most important from my point of view. Also new methods for JS API (getCurrentAppUrl, getCurrentAppName, getCurrentAppProperties) probably will bring new possibilities for ISVs
Multi-select option set
This feature will be really helpful in many scenarios and will probably encourage many customizers to re-create some functionalities in their systems because for sure it can simplify how we can approach things. Previously selecting multiple values was only possible by creating some related entity and showing subgrid on the form, which had many drawbacks (being not able to associate anything before creating record was the most painful). Right now all such scenarios will be handled by this out-of-the-box control and I keep fingers crossed that it will not be as buggy as editable grid, which proven almost unusable in most scenarios, because of the lack of configuration and many bugs.
Custom Controls
For me the most important feature of all, but currently Microsoft did not provide a lot of information regarding this. In theory we will have a framework that will allow us to build custom controls available for all types of devices. If this will be true, that can be a real game changer for Dynamics 365 and maybe the end of “this cannot be done in Dynamics 365” or “this will not work on mobile client” at least from UI perspective. Of course we still don’t know what this magic CCF will be like and what possibilities it will provide, but if it will allow to use HTML5 and whatever JS library you want – I believe that soon we will be flooded with packs of really great reusable controls, totally changing user experience of Dynamics 365
WebHooks integration
WebHooks is a lightweight HTTP pattern for connecting APIs and services with a publish/subscribe model. In a nutshell, it will be possible to register a WebHook for “Lead created” event and whatever client will subscribe to that WebHook will be immediately notified about such event. I believe that this can take integration scenarios to another level – especially for Online deployments it was always a pain to notify any external system (which is usually not in the cloud) that something happened in CRM. Right now this external system can just listen to a specific WebHook and if anything happens it can do whatever needs to be done (for example update some Account specific data). Really cool feature, which of course could have been used earlier but version 9.0 will make it much easier.
Vector image web resources
Using SVG icons will make it easier to apply icons for entities – as you will no longer need to upload both 16×16 and 32×32 icons for each entity. Maybe a small thing, but I think that will be useful.
Support for localizable solutions
The prayers of all ISVs around the globe were heard and we will finally have out-of-the-box localization feature for web resources. It should be possible to create RESX files with different languages and reuse them among web resources using new client-side API. If that’s not awesome, I don’t know what is awesome.
JavaScript Web Resource dependencies
Have you ever added a JavaScript web resource calling function isNaN, just to make it load in current context for reuse in some different web resource? Well, you will not have to do that anymore – in 9.0 it should be possible to define which web resources are dependencies for current resource. This will make our life much easier.
Override the default open behavior of data rows in an entity-bound grid
This feature will allow to override the default “double-click” opening of the record from a grid. If we want to redirect user to some external page after such event – in version 9.0 it will be possible. If it would be also possible to use for Virtual entities, it will make one powerful feature – allowing to redirect user to another system directly from a grid, without any “Ribbon-button” workarounds.
There are many more features to be introduced in 9.0, but I don’t see them as important as the ones that I described (like for example further Business Process Flow enhancements, which personally I believe the least useful feature in the system – although it looks really nice on presentations, in most cases for my clients there was always a show stopper for using this feature and I don’t believe things will change with the next release.
For the full list of new features look here: