Developers: What's coming in Customer Engagement in the next update for Dynamics 365 (online)

[This topic is pre-release documentation and is subject to change.]

Developers will be able to use the following new Customer Engagement features in the next update.

With Dynamics 365, previous Dynamics CRM functionality is included as a part of a suite of intelligent business applications. The apps that make up the customer relationship management (CRM) portion of the suite are referred to as “Customer Engagement” and include Sales, Customer Service, Field Service, Project Service Automation, and their related services.

Integrate external data with Virtual Entities

You have a new way to integrate data from external systems. Without virtual entities, common strategies to integrate external data include client-side code to retrieve and display external data or server-side replication and synchronization of external data within Dynamics 365 Customer Engagement. Virtual entities provide a better approach for many external system data integration requirements.

Web API improvements

The following improvements are included in this release of the Web API, our OData v4 endpoint:

  • Custom actions that return EntityReference, Entity, or EntityCollection types are available.

  • Changes to API behaviors are available using the latest v9.0 version of the service, legacy behaviors remain available in the v8.x version. You don’t have to change your code when you upgrade.

  • New messages: GrantAccess, ModifyAccess, and RetrieveSharedPrincipalsAndAccess messages are now available using the Web API.

  • We have made the amount of service metadata smaller by not including annotations by default. If you need the annotations, you can use parameters to have it included.

Client API enhancements

With the introduction of Unified Interface in the July 2017 update for Dynamics 365 (online) release, there are some significant changes made to the client APIs to ensure that they work consistently across Unified Interface and the web client.

Execution context and global context

On a form, there can be multiple execution contexts active at the same time. For example, a form with a quick form and an editable grid will have a context for the entity displayed on the form, another context for the quick form, a grid context for the editable grid, and an entity context for each row in the editable grid. Xrm.Page is the primary form context. If a script is run on a secondary context (grid row, quick form, related entity) then Xrm.Page won’t be the correct form context.

The execution context on a form is automatically passed to the form events and event handlers. So, instead of using the static Xrm.Page object to get the form context, you should now use the executionContext.getFormContext method to get the form context instance, and then use it to execute client API methods so that you can use same scripts on various contexts.

Also, Xrm.Page.context that is used to reference the client-side context is deprecated in this release; you should now use the new Xrm.Utility.getGlobalContext method to get the global context instead of going through the form context. The new method contains an equivalent of all the methods available for the Xrm.Page.context object to retrieve information specific to an organization or a user.

New client APIs

We introduced a number of new client APIs in this release.

Here is a list of new namespaces in this release that contains new and some existing methods that are moved under these namespaces for an enhanced object model design.

New Namespace Description
Xrm.Device Contains methods to use the device capabilities of mobile devices.
Xrm.Encode Contains methods related to applying attribute and XML encoding to strings.
Xrm.Navigation Contains new methods for multi-page dialogs and task flow, and some existing methods moved from the Xrm.Utility namespace.
Xrm.UI Contains methods for displaying and hiding app-level global notifications.
Xrm.WebApi Contains methods for performing CRUD operations on records; automatically switches between online and offline mode.
Xrm.WebApi.offline contains methods to perform CRUD operations while working in the offline mode.
Xrm.WebApi.online contains methods to perform CRUD, Execute, and ExecuteMultiple operations while working in the online mode.

The following new APIs were introduced in the existing namespaces:

Namespace New APIs
Form executionContext getUrl
Xrm.Page.data OnLoad event and even handlers (addOnLoad and removeOnLoad)
isValid
Updated saveOptions in the Xrm.Page.data.save(saveOptions) method to include a new value called SaveMode to let the onSave event handlers know why the save is happening
attributes collection
Xrm.Page.data.entity relatedEntities collection
getEntityReference
isValid
Updated the save method to allow saveOptions to be sent as the parameter
Xrm.Page.data.entity attribute isValid
setPrecision
Xrm.Page.ui Three new APIs applicable only for multi-page dialogs and task-based flows: getDefaultNextPageName, movePrevious, and moveTo.
setFormEntityName
OnLoad event and event handlers (addOnLoad and removeOnLoad)
Xrm.Utility getAllowedStatusTransitions
getEntityMetadata
getGlobalContext
getLearningPathAttributeName
getResourceString
invokeProcessAction
lookupObjects
showHierarchyPage
showProgressIndicator
closeProgressIndicator
refreshParentGrid

Apart from these new client APIs, there are some more client APIs introduced for specific controls such as grids, lookup, optionset, and timer. For more information about these new APIs, see the control-specific pages.

Deprecated client APIs

Some client APIs are deprecated, and you should use the new/improved client APIs instead as mentioned in this list: Some client APIs are deprecated

NOTE: Deprecation means that we intend to remove the client API from any future "major" release of Dynamics 365. The client API will continue to work and is fully supported until it is officially removed. After removal, the feature or capability will no longer work. We are notifying you now so you have sufficient time to plan and update your code before the feature or capability is removed.

Client API support for the new Timeline control in Unified Interface

The new Timeline control presents the Posts, Activities, and Notes in a unified view. The Timeline control supports the following client APIs:

  • getControlType: Returns “timelinewall”

  • getName

  • getParent

  • getLabel and setLabel

  • getVisible and setVisible

  • setFocus: Sets the focus on the Add button in the control.

  • refresh: Refreshes the timeline wall.

For information about these client APIs, see Xrm.Page.ui control (client-side reference)

Create and manage role-based, purpose-built business apps

Business apps in Dynamics 365 are role-based, modular apps that provide task-based functionality targeting a specific area of your business such as sales, service, and marketing. These business apps provide a simple and intuitive experience for users by enabling them to quickly navigate around, find things easily, and perform their tasks effectively.

In addition to using the app designer, you can now programmatically create, manage, validate, and publish business apps. While creating an app, you can select whether the app is for the web client or Unified Interface.

Use the:

  • AppModule entity to create, manage, and validate apps

  • AppModuleComponent entity to create and manage components in an app such as forms, dashboards, views, charts, and business processes.

  • AppModuleRoles entity to associate and dissociate security roles that define access for users to an app.

Also, following new client APIs related to apps are now available in the global context (Xrm.Utility.getGlobalContext) that let you retrieve information about the current app:

  • getCurrentAppUrl: Gets the URL of the current app.

  • getCurrentAppName: Gets the name of the current app.

  • getCurrentAppProperties: Gets the properties of the current app such as appId, displayName, uniqueName, url, webResourceId, and welcomePageId.

New attribute type: multi-select option set

Customizers can now define a new type of attribute that allows selection of multiple options. Included in this work are new query condition operators to write queries to retrieve data based on which options are selected.

Form scripting support for multi-select option sets

Multi-select option sets are available for Unified Interface and the web client. Multi-select option sets are available for the following form types: Main, Quick Create, and Quick View. Multi-select option sets won’t be supported on legacy forms.

Multi-select option sets supports all the client APIs supported for the option sets attributes and controls; the only difference is that the return value of certain methods will be an array instead of a single value.

You can also set the value for multi-select option set fields for new records by specifying integer values for the options in the URL that is used to open the form.

Create custom controls

The ability to create controls is being released as a preview feature. The Custom Control Framework (CCF) provides an extensibility framework for building UI components to visualize and interact with data in the application. Using CCF you will be able to define UI components that are metadata driven, configurable, reusable solution components. You will be able to define controls for individual fields, grids, and sub-grids.

WebHooks integration

You will be able to integrate data from Dynamics 365 Customer Engagement to your own custom code hosted on external services using WebHooks. You can use the plugin registration tool to configure when to post Customer Engagement data to an external service. WebHooks is a lightweight HTTP pattern for connecting Web APIs and services with a publish/subscribe model. WebHooks senders notify receivers about events by making requests to receiver endpoints with some information about the events. By using the WebHooks model, you can secure your endpoint by using an authentication header or query parameter keys. This provides an alternative to the SAS authentication model that you may currently use for your Azure Service Bus integration.

Vector Image web resources

Use vector images for any icon presented in the application. Vector images are defined as Scalable Vector Graphics (SVG) an XML-based vector image format. The advantage of vector images over other image web resources is that they scale. You can define one vector image and re-use it rather than provide multiple sizes of images. You can use this web resource to define a single icon for an entity rather different sized images.

Support for localizable solutions

You can use RESX web resources to store localized strings for your solutions. The RESX XML format is commonly used to define localized resources so there is common tooling available to work with this type of file and localization vendors will be familiar with working with them. You can associate RESX web resources with any JavaScript web resource that uses them so that you can use a new client-side API to access localized strings at runtime.

JavaScript Web Resource dependencies

JavaScript web resources frequently need to interact with other resources which can be other JavaScript libraries, images, attribute values, or the new RESX web resource for localized strings. You can now configure a JavaScript web resource to associate it with any dependent resources so that the resource is available when needed.

When a JavaScript web resource is associated to another kind of web resource, that web resource will be loaded automatically when the JavaScript web resource is requested in the application. When a JavaScript web resource used in a form script is associated to an attribute for a specific entity, that entity attribute will be available to the script even when a field for that attribute isn’t included in the form.

Interactive Service Hub improvements

These are the changes to the Interactive Service Hub:

  • Interactive Service Hub is now called Customer Service Hub, and is available as a Unified Interface app.

  • The Customer Service Hub app uses the Main form type instead of the Main - Interactive experience form type. If you upgrade from an earlier version of Dynamics 365 Customer Engagement, all your Main - Interactive experience type of forms will be converted to the Main form type. Any of your customizable Main - Interactive experience type of forms will be set to inactive during the upgrade, and you must enable the converted forms after upgrade to use them. Also, all the Main - Interactive experience type of forms converted to the Main type of form will be ranked lower than the existing Main type of forms to prevent any form order conflicts. This ensures that the correct form is displayed to the users in web client post upgrade.

  • All entities are now enabled for the interactive experience in the new Customer Service Hub app. This implies that the EntityMetadata.IsInteractionCentricEnabled property, which indicates whether an entity can be enabled for interactive experience, is no longer relevant. The corresponding setting for this property in the Customization tool, Enable for interactive experience, is removed in the current release, and the EntityMetadata.IsInteractionCentricEnabled property will be removed from the future version of Dynamics 365 SDK for Customer Engagement.

Override the default open behavior of data rows in an entity-bound grid

Currently, performing any of the following actions in a data row in an entity-bound grid opens the entity record by default:

  • Double-clicking the data row or clicking the primary attribute link in the row.

  • Selecting a data row, and pressing ENTER.

  • On a touch-enabled device, selecting a data row.

There might be situations where you do not want the entity record to open, such as, for document management records, you might want to open a SharePoint site instead of displaying the record. You can now override the default behavior to define your own custom behavior.

You can now create a command definition for an entity with Mscrm.OpenRecordItem as the value of the Id attribute (<CommandDefinition> (RibbonDiffXml)), and define custom action for the command <Actions> (RibbonDiffXml). Customer Engagement will look for this command Id for an entity when you try to open a record from the entity-bound grid, and if present, will execute the custom action instead of opening the entity record (default behavior).

Business process flow enhancements

Business process flows has been enhanced to offer the following changes:

  • On Unified Interface, the setDisplayState method now lets you set a business process control in the “floating” state, in addition to “expanded” and “collapsed.” Similarly, the getDisplayState method can return “floating”, “expanded” or “collapsed” depending on the state of a business process control. The floating state is not applicable for the web client.

  • You can now run process actions using the new client API called Xrm.Utility.invokeProcessAction. The ability to programmatically run process actions using the new client API is released as a preview feature in this release.

    • On the web client, you can run any process action using the new client API. However, on Unified Interface, only those process actions that are available to run as a business process step can be run using the new client API.

    • Get and set the progress of a process action step using the new client APIs: getProgress and setProgress. You can get and set one of the following step progress statuses using these methods: None: 0, Processing: 1, Completed: 2, Failure: 3, or Invalid: 4. These new client APIs are also released as a preview feature in this release.

    • The getProgress and setProgress client APIs aren’t supported for the process data step.

  • You can now use the new Xrm.Navigation.openTaskFlow client-side API to run a task flow.

New features in Unified Service Desk 3.0

Developers will be able to use the following new features in the Unified Service Desk 3.0 release.

Display customer data faster to your agents by pre-fetching entity data from Dynamics 365 Customer Enagement

Unified Service Desk now lets you load related information for an entity record in the context along with the entity record page without having to wait for the full entity web page to load in the client application. The fetched entity information is populated in the Unified Service Desk context thus enabling any hosted control to quickly display relevant entity information on the client application. This could help agents instantly act or kick start discussion with customers, and save crucial interaction time.

To pre-fetch entity data in Unified Service Desk, select the Pre-Fetch Data check box while configuring a CRM Page type of hosted control. Also, a new event called DataReady is added to the CRM Page type of hosted control to help you perform actions as soon as the related information for an entity record is loaded in the Unified Service Desk context. This DataReady event is guaranteed to be fired before the BrowserDocumentComplete event and if Pre-Fetch Data attribute is checked for the control, then it is fired as soon as the entity data is fetched in a separate parallel call to the server and will not wait for the full page to finish loading The entity data is pre-fetched and DataReady event is fired for inline navigations as well.

Asynchronously create entity records to prevent execution blocking

The CreateEntity action on the Global Manager hosted control synchronously creates an entity record on the main thread, and Unified Service Desk has to wait for the CreateEntity action to complete before proceeding with the next task. This leads to Unified Service Desk becoming unresponsive until the action is completed, which might not be desirable in some cases.

In this release, we are introducing a new data parameter, RunAsync, for the CreateEntity action that you can use to set the action to run asynchronously (RunAsync=true) so that Unified Service Desk is not blocked and remains responsive during the action execution.

Note: The associated sub-action calls and subsequent action calls for the CreateEntity action do not wait for the asynchronous create operation to complete. So, you must ensure that if you are running the CreateEntity action asynchronously, the sub-action calls that depend on the created record are configured to execute only when the target record is complete. This can be achieved using the ExecuteOnDataAvailable action on the Global Manager hosted control. For more information, see the CreateEntity action.

Keyboard shortcuts for toolbar buttons, notifications, and panel navigation

  • Toolbar buttons now support keyboard shortcuts, which can be defined while creating a toolbar button. This lets agents execute actions configured against the toolbar button from anywhere in the Unified Service Desk client without having to click it. Shortcut keys for a toolbar button work only if the visible and enable conditions for the button, ancestor buttons (if any), and the toolbar itself evaluate to true.

  • Notifications in Unified Service Desk now support keyboard shortcuts. Use the default keyboard shortcut Alt+1 to set your focus on a notification. If there are multiple notifications displayed, you can press Alt+1 repeatedly to cycle through all the active notifications on your screen. To change the keyboard shortcut keys for notifications, use the new PopupNavigationShortcut UII option to specify the shortcut keys of your choice.

  • Earlier, the keyboard shortcut used to cyclically traverse through all the active panels, Ctrl+0, couldn’t be changed to use any other key combination. Now, you can specify shortcut keys of your choice to cyclically traverse through all the active panels using the new UII option called PanelNavigationShortcut.

Debugger control enhancements

The Debugger control has been enhanced to offer the following new capabilities to help developers and customizers in debugging and troubleshooting custom code and configuration changes more easily:

  • Sort data: Sort data in columns of the Action Calls tab to display data in ascending or descending order in a column. You can also reset all the sorted column data to return to the default data displayed in the Action Calls tab by selecting the Reset the sorted columns icon.

  • Replay action calls: Quickly rerun an action call by right-clicking the action call record in the Action Calls tab, and selecting Replay from the shortcut menu. You can also choose to edit the data parameters for an action call and then rerun it by right-clicking the action call in the Action Calls tab, and selecting Edit from the shortcut menu. This will load the action call definition in the Direct Action tab where you modify the required information, and then rerun it.

  • Replay events: Quickly rerun an event by right-clicking the event record in the Action Calls tab, and selecting Replay from the shortcut menu. Unlike action calls, you cannot edit an event, and rerun it.

  • Direct Action tab enhancements: Clear information from all the fields in the Direct Action tab by selecting the Clear icon.

  • Enhancements for replacement parameters: In the Data Parameters tab, you can now add a replacement parameter along with its value, copy a replacement parameter’s value, and edit a replacement parameter’s value using the new icons.

Configure JAWS screen reader support

Unified Service Desk now supports JAWS (Job Access With Speech) version 18 for Windows screen reader for speech output in the Unified Service Desk client. All the controls that are part of the Dynamics 365 Web Client package are JAWS compliant.

You can configure JAWS screen reader support for controls that are focusable. JAWS does not support controls that are non focusable, such as a label. However, as a workaround, you can create the non-focusable control as a user control (wrap it with <UserControl>) to support JAWS screen reader.

Also, JAWS screen reader doesn’t support reading button tooltip text. But, you can use custom scripts in Unified Service Desk to enable JAWS screen reader to read tooltip text.