Native Dynamics 365 v9 Auto Number Solution for Custom Entities

I spent some time watching the some of the Microsoft Ignite sessions on YouTube, and the most interesting from a Dynamics point of view was Matt Barbour’s session looking at platform updates for Dynamics 365 Customer Edition v9.

One thing that was not disclosed at the preview sessions earlier this year was the addition of Auto Numbering for any entity – not just a few select core entities. From the screenshot Matt put up explaining how they are created in C#, it was enough to see how they were defined, so I wrote a web resource to allow users to create these without any code.

To download and see how it works find full instructions can be found on the Dynamics 365 Heroes blog. Hopefully this will not be required for too long as I would expect the native UI to be updated in a minor rather than a major update.

Any questions, let me know!

Dynamics 365 Fantasy License League

I listened with interest to Steve Mordue on the MS Dynamics World podcast today about his views on the recent announcements at the NAV Directions conference last week. Steve is a Microsoft Partner with an opinion worth listening to on everything Dynamics, but primarily CRM. As a Dynamics partner or interested customer, If you haven’t listened to the podcast I would recommend doing so, but first have a read of his blog post here which is a great read as well as includes as a bit of drama!

Listening to the podcast gave me some food for thought based on some conversations I have been having with some customers and other partners recently. With that in mind, I thought I’d share my own opinion here.

Continue reading “Dynamics 365 Fantasy License League”

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 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.

Segmenting your Contact records with Dynamics 365 Apps

I’ve been using apps with Dynamics 365 for some time now and they are a great way of simplifying the user interface in a way that doesn’t require you to cross reference low level security permissions with Site Map XML.

One problem that has come up time and time again is the fact that different organisations often have different types of contact because of the nature of their business. There are a lot of benefits you get from using the system contact entity, which means that creating a new custom entity for a new contact type does not always make sense.

For example, consider an organisation with multiple types of service and therefore multiple different types of customers. They have contacts which may encompass the following types, and contacts may often be one or more types of these.

  • Staff Member
  • Applicant
  • Student
  • Citizen
  • Farmers

Ultimately, these people are, and should be, contacts in the CRM data model – if we model them as standalone custom entities they are no longer activity parties, they can’t be associated with the customer lookup fields – for example the dedicated customer field on the case record. Additionally, we want to have a single view of the customers contact with the organisation which can be viewed on the activity pane or activity associated view on the contact record.

For this reason, it often seems natural when designing a solution to apply a type field to the contact record. This could be a single option set on the contact record if the contact types are mutually exclusive, or a set of Boolean fields so that a contact can be of multiple types. For example, a staff member could also be a student who works as a part-time farmer (not uncommon in Northern Ireland!).

However, if we model these as contacts in CRM, it is important to consider the user experience when navigating through CRM screens. When a user clicks on the contact menu item on the site map, they could be presented with a list of views where they can view a list of contacts by type – For example, all active Applicants, All Active students etc.

But to improve this, what if we could add multiple entries in the site map to take you directly to a view of each type of contact. This would make the users life easier.

Consider this use case, which demonstrates a non-streamlined user experience with minimal customisations.

  1. User wants to view a list of all Students
  2. User Clicks on Sitemap
  3. User Clicks on Contacts
  4. A list of contacts is displayed, but the view is not the Students one.
  5. User changes view to Student
  6. User clicks into a record
  7. User realises that form being displayed does not show Student specific information
  8. User browses forms for that contact entity and selects (perhaps guesses) the most appropriate one.
  9. Student form is displayed.

The best user experience here is (arguably):

  1. User wants to view a list of all Students
  2. User Clicks on sitemap
  3. User Clicks on Students
  4. User clicks into a record
  5. The most appropriate form for that student is displayed.

However, even if we know what the most appropriate form is for a particular record, we are limited technically in setting the form based on the value of a field on a record. The default form displayed for a record is the one that was last saved by the user. It can be changed using JavaScript when the form is loaded, but that would involve a page refresh straight after the record is opened (ugh), and that is quite confusing to the user.

So, what is the optimal, supported way of navigating this scenario at using Dynamics 365? (I am using v8.2 here, am hopeful of v9.0 SDK improvements)

Consider this flow:

  1. User wants to view a list of all Students
  2. User clicks on sitemap
  3. User clicks on Students
  4. A list of students is displayed
  5. User Clicks into a record
  6. If form is not optimal for that record, the system prompts the user that record is a student, and suggests the most appropriate form(s).
  7. User clicks single button to bring the user to the suggested form.

This scenario can be achieved relatively easily using Dynamics 365 Apps, URL Addressable forms and some supported JavaScript on the contact form. Configuring this pattern will look something like this:

Configure the Site Map and App

  • Create appropriate fields on the contact record to segment your contact into different types.
  • Create a new system view filtering for each type as required.
  • Get the GUIDs for each of the views you have just created. One way of doing this is to navigate to the view and select ‘Email a Link of Current View’. The viewid will be at the end of the URL between the escaped %7b indicator and %7d curly bracket tags.
  • Create a new Dynamics app and add the contact record to it. Select all the views you have created that you want to display in your app.
  • Open the Site Map within your app and add the Contact record first.
  • Now add a subarea of type URL for each of the other types of contact you want to display on the site map in their own right.
    • The URL should be in the format /_root/homepage.aspx?etc=2&viewid={VIEWGUIDGOESHERE}
    • Note : When adding this link in the app designer, it is not escaped as indicated in the MSDN documentation. Paste it in exactly as above or it won’t work.
    • As a side note – you cannot change the sitemap icons for these contact types, even though you have added it as a URL. CRM still appears to parse the entity type code (ETC) or entity type name (ETN) provided in the URL which unfortunately means that the default contact icon will still display.
  • Save and publish your app once you have added all your views.

Streamline the form experience.

At this point, you have a set of entries on your sitemap which link directly to the views for each contact type. However, what happens when you click on the record – it will take you into whatever form you last looked at. To improve this experience, you will need to add some JavaScript to each form onLoad event to display an appropriate recommendation to the user. My library of choice to do this is Notify.js, which will give you a nice notification as shown below when you are opening a form.

If you think this type of scenario should be handled better within Dynamics 365 natively, please vote for the submissions below on for a) this to be handled within the app designer and b) for better URL addressable forms. I’m sure Microsoft can come up with a better way of doing this.

I should mention, this approach flies in the face of what a ‘Contact’ is the CRM Community Schema project which is a great initiative that takes a different approach to modelling entities. The question is, are you a pragmatist or a purist?


Dynamics 365 V9.0 Summary (July 2017 Update)

Today I dropped into the Dynamics 365 Insider program for day one of a series of reveals we have all been waiting on for some time now. With the NDA lifted on what Dynamics CRM 9.0 will be, it was an interesting set of changes. To quote some of the technical leads, this is the biggest release Microsoft have made to Dynamics 365 so lets understand what is involved to make it a smooth transition.

Because of other commitments, I only dipped in and out of the sessions so I don’t have all the detail, but here’s a quick summary of the major features I took in and some of my musings around them. As I find out more, I will update this post accordingly.

New Unified UI

There is a new interface – a Unified Interface which takes a mobile first approach. This is a huge facelift to the application and is more accessibile than before. We first got wind of this at SummitEMEA in April and now have a little bit more detail which will whet our appetite until we get private preview access. If the PowerPoint slides can be believed, the interface is shared across phone, tablet, web and the App for Outlook and it looks a lot slicker and, some would say, a lot more Salesforcey. The 6 main UI benefits it provides are shown below.


What I noticed from the screenshot above is that tabs on forms actually look a bit like tabs again, at the top of the form, for the first time since CRM 4.0!

The user interface is part of a wider Unified Interface refresh, where phone, tablet and web all look much more consistent. However, the Unified Interface will initially be applied to Business Edition only. Enterprise edition will still be on the older UI but will be getting a ‘Web Refresh’. I’m not exactly sure what this means but I believe (and hope) it means that enterprise customers will have the option to use the new style web interface, or a watered down version if it if they so wish. It sounds like a rollout plan to test it with the new business edition users before rolling out to existing enterprise customers, but let’s wait and see how it pans out.


The current social / activity pane on the contact record is normally the first thing I demo for a prospective customer looking at a traditional CRM use case, and most CRM consultants will know of its limitations. It’s not very configurable and sortable, only includes a fixed list of activities and filtering isn’t great. The good news is that if you have the new Unified Interface, you can get a new control to replace this. This now is called the timeline control. Instead of having multiple sections for posts, activities and notes, it is a display of combined activities in a single view. Best of all, it’s really configurable – you can display what fields display for each activity type. Good work Microsoft.


A few limitations here you should know of : Yammer is not yet supported on this control on the Unified Interface so will not show up. Knowledge Base search will not show up but will be available as a separate control you can put where you like.

Multi-Select Option Setsoset

A simple one. Everybody needs these and anyone who models data will appreciate the simplicity of this control over modelling 42 boolean fields in a single section or hacking around with client side solutions. Well done Microsoft for not forgetting about the basics!

Virtual Entities

veNot much detail on this yet, but this promises to be my favourite, I hope I am not disappointed tomorrow! Watch this space and I will update. Virtual entities look to be integrated to Grids, Find, Forms, Lookups and Subgrids and appear to support being pulled in from ODATA and DOCDB.

Interactive Service Hub is Dead

This has been replaced by a new ‘Customer Service Hub’. This is a good thing – the Interactive Service hub wouldn’t load in a private browsing window and always seemed to be a bit of a basket case. There will be no more wait time after you publish a solution while waiting for the Interactive Service Hub to reload. The new Customer Service Hub is optimised for Tier One agents and will still sit alongside the web client. It looks like Interactive Service hub is to be completely removed as opposed to deprecated.

Best of the Rest

–  A better editor for HTML emails and Knowledge Base articles with Designer, HTML and Preview tabs so you can check to see how it previews across different form factors. It won’t have auto-correct/dictionary functionality but that is on the backlog. I would guess the need for this ties into some of the enhanced Marketing functionality to be provided in Business edition.

– Some changes to the App Designer and app architecture. App Url suffixes can now be specified in the designer itself and apps can be enabled for offline usage in the Dynamics 365 mobile app.

– The existing Activity Wall web resource will not work in the web refreshed UI, it is replaced with a Timeline control. Likewise, the new timeline control will not work with the old UI.

– Provisioning enhancements for Mobile devices.

– No changes to workflow designer (boo).

– Integration of Microsoft Flows directly into the Dynamics 365 UI – you can configure flows to start from directly within Dynamics 365 – not sure how this will work in practice yet.

– Much more robust offline mobile and quicker load times. Resco have a massive head start here with Woodford, wide device support usability and so let’s see if Microsoft can catch up with this release.

– Lots of LiveAssist improvements including Bring your own Bot.

When will it ship?

Next step is private preview to Dynamics 365 insiders, so no firm date just yet. Private preview should be available in the next week or so. After that, some features will go to public preview. When it is sufficiently mature, the features will be rolled out to the public.

So no firm date, but bearing in mind it is being called the July update, I am going to go down to Paddy Power and put a bet on August for the majority of these features make it to the field for cloud customers. Based on past experience, I would expect a subset of these features to make it to on-premise before the end of the year.

Summit EMEA Review – Day 2

Summit EMEA

Day 2 of Summit EMEA started with some useful breakout sessions by Microsoft Partners and MVPs. The first session I attended covered some use cases of Custom Entities. Adam Vero’s session gave an interesting overview of how custom entities can be used for things other than storing business data. The 5 main use cases for custom entities covered were, replacing pick-lists, N-N intersect entities, custom auditing, 1-1 records and for applying arbitrary security privileges to the ribbon or site map. One of the things missing from the Microsoft documentation is covering general CRM design patterns like this, and this session reinforced my understanding of best practice in data modelling in Dynamics 365. Tip of the session was the advice to create a 1-1 relationship to extend the user record with fields that are updated frequently. If you don’t, you may experience performance problems – this is because the browser security cache is invalidated when the user record is updated.

Continue reading “Summit EMEA Review – Day 2”

Summit EMEA Review – Day 1

Today I attended the first day of the Summit EMEA Conference in Amsterdam with my Codec-Dss colleagues where over 2000 Microsoft Dynamics 365 professionals and users come together to digest all things across Dynamics 365. With the converging product set, this included separate streams on CRM, NAV and AX. Being a community-driven conference it features special access to Microsoft leadership and a diverse array of interactive training workshops led by experts and users.

Continue reading “Summit EMEA Review – Day 1”