How to embed a Canvas app into a CE form, pass the record id and update the CE record.

The requirement: Allow a CE user to update marketing consent and to provide guidance and logic around the process, this app is the basis for the latter.

Solution: This could be achieved using a custom webpage, or possibly a Dialog (deprecated soon), but the latest recommended approach is to use a canvas app embedded within CE, so here are the steps to achieve this;

Note: this screenshot/app was to prove the process works so has some random fields in it, ultimately there would be a lot more to it with extra logic.

  1. Create the connection to D365
  2. Browse to Apps and Create a new blank Canvas app
  3. Insert a new Form (Edit)
  4. Select [Data Source] and Add new, select your connection to D365 from earlier
  5. Choose the appropriate D365 environment
  6. Select the [Accounts] table and [Connect]
    • This will add some fields to the Form for you and is where you can select the ones you want/don’t want, format them/rename them, change the colours etc.
    • The blue header/footers in my example is a [Label], white text, blue background, the colour code is #3B79B7 which matches the CE UI theme
    • Rename the Form in the left panel from Form1 to [AccountForm]

  1. Next, you need to update Form to take an input parameter with the ID of the CE record which we will pass in further on, on the Form, select [Advanced], then [Item] and enter
    • LookUp(Accounts, accountid= Param(“ID”))
  2. Next insert an Icon – [Check] so that we can Submit the changed data back to CE, go into Advanced on the Icon and Update the OnSelect to;
    • SubmitForm(AccountForm)
  3. Save and Publish the app
  4. It should now look something like this, depending on the field types you select, I added a footer with the CE ID value displayed to check what was passed through.

  1. Browse to then Select [Apps] from the left menu

  1. Click on the ellipsis of the App, and make a note of the Web Link from the [Details] Tab. It will look like this –<AppID> make a note of this APPID for the steps below.
  2. Next is the CE components, add a new HTML Webresource and paste in the following code replacing the <AppId> with the one you recorded previously.
    • Set the width and height to your App sizes, taken from the App settings page.

  1. Open the [Account] entity form, Add a new Tab, Insert a new Web Resource onto it, select the web resource that you created in the previous step and set the following parameters;
    • Display Label on Form= false
    • Number of rows = adjust depending on the size of the App
    • Scrolling = As necessary
    • Display Border = false
  2. Save and Publish
  3. It should look like this once it’s finished


Where does CE PSA fit if I have Finance and Operations?

Updated last: 23/12/2018

This is a live blog post that will be updated with changes that are applied to the application – I’ll also update it with input from the community too. 

Right, I thought it’d be best to write a quick post on this topic as it is a question I receive quite regularly which is along the lines of…. “Hey Will, I see you’ve been working on Customer Engagement PSA – I don’t really understands how that would fit in with an organisation that has Finance and Operations system or at all”.  Then I take a deep breath and I say something along these lines…

(There are a few version of this response depending on what the business does)

PSA flow:

What we must remember is PSA is there to ultimately help the prospect to cash process, but hey we hear and read “Prospect to Cash” thrown around a lot and it doesn’t help explain anything, what I mean with this is as follows;

  1. the ability to turn someone you may have been in contact with to a Lead
  2. then qualify said Lead to an Opportunity
    1. During the opportunity process you will start, hopefully, creating a proposal and to really provide a precise as can be quote it is best to create a project with a thorough work break-down structure along with associated costs (expenses, role costs etc.) then to import this structure along with associated costs into the contract to provide a quote.
  3. Submit the quote to the customer and hopefully mark it as won – or maybe you may have to create another until you ultimately, hopefully, win
  4. The quote then turns into an Order/Contract with an associated project and all this richness can then be synced across to Finance and Operations – the contract will be pulled across along with the associated project details; project name, project contract associated, actual start date, work breakdown structure (if you’ve assigned resources then these can be brought across too) etc.

Where to place your personnel in a PSA & FinOps stack implementation:

Now the more interesting piece is where do you ask your employees to enter their Time and Expenses, where do you ask the Project Manager to carry out their tasks and where do you ask the Resourcing Manager to sit?

Now we must remember PSA – IS NOT A FINANCE SYSTEM, IT IS NOT TRYING TO BE A FINANCE SYSTEM, IT’S PURPOSE IS NOT TO DEAL WITH ANYTHING RELATED TO ACCOUNTING AND FINANCE, the purpose is to provide a buffer between account management and back office tasks such as the accounts department and to provide more granularity to items such as quoting (remember this is from a perspective when Finance & Operations exists as part of the implementation).

However, what it does do well is to provide the ability to price up quotes thoroughly thanks to this project creation functionality and it also performs some project processes well that can then be handed over for further processing.

Now let’s take a quick dive into where to place the Project Managers, Employees and Resourcing Managers.

Employees– now, personally, as an employee I prefer the user interface in CE  for entering Timesheets and Expenses rather than Finance and Operations – it is more aesthetically pleasing. However, there are limitations around expenses – there are no expense policies out of the box so this would need to be provided via customisation.

Along with other workflow requirements, and let’s face it expense workflows (from my experience implementing systems, especially in global systems) can be incredibly complex which will also be better suited for Finance and Operations as PSA only allows one level approval when in reality multi-level and conditions are required.

PSA does have the ability to bring in the hours you entered last week, or the appointments/projects you’ve been assigned in the resource scheduler but Finance and Operations allows this too.

What I’m getting at here is it is best to stick with Finance and Operations and if you wish to make the user interface more kinder on the eyes then use the mobile application functionality or throw together a PowerApp.

Resourcing Manager– now this is where I lean towards PSA, as long as you sync proficiency models, skills, characteristics, roles, cost prices, sales prices etc. between Finance and Operations and CE PSA (or if you’re company is using talent then have a network of the three Talent>PSA>FinOps) then I much prefer the Scheduling board within PSA and the way you submit requests to be fulfilled. Look at the screenshot below and how glorious it is, colours, pictures, charts – PSA has it all (you can even use the map functionality- living the dream)!

Project Manager– now this depends on the organisation, PSA allows the PM to manage their project team, monitor cost absorption (effort tracking as well), look at project estimates, submit resourcing requests (all this also exists within Finance and Operations)- but if you want your PM to also invoice clients, perform a more advanced level of WIP adjustments then this role will suit Finance and Operations.

Also the dashboards are not that brilliant in PSA – yes you can use PowerBI embedded functionality but Finance and Operations has brilliant out of the box reports, as well as enhanced areas such as the Project Manager Workspace (provides an overview of their project related activities as well as allows them to initiate their most frequent tasks) as well as PowerBI integration – soooooo…..

General Finance points related to PSA functionality: PSA does let you push through flexible journals, you can export actuals (or integrate them), you can adjust actuals (as well as few adjustment histories) and you can invoice through funding sources and billing rules (not as advanced as Finance and Operations) set out on the project contract.

Important to note that there is no out of the box functionality to tie Purchase Orders to projects, thus this is not wrapped up and summed into items such as const consumption etc. a journal can be used for this in the mean time but creating the PO in FinOps and then pushing that across as a journal to keep track in PSA may be one route (dependant on if your PMs sit there if not it really does not matter). Furthermore to this there is no commitment or encumbrance accounting to keep track of the financial health of a project with regards to Purchase Orders.

Another key part of project management is budget control. Unfortunately there is no budget control that sits within PSA only a cost consumption meter so this will have to be validated/tracked through Finance & Operations but the validation will only occur post transaction if you choose to leave T&E within PSA (not a wise move).


So let’s conclude – PSA DOES HAVE A FIT within the full suite of Dynamics 365 and for organisations that uses both CE and Finance and Operations if it is used for it’s intended purpose which in my eyes is to assist with quoting proposals and assisting with some of the non-accounting project processes to allow that smooth transition from sales to delivery.

And one more thing….. if the company DOES NOT have finance and operations but another Accounting system that does not include project management and they also require a sales system then PSA is a great fit!!!!


Two-way Azure Plugin Walkthrough

My first blog, so go gentle 😀


When you’re calling external integration services and you’re using an enterprise service bus, you need to send a message with your CRM data to the service bus (obvs!). But in order to be able to use the built in behaviour of a crm plugin (rollback in particular) you’re going to need to run the plugin synchronously so that the user knows a problem has occurred. If you use the OOB plugin then it only works Asynchronously. Luckily service end points are baked into the CRM infrastructure, so we can get a leg up on passing remote execution context to a listener. That can then call the integration service and, should it fail, return a value to the plugin so it can respond accordingly.

The blog is a technical walkthrough of the steps to accomplish it. Enjoy!

D365 Social Analytics Solution

As promised! Demoed at our D365 Saturday Summer Boot Camp session on Replacing Dynamics workflows with Flow.

This solution gathers tweets matching a specified hashtag saving them into a custom entity in Dynamics. A second flow then uses the Cognitive Service api to extract useful information from the tweets such as sentiment, key phrases and also translate the tweet if it’s not in English. This blog post contains the two flows as well the solution used in Dynamics with brief instructions on how to put everything back together


Dynamics solution

Contains a Social Analytics custom entity with some magic in the background!

Flows (Gets Tweets matching hashtags and creates records in social analytics entity) ( On create of a record in the Social analytics entity, use Text API to get sentiment, translation if not English, key words and update back into Dynamics)


Install the unmanaged  or managed solution into your instance which ever floats your boat ?.

Text Analytics API Key

You will need an azure subscription on with a Cognitive Text Analytics API service .You can get a trial API key with t 5000 executions for 7 days ( A free azure subscription will not limit you to the 7 days). Go to

Make sure Text Analytics is selected and hit Get API Key – Choose guest and get started.

You should eventually end up with the your API key and endpoint as shown in the image below which will be needed later on in the flow.

Social Analytics Flow

Head to your flow environment Go to My Flows , you should see Import in the top right, hit that . Upload  and import the flow You will need to fix the connections to your Dynamics instance. For Text Analytics, select “Select during Import” , Create a new connection, search for Text Analytics, select it and enter one of your Keys and your Endpoint URL. Come back to the import screen, refresh the list and select your new Text analytics connector. Do the same  for the Translator connection, named “Microsoft Translator” you shouldn’t need an API key for that. Once all the connectors have been fixed import the flow.

Once complete you should be able to see the Dynamics Social Analytics flow. Edit the flow and point both the Dynamics triggers, at the start and the update action all the way at the bottom to your instance by clearing out the org name, selecting yours and then the Social Analytics entity provided in the installed solution.



Get Tweets Flow

Import flow. Fix the connections again by adding a twitter and your Dynamics connections.After upload , you will need to fix the create Dynamics record action at the bottom of the flow as before. Replace #D365Saturday to your favourite hashtag and bob’s your uncle, you can duplicate this flow if you wish to track multiple hashtags.

Dynamics 365 Saturday – Dublin 2018

The Dynamics 365 Saturday 2018 took place in Microsoft Dublin (One Microsoft Place) and was hosted by Janet Robb and her Team. Congratulations on Janet for a great work on organising such well-structured event.

Lots of cool sessions provided, as well as workshops for PowerApps and CRM for the ones who were interested.


Even though I’m not a Dynamics consultant, to me as a SharePoint/Office 365 Consultant, it was very cool to see how the same stack of products (Power platform + Azure) that we use on top of SharePoint/Office 365 is been adopted in the Dynamics Community as well. As mentioned on the keynote, for all D365 specialists it’s been a constant work to keep up to date with tons of new features been released (I can assure that for Office 365 as well), and an event like this helps to connect the community and to get a summarized overview of what’s been there in the market.

Special thanks to our Dynamics Guys who came from the UK and smashed in their presentations:

Chris Huntingford – Dynamics 365 for Marketing

Kylie Hill – My Favorite new D365 Features

It was a pleasure to meet those legends in person.

Also, the interaction from the community posting and sharing content and pictures on social media (Hashtag #365SatDub) was really nice, cool to see such engagement and nice pictures from everyone on Linkedin and Twitter.

Looking forward to the next #365SatDub!!

Can’t Associate Existing Contacts to an Account in the D365 UCI? – WHERE IS THE DAMN BUTTON??

Don’t feel like the emotional post? 😀 😀 FIND THE SOLUTION HERE!!

Recently I was doing some config. within Dynamics 365 for a customer that was keen on using the UCI (Unified Client Interface).  I’ve done a load of demo’s for this type of thing but never actually helped configure for a live implementation. To be deadly honest, I had to change my mindset a bit about how I designed things.

After a few hours of build i ended up setting up a little training solution that allowed users the ability to associate existing contacts to an account. A pretty straight forward N:N relationship on the account form showing the associated contacts that had been trained and the internal users that had actually done the training.

I was happy with the setup but when it came down to testing, something weird happened… There was no button available on the sub grid that allowed me to associate an existing record. The Add Existing User button was there, but no “Add Existing Contact” button 🙁 

I checked if it was working in the Web refresh… Lo and behold, i could work just fine! No issues with adding existing contacts to an account. 

I tested out different views and still no luck I even tried a 1:N relationship to Contact and it only allowed me to create a NEW contact rather than add an existing one. 

After a bit of searching… I found the one solution that worked! THANK YOU to the Joel THE TIP OF THE DAY team for this post! you saved me a TON of time. This could have been a rabbit hole. Also Scott, your Ribbon Workbench comes to the rescue again! Legends!


Skills for the PowerApp developer

It seems to me that PowerApps will prove to be a game-changer by enabling businesses and organisations to build bespoke apps designed to meet very specific needs.

The curious thing about PowerApps is that the product is pretty well where it needs to be as of today but the major blocker for a global revolution is that there simply aren’t enough people out there with anything like the skills that they would need to be able to build robust business product.

So let’s assume that you can’t buy in PowerApps skills or maybe that you have some but need to grow some more.  What would you be looking for in an individual to identify them as a potential PowerApps developer?  In this article I’m going to outline some of the skills that I would be looking for when identifying candidates with the potential to be high performers.


It feels kind of strange to start with a product rather than personal skills but in this case the Excel formula structure and Excel cell construction is so closely related to that of PowerApps that is the number 1 skill.

The Excel and PowerApps teams work closely together so that any new formulas created are aligned to each other.  With this in mind this also opens the door to the many years of formulas created by individuals within excel that can theoretically be borrowed or referenced to enhance a PowerApp.


PowerApps is the product that is the most mathematical that I’ve ever seen.  Variables can be easily created that can be used in an algebraic fashion.  X and Y properties exist to govern the position of everything that you see on a screen.


You need to be able to consider your products from the perspective of other users.  If people don’t like your product they won’t use it, and you should be aiming for them to love them.


To my mind there are 2 kinds of logic.  Firstly, the more mathematical/excel based ‘If X=1 to this otherwise do that’ and secondly there is the type of logic where you put yourself in the shoes of a user or administrator and be able to see whether or not a form (as in business world this is the most likely application) has a logical flow.


Having an eye for design is a skill people have to a greater or lesser extent.  To be fair it doesn’t come naturally to me, but I do know that from making lots of products some designs work better than others and it is a skill that can be learned.


PowerApps won’t go to you, you have to go to PowerApps.  If you create a blank app it will stay blank until you do something.  Additionally, many technical solutions may require techniques that feel like work-arounds mainly because the problems you have been facing haven’t been faced before, so looking them up on Google won’t necessarily yield any results.

Lifelong Learning

The product is ready, but is changing all the time.  Good sources for keeping up to date are twitter and the PowerApps blog, but even the latter tend to focus on ‘big’ updates whereas some of smaller adjustments can still be game changers.  Keep up with it.  I’ll be honest in saying that there are times when staying at the cutting edge can be difficult to manage versus traditional tools and skills that stay very similar over long periods of time.


Some problems will require high levels of determination to find the exact syntax you need to solve your problem and when those fail you may need to pull back stick your head up and work out if there ways around the problem or if the items is even needed (i.e. do you really need to collect the data at all or is it a nice to have)


Not necessarily my forte, but patience may be required of yourself as you may not have the skills that you need at your fingertips and similarly the same may be true of those around you.  You’ll also need a level of patience on the part of your sponsors or users.  I can almost guarantee that unless they are very familiar with digital form building you may produce a product to the exact specification requested but nevertheless you, and they, know that it’s not quite right and that adjustments, sometimes significant may be required.

Use the community

The PowerApps community at this stage is currently populate by a relatively small but passionate group of individuals building highly imaginative solutions designed to stretch the product.  Make use of these by joining, follow people on twitter posting using the #powerapps or @PowerApps references.  By all means take a look at my youtube channel and don’t forget to join which contains a PowerApps bank that you can make use of once you sign up (for free).

Go on a course

Personally, I’m quite happy with an online course as typically these are completed over a longer period of time which for me is a better way of allowing the learning to sink in.  The best single free resource is where DAT207x is a very useful starting point.  You can search up courses run in a classroom setting, but you will need to ensure that you invest time in utilitizing the product one you’ve completed it as otherwise you’ll lose your knowledge quite quickly.

Concluding remarks

This article was intended for hirers or individuals trying to make some sense as to the range skills needed for PowerApps excellence.  Hopefully, it isn’t too daunting.  Whatever you do, start small but build usable solutions.  This particular tool offers us astonishing scope for us to run our businesses in efficient ways and the more we can grow as a community the closer we will all get to a culture of efficiency the impact of which may be widespread, more operations, better scheduling less wastage all by putting the right information in front of the right people at the right time.



Dynamics 365 User Group – Birmingham – 17 May 2018

Recently I had the pleasure of presenting at the D365 Birmingham User Group Meeting. Thanks to everyone that attended. Was really fun and I learnt a whole lot. For those of you that haven’t been to one of the D365UG meetings, and if you are utilising Dynamics 365, I suggest that you join and get involved.

I had the pleasure of following Julian Sharp, an absolute legend in the D365 world and a brilliant trainer whose focus is “Helping organisations make the most of Dynamics 365 Customer Engagement through advice, optimisation and training”.

Julian gave a great presentation on the importance of Dynamics 365 Customer Engagement exams and as well as how to prepare for them and how to study. You can follow Julian on twitter using this handle: @Julianatvigence or check out his blog here for some really useful information.

My presentation was focused on why brand perception is so important within a business and the ability to generate more meaningful conversations with your customers utilising Dynamics 365 Customer Engagement.

This presentation was a “Spin Off” of the one I did at the D365 User Group Summit event. I only used Microsoft Social Engagement as the channel of interaction rather than use a load of channels. More information regarding this session can be found in my next post (Awaiting Hyperlink).

Just a quick summary of what the User Group is all about… it’s not a sales pitch for Dynamics, but more of a community lead initiative that enables the community to help and assist one another regarding all things Dynamics 365 related. There is a big mix of Dynamics 365 customers, Partners, ISVs and even Microsoft guests.

I’ve found it massively useful because the people part of the community just want to help and share info. It’s a super relaxed environment that promotes learning and development. To find out more and to even register, follow this link and get stuck in. There are User Group chapters popping up all over the place. Hope to see you there.

Follow the Dynamics 365 UK user Group on Twitter using the following handle: @CRMUGUK

“UNEXPECTED ERROR” on Record Creation / Update in a Workflow

I’m going to share something life changing with you right now. Perhaps I’m the only one that ever experienced this… who knows, but I thought I’d share it anyway.

Have you ever created a workflow and added the “Update / Create Record” function? Have you ever created an “Automated Record Creation Rule” and added the same function? Have you ever received the below error? I’ve found that this generally happens on the Case entity…

WELL… If you have ever encountered this delightful little issue, then you are in the right place. After beating my head against a wall, I discovered that this appears when you activate and publish the Knowledge base functionality to the associated entity… This is why it was happening on the case record.

To resolve, simple pop into the relevant entity and disable the KB functionality on the forms.

The thing that made me very sad was that I discovered I needed to disable this on all the forms, not only the primary form. This may be an issue if you have a load of different forms.

Once I had disabled the KB functionality I could set the update fields in the case entity.

Once all your updates are made, simply go back into the case entity and re-enable the KB functionality J

I hope this helps someone because I fought for a while to get this right and I couldn’t find a load of stuff on the web.

Dynamics 365 Customer Engagement Platform Updates and Insights

Having just come back from an amazing time at Extreme365, I have had some time to digest and consider the content and discussions from the event and here is a brief write-up of my thoughts on the announcements and outcomes. These thoughts are my own and are premised around the v9.0.2 release of Dynamics 365 Customer Engagement (CE).

To start with, if you have not seen already, Microsoft have rearchitected the way Dynamics 365 CE is delivered. Traditionally the Dynamics 365 CE team hosted their own infrastructure and were responsible for this. Since December 2017, the infrastructure has all been moved to, and is running off, Microsoft Azure! This is a significant change as it affords the reliability, performance and scalability of Azure and removes the dependency on the Dynamics 365 CE team of having to maintain their own infrastructure. To give you an idea of how things have changed, consider the following:

The above represents the ‘old’ way of doing things where the Dynamics 365 CE team hosted their own infrastructure. The below represents how things look now that the infrastructure is being hosted by the Azure team:

You will note that most things have changed subtly but you should see that there have been 2 fundamental shifts:

  1. The xRM platform now underpins the entire Dynamics platform and the CDS and PowerApps platform (they have been unified and run off the same architectural designs)
  2. User interfaces have been consolidated in a presentation layer at the top of the stack and now have a single development base that is surfaced across multiple devices simultaneously

A number of people have been asking about why v9.1 wasn’t released in April and the reason is above. The platform changes meant that the timelines for delivering new functionality were too tight and this resulted in the functionality being pushed into a future release. That being said, the new architecture means that the Dynamics 365 CE platform is very easily able to embrace change and it was confirmed that updates to the platform can, and will, occur on a weekly basis. These updates will be more technical in nature and will represent the Update Rollup (UR) concept that we are used to today. Minor functionality updates will be delivered through updates to Microsoft-managed solutions such as Field Service and the timelines around these are monthly as a guideline because it depends on the velocity of the specific product teams and the requirements being realised from market requests. Major functionality updates are still being planned on a twice yearly basis as is the case today. One other nugget on this front is that Microsoft are breaking compatibility with the v9.x release. This means that when v10 is released in the future, any organisation wishing to upgrade to v10.x, will have to include an additional step by upgrading to v9.x first and then again upgrading to v10.x

One other significant change to Dynamics 365 CE, now that the CDS and Dynamics 365 CE share the same xRM framework, is that solutions have become more important in terms of the way the functionality is delivered. Below is a representation of the way in which the changes have been delivered from v8.x and now in v9.x:

Basically what has happened is that the core solutions have been split out so that smaller sets of functionality can be released more rapidly without the need for major releases. Dependencies on system components have also been revised to try and enforce the licensing model more efficiently amongst other things. A good summary video of these changes is available here: Also worth noting is that Dynamics 395 v9.0.1 has been running on the CDS / new Azure xRM framework since December 2017. Since that date, the telemetry on the new platform has indicated that a general performance increase of between 5% and 20% is being experienced between v8.2.2 and v9.0.1. One other thing to take note of is that the new solution architecture will enable solutions and plugins to be rolled backed! Versioning here will obviously be important but this will be a major new capability in terms of release planning for customers. Please note that the instance structure is also changing. Going forward, there will be the following instance types: Production, Sandbox, Preview and Developer! Developer instances will be free but restricted to 1, maybe 2, users. These Developer instances will start as plain CDS instances, and will expand into the full ‘CRM Prime’ version by the end of the calendar year.

Most of the changes released as part of v9.0.2 were technical in nature so I will summarise some of the major technical ones below:

  • Native connections to CosmosDB are available
  • The framework for xRM –> xRM is in place. This will facilitate Dynamics 365 CE instance to instance operations as well as Dynamics 365 to CDS operations
  • The web api has 99% parity in terms of functionality with the SOAP endpoint
  • Plugin import behaviour is being enforced as per the documentation:
    • A major or minor version can add or remove plugin types
    • A build or revision updates can only add to the plugin type count
    • In place updates can only add to the plugin type count
  • Several updated Dynamics 365 CE Nuget packages have been released including CI/CD packages
  • The Flow options from Dynamics 365 are running on the same infrastructure as LogicApps and will receive the same features and scalability
  • A dedicated team is now looking after the developer tools and extensibility for both the xRM and CDS frameworks
  • Release notes will be included from UR level up. Microsoft are looking at including release notes on weekly drops but they don’t want to slow down the cadence of the releases
  • Since v9.0, 10 major features have been released
  • The Office 365 Admin Portal is going to become the configuration hub for Dynamics 365 CE and CDS. This includes solutions, applications, backups and updates. The old admin experience directly through Dynamics 365 CE and the Settings -> Customisation experience is being retired
    • CDS databases are going to load in the organisation browser through the portal. You can connect to these instances like normal Dynamics 365 instances
    • Currently a CDS instance is separate to a ‘normal’ Dynamics 365 instance. Hooks are available currently to facilitate Dynamics 365 -> CDS operations but by August 2018, a ‘normal’ Dynamics 365 instance will be able to be deployed on CDS infrastructure, negating the need for the hooks
  • Task flows are being positioned as the replacement for dialogues
  • The Xrm.Tooling functionality has had a large amount of updates including:
    • A new property to skip discovery which assumes that the connection credentials are correct and can save a quarter of a second on each connection
    • Improvements have been made to the oAuth authentication mechanisms, saving an additional quarter of a second on each connection
    • Caching has been reworked to speed up the connection and transactions in general

Finally, there has been a huge amount of functionality released on the new Common Data Service (CDS) platform which is shown below:

While the scope and in-depth features are beyond the remit of this post (see a complete write-up here:, there is one important point around the types of apps that can be created.

Canvas apps are usually targeted at highly customised roles – or task-specific experiences that can pull in and mash up multiple data sources from virtually anywhere. Customised user experiences help make apps easily approachable so that users can jump right in without needing any/much training. This style of building provides pixel-perfect design control over the screens of your app, letting you create rich custom UIs in the WYSIWYG studio as follows:

While canvas apps start with the user experience, model apps start with data, relationships, business processes and forms. PowerApps then renders the user experience automatically based on the declarative model, creating the appropriate visuals based on device, form factor and even things like the assigned role of the app user. If you need to add a new field to your forms, just modify the entity form and it automatically starts to show up in all apps that use the updated form. Model-driven apps are great for apps with lots of forms and many possible user scenarios being required. Model apps are also how Dynamics 365 surfaces its apps and provides direct hooks into the customisation experience we have become used to, as follows:

Your app users will find both canvas and model driven apps in Initially mobile clients for canvas apps and model driven apps will remain separate, but this will change later in 2018. Also, don’t forget that the consumption of PowerApps does require a license so they are not intended for users outside of the organisation.

I hope the above has been useful and make sure to check out the release notes for v9.0.2 if you haven’t already done so.

Future Proofing your Implementation and Configuration – Part 3 – The Configuration Question

In part 2 of this 3 post series I spoke about the Microsoft and how you are able to keep up to date with what is being released, so that you don’t end up building something into your Dynamics 365 implementation that is going to be added in a next release. In this post, I am going to talk about why it is important to carefully consider the use of custom functionality versus the use of out-the-box functionality when implementing and configuring Dynamics 365 Customer Engagement.

Why would we want to make our implementation of Dynamics 365 future proof? Well, there are loads of reasons.

  1. So that upgrades are smoother and less painful.
  2. So that customers can leverage other parts of the solution to support their business.
  3. So that Dynamics can be grown from both a functional and business point of view.

Essentially, Dynamics is used to solve more problems, which then increases user consumption and adoption.

So, I guess the million-dollar question is “Should we configure this or should we use what’s available out the box”? I have been working with Dynamics 365 CE (CRM) since version 3 and a lot of the time, in the earlier versions, we needed to configure stuff from scratch. There was a load of great functionality there already, but the previous versions were nowhere near where Dynamics 365 is today.

I remember spending hours trying to get past a problem without using loads and loads of code. This is partially because I am no developer. There was a huge reliance on form side scripting (pre-business rules) where setting things like field visibility or business relevancy required several lines of JavaScript, and this was incredibly Important because the experience of the user was at stake. The reason we tried our best not to code was because when the next release came out, there were always issues with certain bits of code not being supported and not working.

Now, for all my developer friends out there, I am not saying that there is anything wrong with coding at all. What I am saying is that the role of the developer has simply changed from when the previous versions of Dynamics were released. Before, functional consultants like myself were expected to code and write plugins, and if you couldn’t then you needed a developer with you. Now, this may not be the case. There is so much one can achieve with what is available out the box in Dynamics 365 that developers are focusing more on REALLY extending what Dynamics 365 can do.

So, back to my question….. Do we build it or do we use what is already available? Well, in my opinion, the answer is relatively simple. We use what is already available and extend through configuration, customisation and ISV solutions where the functionality we require is lacking. This approach really is in line with the Microsoft future proof strategy where the current functionality utilised within the Dynamics 365 CE framework is supported. Caveat: Yes, Microsoft do often deprecate functionality that is not widely utilised (Such as contracts).

Some time back I had a scenario where it was suggested to me that I did not utilise the standard Case entity and I was told that it would be better to recreate this functionality in a custom entity because it gave me more flexibility and freedom to do what I wanted. (Multiplexing rules aside) I didn’t agree with this. Why? Well, to recreate the functionality that existed in the standard case entity would have taken me more than 3 times the amount of time that it would have taken me to just do some basic config to support the main case entity that is already available in D365 CE. I would have to do all sorts of crazy stuff around routing rules, SLAS, Entitlements, Case Resolutions, Case Hierarchy and much more. It seemed that the right thing to do would be to supplement the case entity with some related metadata entities that enabled the user to lookup to various sub entities. This worked well because it also gave the users the power to maintain their own lookups.

The other thing that we thought of was that we couldn’t ad hundreds of fields to the case form. This would make maintenance and business rules a logistical nightmare. We ended up creating several sub entities for each case category and then just associated the sub entity to the case. This way the core case management functionality was utilised but not drowned with attributes. This also made upgrades MUCH easier.

Scenario 2 was a little different where I wanted to utilise the standard Contract & Contract lines entity in Dynamics 365 CE. I found that the functionality that I wanted couldn’t be achieved through utilising this entity set. One thing that really stood out was I couldn’t enable a contract to be associated to the Business Process Flow functionality, which was pretty important as far as the “Agreement – Contract” process was concerned. I actually ended up creating a custom set of entities and only ended up replicating a very small amount of the current contract functionality.

There are hundreds of examples of this type of thing that I could bring up at any one given point. One of the most talked about scenarios at the moment is “Will Custom Controls (CCF) replace web resources”. In many cases, yes! Check out this video for a bit more information.

Essentially the moral of the story here is that the requirement to configure the solution versus utilise what’s out the box is entirely scenario based. What I’ve found is that the more I utilise out the box functionality within Dynamics, the ore future proof it is. HOWEVER, this needs to be done in such a way that you don’t completely overuse the standard functionality to a point that it can’t be leveraged across the rest of the solution. The example in scenario 1 with the case management is a perfect example of using what’s out the box, but knowing how to supplement with config.

When implementing Dynamics you need to be a bit like the precogs from the movie Minority Report. You need to look into the future and try to understand how your customer may grow as well as how the solution may grow in order to be more future proof.