Working with Opportunity Close table

I’ve recently had the experience of working with the Opportunity Close functionality within Dynamics 365, and given what occurred, thought it would be useful to document this so that others are able to see this as well. There are many scenarios in which we’d use this, and being able to give a comprehensive solution to clients does make all of the difference!

There are three areas that I’d like to cover:

  • Working with Opportunity Close table
  • Challenges with data
  • Power Automate to the rescue!
  • Caveats

So let’s get started then!

Thanks to various members of the community such as Matt Collins-Jones, Andrew Bibby & others, who helped me along the way

Working with Opportunity Close

The Opportunity Close functionality within Dynamics 365 (& yes, I’m going to refer to it as this, rather than Power Platform) is used to provide information around why an opportunity is being closed. This is regardless of whether the opportunity has been won, or it’s been lost. It’s still quite important to track the information around it, so that companies can understand better how the market views the products it offers, how it stacks up against others, etc.

The default path in the system is to create a lead, and then qualify it. Qualifying a lead then automatically creates an opportunity record, which further information (quotes, etc) can be entered against. An account record (if company information is specified) is also created:

Updated Solution Release: Lead Qualification Version 2.0.0 for Microsoft Dynamics  365

On the opportunity record, users are able to show if it’s been won or lost by clicking an appropriate button on the toolbar:

Doing this brings up the Opportunity Close pane on the right hand side of the screen:

Now it’s possible to customise this screen. In fact, the screenshot above shows 3 custom columns that have been added to it already in the system I was in.

To do this, we go to customise the solution (in the Maker Experience), and add the column/s that we’re wanting to:

Next, we need to remember to add it to the form! Otherwise it’s not going to show up. If we’re wanting it to appear on the side bar, then it’s important to customise the ‘Quick Create’ form version, to make our customisations show up.

Note: We’re able to put conditional visibility of the column/s if we want to, based on whether the opportunity is won or lost, using Business Rules. I haven’t done so in this scenario, but you’re obviously able to do so if you want to

Remember to save & publish the form, and then it’ll display within the system for users. Brilliant!

Challenges with data

So we’ve gone ahead & created the custom columns, and users are actually using them to record data. Wonderful – that’s exactly what we’ve been wanting to achieve.

OK – let’s now review the data so that we can see overall what’s happened with our opportunities. Of course we’re wanting to do this simply & easily, so we’ll open an Advanced Find window, go to the Opportunity Close table, add columns from the associated Opportunity, and….hold on. Opportunity Close ISN’T displaying in the Advanced Find????

It’s just NOT there. In case you’re wondering if you saved/published things correctly, or forgot some system setting, stop worrying. It’s not you – it’s the system.

See, Opportunity Close, though a table in its own right, is a SPECIAL sort of table. It doesn’t show up, and can’t be directly queried. I know – frustrating. I felt exactly the same way.

On digging deeper into things, I found out that there’s actually an activity record saved. It’s possible to query against this:

However, and this is the BIG catch, it’s NOT possible to return custom columns when carrying out this query. The search will ONLY return the (system) columns that are present for activities. So this leaves us with a problem.

Essentially, though we can set up custom columns to track the data that we’re needing to, it’s not possible (through the front end) to query it. This sort of negates what we’re trying to achieve here overall, and is a pain.

So what’s the way round it? Well, it’s actually going to be Power Automate!

Power Automate to the rescue

In order to handle our issue, what we need to do is the following:

  • Add custom columns to the Opportunity table (these should mimic the custom columns that we’ve added to the Opportunity Close table)
  • Use Power Automate for automation purposes!

The first step is easy. We need to go & create custom columns on the Opportunity table. These WILL show up in the Advanced Find search. They obviously need to be the same as the custom columns on the Opportunity Close table. If we’ve used Choice or Choices there, point the Opportunity column to the same source (it’s a good argument for using Global, rather than Local, choice/s).

We then can go and create a Power Automate. This should trigger when an Opportunity Close record is created.

Note: For this, I’ve made it so that it runs under the user triggering the action, rather than a system account. This is to keep in line with licensing limits etc

You’ll then need to add a ‘Get Dataverse row’ step, and get the Opportunity Close record that has just been created. This is annoying, but for some strange reason the trigger doesn’t present the custom columns/values in the JSON that it returns. Hopefully Microsoft fixes this at some point, but for the moment, we need to work around it.

The last step is to add a ‘Update Dataverse row’. This should point to the Opportunity table, & we can simply map the values across (from the SECOND step, NOT the first one – VERY IMPORTANT).

Once this is all done, save & test it, and you should see it working. I generally don’t add the Opportunity custom columns to the form, but rather leave them for querying against.

Caveats

It’s important to keep in mind that when an opportunity is marked as either won or lost, it’s then closed, and changed to a read-only state. That’s how the system is designed to be, and makes sense.

However it’s ALSO possible to re-activate a closed opportunity, and then close it again. Ie a single Opportunity record could have multiple Opportunity Close records against it. This solution won’t handle this (it would need to be built out further – the Opportunity record itself will only show the values from the latest Opportunity Close action, so please do keep this in mind!

Have you ever come up against something like this? How have you handled it? I’d love to hear – please drop a comment!

Canvas Apps & Power Automates

So it’s been a busy few weeks here, which is why I haven’t really been putting up any articles. March/April is always a busy time for our family with stuff going on, and this year I decided not to push myself to get articles out, as otherwise I’d be running very low on sleep!

That being said, I’ve still had some great ideas about things that I’d like to share, and have been keeping a series of short notes for me to pick up. Today’s topic is one of them, which I think has been a major pain to anyone involved in canvas app development!

So, the back story to this is that we’re able to use Power Automate flows together with canvas apps. What I mean by this is that we’re able to directly trigger them from within the canvas app, rather than needing to do something like edit or create a record, and then have the Power Automate flow trigger from the record creation or modification.

There’s a specific Power Apps trigger that’s available within Power Automate exactly for this purpose:

When clicked, it gives us the trigger line in the steps as follows:

So what we’d do is within the canvas app, we would bind a button (or another control) that when selected, it would then go away & trigger the Power Automate flow. Great – so many different things that we can get to happen! One of the benefits of doing things like this is that we can then pass information from the Power Automate flow back to the canvas app directly:

This can then mean that the user can know, within the canvas app itself, that the Power Automate flow has run, and use data (or other things) that have come out of it.

OK – all good so far.

The main issue to date has been with deploying canvas apps together with Power Automate flows. See, as per best practise, we would create a solution, place the canvas app, flows, and anything else that’s necessary for it to work within it, and then deploy the solution to our target environment/s. And that’s where things just…didn’t go quite right.

Obviously within the development environment, the canvas app would be hooked up to the flows, and everything would work. Clicking the button would cause the flow to run, etc. User authentication would be in place (along with licenses of course!), and it was just fine.

But when deploying a solution containing canvas apps and associated flows between environments (regardless of whether it’s been manually deploying, or automated using a tool such as Azure DevOps), the connections to the flows would be broken. Ie, the canvas app would run, but the flows wouldn’t trigger. Looking at the connections in the canvas app within Studio would show something like the following:

All of the connections to Power Automate flows would show as ‘Not connected’. It’s not even possible to click the ellipse next to them and re-connect them – the only option available is to remove it from the canvas app!

So in order to get things working again, we’d need to do the following steps:

  • Open up the canvas app
  • Remove all connections to Power Automate flows
  • Add a temporary button, set it to be a Power Automate trigger
  • Click through all of the Power Automates needing to be connected (waiting for each one to connect, then go to the next one)
  • Remove the temporary button
  • Save and publish the solution

This, in a nutshell, has been a (major) headache. For example, I’ve been working with a solution that has over 30 Power Automate flows that can be triggered from the canvas app (lots of different functionality!). Each deployment has needed the above process to be carried out, which has usually added on at least an hour to the deployment process!

Now, this hasn’t been something that’s been unknown. In fact, the official Microsoft documentation noted the following:

So this is something that Microsoft has been well aware of, but it’s been a pain point that we’ve had to work with.

However, this has now ALL changed, which I (and MANY others) are really pleased about!

Microsoft has rolled out an update last month that means that canvas app connections to Power Automate flows will NOT break when they’re deployed across environments! This is such a massive time-saver, that I’m now trying to work out what to do with all of my free time! Only kidding…more project work will commence!

So what we can now do is take our solution, deploy it across the different environment/s that we need to get it out to (whether manually, or automated using tools such as Azure DevOps), publish the solution, and then everything works! Amazing!!

One small caveat though – to ensure that this work, you will need to go into the app, and re-publish it on the latest Power Apps version. This should of course be done in a development environment, and then can be exported and deployed as required.

Microsoft have also updated their documentation at https://docs.microsoft.com/en-us/powerapps/maker/data-platform/solutions-overview to remove the limitation text shown above. It’s a good place to keep an eye on changes that occur over time too.

This is definitely a welcome piece of development, and I know that we’ve been eagerly waiting for this for a while, and now it’s here!

PL-600: Microsoft Power Platform Solution Architect

Well, it’s FINALLY here. And by finally, I guess I’m saying that I’ve been waiting for this for a while? The PL-600 exam is the new ‘Holy Grail’ for Dynamics 365/Power Platform people, being the Solution Architect (3 star) exam. Ten minutes after it went live, I booked to take it, and four hours after it went live I sat it! (I would have taken it sooner, but had to have supper first, get the kids to bed, etc…)

The first solution architect exam that Microsoft has done in this space has been the MB-600 (see my exam experience write-up on it at MB-600 Solution Architect Exam). However with the somewhat recent shift moving towards certifications for the wider Power Platform, it was inevitable that this exam would change as well.

Interestingly enough, the MB-600 now counts towards some of the Microsoft Partner qualifications. I’d expect that when it retires (currently planned for June 2021), the PL-600 will take the place of it in the required certifications to have.

So, how to discuss it? Well, the obvious first start is to link to the official Microsoft page for it, which is at https://docs.microsoft.com/en-us/learn/certifications/power-platform-solution-architect-expert/. According to the specification for it:

Microsoft Power Platform solution architects lead successful implementations and focus on how solutions address the broader business and technical needs of organizations.
A solution architect has functional and technical knowledge of the Power Platform, Dynamics 365 customer engagement apps, related Microsoft cloud solutions, and other third-party technologies. A solution architect applies knowledge and experience throughout an engagement. The solution architect performs proactive and preventative work to increase the value of the customer’s investment and promote organizational health. This role requires the ability to identify opportunities to solve business problems.
Solution architects have experience across functional and technical disciplines of the Power Platform. Solution architects should be able to facilitate design decisions across development, configuration, integration, infrastructure, security, availability, storage, and change management. This role balances a project’s business needs while meeting functional and non-functional requirements.

So not really changed that much from the MB-600, though obviously there’s now an expectation for solutions to bring in other parts of the Power Platform, as well as dip into Azure offerings as well. Pretty much par for the course, in my experience, with how recent projects that I’ve been on have been implemented.

At the time of writing, there are no official Microsoft Learning paths available to use to study. I do expect this to change in the near future, and will update this article when they’re out. However the objectives/sub-objectives are available to view from the main exam page, and I’d highly recommend going ahead & taking a good look at these.

Passing the exam (along with having either the PL-200 Microsoft Power Platform Functional Consultant or PL-400: Microsoft Power Platform Developer Exam qualifications as well) will result in a lovely (new) shiny badge. Oh, we do so love those three stars on it!

As in my previous exam posts, I’m going to stress that it’s not permitted to share any of the exam questions. This is in the rules/acceptance for taking the exam. I’ve therefore put an overview of the sorts of questions that came up during my exam. (Note: exams are composed from question banks, so there could be many things that weren’t included in my exam, but could be included for someone else! ). I’ve tried to group things together as best as possible for the different subject areas.

Overall, I had 47 questions, which is around the usual amount that I’ve experienced in my exams over the last year or so. What was slightly unusual was that instead of two case studies, I got three of them! (note that your own experience may likely vary from mine).

Some of the naming conventions weren’t updated to the latest methods, which I would have expected. I still had a few references to ‘entities’ and ‘fields’ come up, though for the most part ‘tables’ and ‘columns’ were used. I guess it’s a matter of time to get everything up to speed with it.

  • Environments
    • Region locations, handling scenarios with multiple countries
    • Analytics
    • Data migrations
  • Requirement Gathering
    • Functional
    • Non-functional
  • Data structure
    • Tables
      • Types of tables
        • Standard vs custom functionality
        • Virtual tables. What these are, when they would be used, limitations to them
        • Activity types
      • Table relationships & behaviours
      • Types of columns, what each one is suited for
      • Business rules. What they are, how they can be used
      • Business process flows. What they are, how they can be used
  • App types (differences between them, scenarios each one is best suited for
    • Model
    • Canvas
    • Portal
  • Model-driven apps
    • Form controls (standard vs custom)
    • Form layout (standard functionality vs custom functionality)
    • Formatting inputs
    • Restricting inputs
  • Automation
    • Power Automate flows. What they are, how they can be used, restrictions with them
    • Azure Logic Apps. What they are, how they can be used, restrictions with them
    • Power Virtual Agents
  • Communication channels
    • Self service abilities through Power Virtual Agent chatbots. How this works, when you’d use them, limitations that exist
    • Live agent abilities through Omnichannel. How this is implemented, how customers can connect to a live agent (directly, as well as through chatbots)
    • Teams. When this can be used, how other platform abilities can be used through it
  • Integration
    • Integration tools
    • Power Platform systems
    • Azure systems
    • Third party systems
    • Reporting across data held in different systems
    • Dynamics 365 API
  • Reporting
    • Power BI. What it is, how it’s used, how it’s configured, limitations with it, how to share information with other users
    • Interactive Dashboards. What these are, how these are set up and used, limitations to them
  • Troubleshooting
    • Canvas app issues
    • Model driven app issues
    • Data migration
  • Security
    • Data Protection. What is it, where it’s set up, how it’s used across different requirements in the platform
    • Types of users (interactive/non-interactive)
    • Azure Active Directory, and the role/s it can play, different types of AAD authentication
    • Power Platform security roles
    • Power Platform security teams, types
    • Portal security
    • Restricting who can view forms
    • Field level security
    • Hierarchy abilities
    • Auditing abilities and controls
    • Portal security

Wow. It’s a lot of stuff. Not that I’m surprised by that, as essentially it’s the sort of thing that I was expecting (being familiar with the MB-600). I think that on a ‘day to day’ basis, I cover most of these items already, so didn’t have to do a massive amount of revision for items that I wasn’t familiar with.

From my experience in taking it, I’d say that around 30% of the questions seemed to be focused on Dynamics 365, with 70% being focused on Power Platform capabilities. It’s about what I thought it would be when the exam was first announced. Obviously some people are more Dynamics 365 focused, and others are more Power Platform focused, but the aim of the exam (& qualification) is to really understand the breadth of the offerings available.

I can’t tell you if I’ve passed it or not…YET!. Results aren’t going to be out for several months, based on previous experience with Beta exams, but I’ve got a good feeling about this.

So, if you’re aiming to take it – I wish you the very best of luck, and let me know your experience!

App Profile Manager

When going through a backlog of various items, I suddenly realised that although the App Profile Manager was released in September 2020, I hadn’t devoted any space to it! So I’ve therefore decided (finally) to do an article to cover it.

First of all, what exactly is the App Profile Manager? Well, it’s a (somewhat) new feature that never existed beforehand. Essentially, the Omnichannel Agent App window has a number of configurable items, such as tabs to load at start-up, etc. Trying to work out where the configuration for each item is can, at times, be slightly frustrating, and I (for one) can’t always remember it correctly! But there’s also more, as I’ll go into below…

So, enter the App Profile Manager. At the moment, it’s only able to be used for two specific standard apps. These are the Customer Service Workspace app, and the Omnichannel for Customer Service app. In the future this may open up some more, but we’re limited to these for the moment.

So what does it do? Well, it’s there to enable system administrators to add configurations to an app. Essentially, it’s focused on on giving users access to certain items & functionality within an app.

As Microsoft puts it, it ‘allows administrators to create targeted app experiences for agents and supervisors as an alternative to building and maintaining custom apps’. Wow – Marketing sure can come up with some interesting lines at times!

I can hear you asking ‘so why should we use it’? After all, customer support agents will just log into the app, for example, and see the interface. Why should we use this, when we can just use the Omnichannel Administration app to configure things.

There’s actually a really simple answer to this. See, if we’re carrying out the configuration just through the Omnichannel Administration app, this will be set company-wide. All users logging in will have the same experience. However, there are companies that, although it’s all based around customer service, will have different teams that handle different things, and want them to have different screen layouts. Perhaps they’re even a multi-national.

It’s exactly for this purpose that the App Profile Manager exists. See, using it we can set up different screen profiles, showing different tabs, having different notifications, etc. We then assign it users to it (unfortunately we can’t use a security group at this point in time). When the users log in, they’ll then be presented with whichever layout they’re associated with. We can create custom profiles as we need, to handle the business needs!

Right – enough of talking about the concept. How do we actually get to it? Well, we need to go to make.powerapps.com, click into the list of apps, and then select either the Customer Service Workspace app, or the Omnichannel for Customer Service app. Clicking the ellipse next to it will give us the option for the App Profile Manager at the bottom of the fly-out menu:

This will then launch the App Profile Manager homepage. Some nice information shown here, with even a link to a video that we can launch to see how to go about things.

On the left hand side, we can see the apps in place, along with the ability to launch directly into the different settings areas for them. This is all standard stuff.

The power of App Profile Manager really comes when we’re going into the App Profiles section. Here we can see all of the app profiles that exist in the system. The ones with padlocks next to them are default system ones, which we can’t modify. But the other ones we ARE able to change, as well as being able to set up new ones:

When we open up one that we’ve created, we can see how we can go about customising it. There’s even a handy little visual guide to help users understand what/where each section is:

We’re able to configure the following (per app profile):

Once we’re happy with the setup performed, we then need to assign users to the app profile itself. To do this, simply slick the ‘Assign users’ button on the menu bar:

This will open up the screen to add users to the app profile. We can easily select from existing users, and then associate them to the app profile:

And voila, we’re done!

Users will access the app in the normal way, either through launching it in the browser, or using their bookmarks. When they log in, they’ll be presented with the app profile that they’ve been associated with.

If a user doesn’t have an app profile associated with them, then the default system app profile will be assigned to them, and they’ll see that when they log in.

Note: Although the system doesn’t enforce it, you should ensure to only assign users to a single app profile!

So there you have it. A way to customise the customer service agent experience across a customer, to provide the best interface possible to them.

How could this help you with your own scenarios? I’d love to hear – drop a comment below to share.

Solution Dependencies & Management

Solutions are marvellous things. They enable us to be able to package up lots of components, and deploy them to different environments all together as one single package.

However, there have been changes over time as to how solutions are used. I’m not (for the most part) going to go into the Managed VS Unmanaged debate, which I leave to people who are more in the know….

Microsoft Dynamics 365 apps are installed using solutions. Third party apps provided by Independent Software Vendors (ISVs) also use solutions.

In Power Apps, solutions are leveraged to transport apps and components from one environment to another or to apply a set of customisations to existing apps. A solution can contain one or more apps as well as other components such as entities, option sets, etc. You can get a solution from AppSource or from an independent software vendor (ISV).

Custom development should also take place within a solution, to allow it to be deployed appropriately.

But it’s important to take a closer look at how solutions work overall, as we can be involved on multiple projects within the same environment. Not only that, some solutions may require other solutions to be present first, in order to actually work! A great example of this is Master Data Management (or MDM), which is where companies have a ‘backbone’ of data, which other parts of the system then hangs off.

To understand this concept better, let’s take a quick look at solution layering.

Solution Layering

Layering occurs on the import of solutions and describes the dependency chain of components from the root solution introducing it, through each solution that extends or changes the components behaviours. Layers are created through an extension of an existing component (taking a dependency on it) or creation of a new component or version of a solution

Managed and unmanaged solutions exist at different levels within a Microsoft Dataverse environment. In Dataverse, there are two distinct layer levels:

  • Unmanaged layer. All imported unmanaged solutions and unmanaged customizations exist at this layer. The unmanaged layer is a single layer.
  • Managed layers. All imported managed solutions and the system solution exist at this level. When multiple managed solutions are installed, the last one installed is above the managed solution installed previously. This means that the second solution installed can customize the one installed before it. When two managed solutions have conflicting definitions, the runtime behaviour is either “Last one wins” or a merge logic is implemented. If you uninstall a managed solution, the managed solution below it takes effect. If you uninstall all managed solutions, the default behaviour defined within the system solution is applied. At the base of the managed layers level is the system layer. The system layer contains the tables and components that are required for the platform to function.

The following diagram introduces how managed and unmanaged solutions interact with the system solution to control application behavior.

  • The system solution represents the solution components defined within Dynamics 365 or the Power Platform. Without any managed solutions or customisations, the system solution defines the default application behaviour. Many of the components in the system solution are customisable and can be used in managed solutions or unmanaged customisations.
  • Managed solutions are installed on top of the system solution and can modify any customisable solution components or add more solution components. Managed solutions can also be layered on top of other managed solutions. As long as a managed solution enables customization of its solution components, other managed solutions can be installed on top of it and modify any customisable solution components that it provides.
  • Unmanaged customisations. All customisable solution components provided by the system solution or any managed solutions can be customized in the unmanaged customisations
  • Unmanaged solutions are groups of unmanaged customisations. Any unmanaged customized solution component can be associated with any number of unmanaged solutions. These can be edited & modified, regardless of the environment in which they’ve been deployed to
  • The ultimate behaviour of an instance of Dynamics 365 or Power Platform application is the culmination of the system solution, any managed solutions, and any unmanaged customisations.

The official stance of Microsoft, according to its Application Lifecyle Management (ALM) documentation, is that unmanaged solutions are used for development, and that managed solutions are released downstream to further environments. For bespoke solutions, however, this may not fit, and an appropriate balance must be found.

Data ‘Backbone’ & Solution Dependencies

Given the way that companies are adopting Power Platform (and Dynamics 365, of course!) it’s highly likely that we will build out system structures that will form the backbone for multiple applications on an on-going basis. With this in mind, it’s appropriate to put in place proper planning for this, to avoid any issues that could occur in the future with appropriate system designs

Solution Dependencies

When creating system structures within an environment, using unmanaged solutions, connecting two (or more) tables together will create dependencies on each other. In simple terms, if we connect Table A to Table B, there’s a reciprocal relationship created back from Table B to Table A:

This happens even if Table A is in Solution 1, and Table B is in Solution 2. If they’re in the same environment (& both solutions are unmanaged), it will create the two-way dependency.

This will cause issues if trying to deploy each solution individually, and will fail on import, as the system will require all items to be available in the solution

Workable scenario

The way in which to handle the issue of solution dependencies is to ensure that the ‘master backbone’ of system design is created in the main development environment, and then to use that in secondary development environments as the core of additional solutions:

This is in line with the emerging recent Microsoft Best Practise information around solution management (which is likely to be moving towards having a single environment per developer, rather than multiple developers working in the same environment).

The steps for doing this are as follows:

  1. Main ‘core solution’ exists (as unmanaged) within the main development environment
  2. When a project requires this to build upon:
    1. Secondary development environment is created
    1. ‘Core solution’ is exported as managed from the main development environment, & imported into the secondary development environment
    1. Project work is carried out within the secondary development environment
    1. Once project solution is complete (or when appropriate for deployment), it can be exported from the secondary development environment
      1. If deploying directly from the secondary development environment to downstream environments, it should be exported as managed
    1. The solution should be exported as unmanaged, and imported back into the main development environment. This will not cause dependencies to be created with the ‘core solution’ in it

Note: The main ‘core solution’ should consist of the items that are needed for core system work. If additional items are needed for multiple projects to work off (eg Account Manager field), this would need to be added to the core solution, rather than the individual project solution/s, as otherwise there could be further issues downstream.

If the project is completed, but requires further work to be carried out later on (or development support), then the following should be done:

  1. Secondary development environment is created
  2. ‘Core solution’ exported from the main development environment as a managed solution, and imported into the secondary development environment
  3. Project solution exported as unmanaged from the main development environment, and imported into the secondary development environment
  4. Work and/or support can be carried out within the secondary development environment, and released appropriately

I’m expecting further information around this to be released by Microsoft in due course (I’m a little surprised there’s not more out there at the moment, to be honest!). It’s vital that we ensure that we’re working with solutions in the right way, to stop any issues occurring later on down the line.

Have you ever had a problem around this? Drop a comment below – I’d love to hear your experiences!

MB-910: Microsoft Dynamics 365 Fundamentals Customer Engagement Apps

So here’s the thing. There used to be the MB-900 exam, which was the Microsoft Dynamics 365 Fundamentals exam. This was aimed at people who had a small knowledge of Dynamics 365, and it was really the base/entry-level exam into the qualifications for it.

However, Dynamics 365 is actually comprised of two ‘parts’. There’s the ‘front office’ part that’s usually referred to as Customer Engagement (well, depending on how Microsoft wish to refer to it as, which can change from time to time!), and there’s the ‘back office’ part, which is the ERP side of things. This is the finance & operations sphere, where those functions take place.

The MB-900 was a slightly strange exam, in my opinion, because it covered both. There were questions around things like Sales, Customer Service, etc, but there were also Supply Chain Management questions as well, for example. Now I’m not saying that people shouldn’t know about both ‘sides’ of the equation, but people usually (for the most part) handle one or the other. It’s generally unusual to find someone knowledgeable about both.

Furthermore, if we take a look at the more in-depth exams in the MB range, we find that there’s a definitive split there. The MB-2xx series cover Customer Engagement, whereas the MB-3xx series covers the ERP side of things. So it’s definitely not the norm to have both sides included in a single exam.

Microsoft came to the realisation around this, and have therefore decided to update the Fundamentals space. In doing this, they’ve split things out. There’s the MB-910 exam (which is what this post is about), and the MB-920 exam, which focuses specifically on the ERP space. A good move, in my opinion..

The MB-910 launched this past weekend, and I took it around a day after it went live. Let’s go take a look at it, and recap my experience with it.

The official description of the exam is:

This exam covers the features and capabilities of Microsoft Dynamics 365 customer engagement apps.

Candidates for this exam should have general knowledge of or relevant working experience in an Information Technology (IT) environment. They should also have a fundamental understanding of customer engagement principles and business operations.

Taking it leads to the qualification for ‘Microsoft Certified: Dynamics 365 Fundamentals Customer Engagement Apps (CRM)’.

The description around the qualification is:

If you’re familiar with business operations, customer relationship management (CRM), and are IT savvy—either generally or through work experience—take advantage of this certification to highlight those skills. Validate your broad exposure to the customer engagement capabilities of Dynamics 365 to enhance your career journey.

People in different roles and at various stages in their careers can benefit from this fundamentals certification. Here are some examples:

IT professionals who want to show a general understanding of the applications they work with

Business stakeholders and others who know Dynamics 365 and who want to validate their skills and experience

Developers who want to highlight their understanding of business operations and CRM

Students, recent graduates, and people changing careers who want to leverage Dynamics 365 customer engagement capabilities to move to the next level

The official page for the exam is at https://docs.microsoft.com/en-us/learn/certifications/exams/mb-910 where it gives quite a good overview of things. Go take a look at it, and also take a look at the associated learning paths.

Once again, I sat the exam through the proctored option (ie from home). This is the way that I now usually take exams (even if I could go to an exam centre, I think that I’d be unlikely to, given the travel/time needed!). Checking in for the exam went without issues (the process definitely seems to be getting smoother each time), and I was ready to go within a few minutes.

As in my previous exam posts, I’m going to stress that it’s not permitted to share any of the exam questions. This is in the rules/acceptance for taking the exam. I’ve therefore put an overview of the sorts of questions that came up during my exam. (Note: exams are composed from question banks, so there could be many things that weren’t included in my exam, but could be included for someone else! ). I’ve tried to group things together as best as possible for the different subject areas.

  • Project Operations
    • Scheduling resources
    • Entering project time/costs
    • Skills
    • Roles
    • Different types of project costings
  • Customer Service
    • SLA’s, what they are, which ones to use
    • Omnichannel, including capabilities and channel functions/availabilities
    • Power Virtual Agents
  • Sales
    • Lead processes, deactivating & reactivating
    • Opportunity processes
    • LinkedIn Sales Navigator. How it interacts, which capabilities it has within it, how it works
    • Quotes. How they work, what’s required to handle them, document generation
  • Marketing
    • Website forms
    • Automation around responses
    • A/B testing
    • Event management
  • Field Service
    • Work orders
    • Route optimization
    • Scheduling boards
  • Document options
    • Attachments that users can access within the system, as well as outside of Dynamics 365
    • File collaboration tools, and integration with them
  • Timelines & activities
  • System currencies, default options, additional currencies, and updating them
  • Understanding different types of tables, and when you’d use each one
  • Reporting capabilities
    • How data is able to be reported on
    • Report Builder Wizard
    • Reporting on data held in Dataverse
    • Reports in dashboards
    • Usage of Power BI, including data gateways

I was slightly surprised with the level of detail in some of the areas. I wasn’t, for example, expecting the emphasis on Project Operations and Field Service that came up for me. Some of the level of detail seemed more fitting for an MB-2xx exam than this Fundamentals exam.

In a similar vein, I also wasn’t expecting Power BI and Power Automate so much. Perhaps that’s just my own perspective, though obviously with the Power Platform it would be there. However there is a PL-900 exam, around Power Platform capabilities, that I’d expect those sorts of questions to be in, rather than here in this exam.

Otherwise I think that it was generally on point for what I’d expect to find at this level of exam. The questions have definitely evolved over time, and I found myself giving more consideration to answers than I would have on the previous version.

It’s a good place to start for people who are looking to get qualified around Dynamics 365! If you do decide to take it, please drop a comment below to let me know how it was for you – I’d love to hear about your experience!

Finding Employment

I thought that, given it’s now a new year, this would be a topic that could be of use to people.
Maybe it’s making all those new years resolutions that fills you with thoughts of new possibilities, but it’s usually around this time that people consider what they want their year to look like, and whether to decide to move employers, or stay in the same place.

I frequently get messages on LinkedIn, as well as direct emails, from recruiters. What happens next usually seems to fall along the same sorts of lines. They try to get some information from me, promise me the world, etc. Usually they’d try to get me on the phone, whilst not really providing any information for me to go on, or showing why having a call with them would be of any value to me.

Together with the amazing Alison Mulligan, we’ve drawn up the below. Alison is not only a seasoned recruiter, she’s also another Microsoft BizApps MVP! It’s a topic that we’ve been discussing on & off over the last few years since we first met. Alison also does a ‘One Minute Monday’ quick tips session every week. I’d strongly recommend to go & check it out!

We both chat with lots of people, and thought that giving a view from ‘both sides of the fence’ would be helpful to others. With this, we’ve put the time into drawing up a shortlist of points that both sides might think to take into consideration. Our aim here? Purely to help out – we’re not getting anything for this at all.

Tips for people looking for a new position

Why use a recruiter? Isn't it better to apply for jobs · Ambition
  1. Ensure that your CV is up to date, with all relevant information on it. Include any professional qualifications, employment history, etc, & it’s laid out well. Personally, I’m a great fan of ‘Words in Tables’ by John Moon (https://www.jmoon.co.uk/index.cfm). Free registration (or an optional charitable donation – what better way to do good for yourself and someone else at the same time) on his site will give you a great CV template that will stand out from most others (I use it myself!)
  2. Think about what you’re wanting in a new position. Be comfortable with discussing these, as you’ll need to mention them to recruiters. They could include:
    • Salary
    • Benefits
    • Career progression options
    • Volunteering
    • Work/Life balance
  3. Ensure that your LinkedIn profile is up to date, with all relevant information. Include your qualifications as well as any other experiences. Use the space available – any good recruiter will read the information that you’re including, rather than just skim the first line. A good rule of thumb is to do at least two paragraphs for each position, detailing your achievements, & what you brought to the company. You can also use LinkedIn’s own 20 steps to a better profile
  4. Use the LinkedIn ‘About’ section to describe why you’d be an asset to an employer, your skills & expertise that you bring to the table, and what you absolutely enjoy & love doing. If you don’t know what you love doing, sit down and give it some thought – start with tasks that, when you do them, get you into a ‘flow state’ (as in time seems to pass quickly)
  5. Keep your overall career plan in mind – if you haven’t done that yet, then now is a good time to start.

Above all, if someone contacts you with a role, be open and honest about things, and if you feel it’s not appropriate, you can say so. Alternatively if you think that someone else you know would be suitable for the position, you can always recommend them.

Tips for recruiters

The Pros and Cons of Using a Recruiter - HR Daily Advisor
  1. Have a proper job specification available, listing out the required & wished for items. If you don’t have one, be open about what the role is actually supposed to be, rather than guessing at it. Or at the very least have a detailed view of the company and WHY they are looking to hire. If you’re speaking to someone with more than a few years experience in their line of work, be pro-active about giving the spec to them. They’re able to take an initial look & assess whether it’s appropriate or not in much less time than you (as a recruiter) might be able to.
  2. Ensure that you actually know the salary range for the position and are happy to share it. I’ve been approached multiple times with absolutely no salary information, and when it is finally available, it turns out to be half of what I’m currently on – this feels like a giant waste of time for everyone, recruiter included, as no matter how awesome the company or role, no one is taking a 50% pay cut (unless its to work with Elon Musk or Satya Nadella)
  3. If using LinkedIn to search for candidates, take a proper look at their experience & information. All too often we’re asked about Developer opportunities, when it’s quite clear that I’m not a Developer. Use the appropriate filtering tools/options available to return pertinent results. And, we know you are under pressure in terms of time, but if you spend five minutes reading our profile (particularly if we have bothered to make it as detailed as possible), you will get a 10x greater return than if you don’t.

One final thing to keep in mind, in general. If you feel that you’re being pushed into something, take a step back, and consider if it is indeed the right move for you. It could just be the way that it’s being pitched at you, but taking a few minutes to make sure you’re alright is very important. You could also consult with a mentor around it, who we’re sure would be only too happy to help you out.

Oh, and if you have any tips you’d like to share, feel free to post them below in the comments – we’d love to see them!

Omnichannel – Wave 1 2021

Today is a day that I’ve been looking forward to over the last few days. Leaving aside anything else that may be happening, it’s the day when the 2021 Wave 1 Release Notes come out! These cover the new functionality & features that will be released during the first half of 20201 for both Dynamics 365 & Power Platform.

The links are here:

There’s an amazing amount of functionality, but what I want to focus on specifically are the capabilities coming down the line around Omnichannel for Customer Service

As I’ve done before, I’m going to include the dates that are applicable (at this point in time) for each time.

Enhancements to existing capabilities

Embedded analytics for Chat and Digital Messaging

GA – April 2021

10 Great Google Analytics Alternatives

Traditional dashboards have limited interactive capabilities and provide a narrow view into the overall organization. Omnichannel’ s Embedded analytics for chat and digital messaging allows service managers to identify problem areas and opportunities to improve from historical data, along with rich slice and dice capabilities powered by Power BI.

With this release, the embedded analytics for chat and digital messaging allows service managers to understand how agents and queues are performing. The analytics provide trends based on problem areas and opportunities allowing the service managers to analyze the corrective measures they can take, provide appropriate guidance to agents, and improve the customer support experience. Key Insights cards provide a glimpse into the notable trends on core metrics and topics that are important for a supervisor to further investigate the analytics.

Enhanced supervisor experiences for operational monitoring of Chat and Digital Messaging

GA – April 2021

How Can I Use Microsoft SCOM for End-to-End Performance Monitoring – eG  Innovations

Supervisors need key metrics and channel-specific performance measures to take operational decisions to meet and exceed service-level goals

  • As contact centres deploy multiple channels to provide an omnichannel experience in customer service, supervisor can view and track relevant metrics for operational efficiency in the following ways:
  • Equip team leads to monitor channel-specific performance metrics to handle agents who are dedicated to a single channel
  • Enable senior team leads and service delivery managers to monitor All-up metrics across all channels
  • Capability to quickly switch between the views

Historical topic clustering for all channels

GA – April 2021

Topics | National Museum of African American History and Culture

Topics are automatically generated using AI to organize similar issues into groups. By aggregating metrics from issues grouped into the same topic, organizations get a full view of KPIs and metric impact for each topic. For example, organisations can view the average handling time, sentiment, and CSAT for a specific topic, and whether the topic is a key driver for any of those metrics.

Modern Administration Experience for Omnichannel Chat and Digital Messaging

GA – April 2021

Modern - Responsive Admin Dashboard Template by stacks | ThemeForest

With the modern administration experience, administrators can easily start the first chat conversation with only a few clicks and see the immediate value of chat conversation powered by Omnichannel for Customer Service. The modern administration experience is intuitive to follow and allows administrators to quickly understand and perform the configuration steps.

Introducing the first run experience to help administrators automatically set up the chat channel and start the first chat conversation. Also, introducing the modern administration experience to guide administrators to set up the end-to-end configurations in Omnichannel for Customer Service.
The key highlights of this feature include:

  • First run experience of chat channel
  • Streamlined and simplified administration user experience of work stream, queue, and global setting configurations for digital messaging channels

Omnichannel Voice Channel

At Ignite in September 2020, Microsoft announced the new Voice channel for Dynamics 365 Customer Service. The aim of the solution is to provide simpler administration & management experiences within the platform itself, rather then needing traditional cloud component integration complexities.

With the release of this, voice, SMS, and digital messaging channels, and a PVA-powered intelligent interactive voice response (IVR), real-time voice intelligence, and insights across all channels, speech-based self-service, and intelligent skills-based routing are all brought together in a single package.

This feature is currently in invite-only private preview, with general availability planned as part of the April 2021 wave

Call intelligence

GA – August 2021

What is call intelligence, and why should you care?

The transcript of a call and an in-depth analysis of a particular call recording can help an organization better understand how the engagement with the customer progressed and present opportunities for agent training.

Through historical analytics, supervisors will be able to drill into a particular call to view more details. Each call will include voice-specific metrics such as talk-to-listen ratio, talking speed and more. Supervisors can also see the detailed sentiment throughout the call, shown alongside the transcript for further analysis. This view helps supervisors better understand how the call went and identify the areas to improve.

  • This capability leverages the call transcription and sentiment analysis to produce the following metrics:
  • Talking speed
  • Switches per hour
  • Pause before speaking
  • Longest customer monologue

Call Recording

GA – August 2021

Call Recording | MightyCall

Customer service agents typically need to review phone calls with customers. Call recording allows agents to record phone calls between agents and customers. This helps the organization to revisit the interaction to better understand the customer’s issues in his or her own words and increase the possibility of resolving the customer’s problems or questions. Call recordings are also helpful for training scenarios where an organization can share examples of great customer interactions among the team.

Call Transcription and Realtime Sentiment Analysis

GA – August 2021

Jog.ai | Supercharge Your Call Notes | Automated Call Recording and  Transcription

Customer service agents often need to take notes while helping customers during a phone call. Call transcription converts a phone conversation into written words reducing the amount of notes an agent will need to take and helping with accessibility. Furthermore, sentiment analysis examines the conversation and identifies the general sentiment or “mood” of the customer like if they are slightly angry or very disappointed. Call transcription and sentiment analysis are both used by the system to proactively analyse cases and provide agents with suggestions to resolve the issue.

Call transcription converts a phone conversation into written words and stores them as plain text in real time as the call is in progress. Sentiment analysis, built on award winning AI, tags a sentiment on the top of a conversation, and is constantly updated as the conversation evolves.
Both call transcription and sentiment analysis are included out-of-the-box with no additional setup or configuration.

Consult and transfer

GA – August 2021

Voip Call Transfer - Voip Service - Voip Business | VoIP Business

Omnichannel for Customer Service offers customer service agents the ability to easily consult with and transfer calls to other customer service representatives and helps agents have a greater chance to resolve customer issues.

While on a call with a customer, an agent can put the customer on hold and consult with another agent or manager on an issue that requires specific expertise. issue perhaps one with specific expertise or a manager. Agents can also transfer the call to a specific customer service agent, which is also referred to as a warm transfer. In other scenarios, the agent can transfer the call to a queue from where it is routed to the best available agent based on rules configured by your business.

Direct outbound calling

GA – August 2021

Outbound Calling Strategy- the Best Way to Boost Communication

The ability of agents to contact customers via voice calling remains one of the most important customer interaction methods in Customer Service. Direct outbound calling enables agents to contact customers using our native fully integrated voice channel based on Azure Communication Services, where voice is just another channel for agents and supervisors.

Agents can contact customers using voice calling. Direct outbound calls can be initiated via click-to-call directly from phone number fields in the following:

  • Cases
  • Customer profiles
  • Call back activities
  • Ongoing chat conversations
  • Via a phone dialler

Outbound calls are displayed as conversations in conversation history contextually per case/customer and timelines. Supervisors can monitor outbound calls just like any other customer interaction.

This feature includes the following key highlights:

  • Fully integrated outbound voice channel without third party voice integration
  • Sample outbound voice channel configured automatically on voice channel provisioning.
  • Easy channel administration within the Omnichannel admin experience.
  • Outbound voice conversations are just another conversation type in Omnichannel.
  • Supervisors can monitor outbound calls from within the ongoing conversations dashboard like any other agent/customer interaction.

Embedded analytics for voice channel

GA – August 2021

How to Utilize Google Analytics to Improve Your Restaurant's Website

Traditional dashboards have limited interactive capabilities and provide a narrow view into the overall organization. With historical data, embedded analytics for voice channel empowers service managers to identify problem areas and opportunities to improve and provides rich slice and dice capabilities powered by Power BI.

Customer service managers or supervisors are responsible for managing the agents who work to resolve customer queries every day through phone channel. With this release, the embedded analytics provide trends over a period to understand how agents and queues are performing, so that service managers can take corrective measures, provide appropriate guidance to agents, and improve the customer support experience. Key Insights cards provide an “at a glance” view into notable trends on core metrics and topics that are important for a supervisor to investigate further in the comprehensive reports. Agent-focused views display core metrics to better understand the primary areas an agent worked in and identify opportunities for coaching.

  • With these views, supervisors can:
  • Monitor operational metrics, such as inbound calls, calls handled, abandon rate, average talk time, and average speed to answer calls, across channels, queues, agents, and topics
  • Monitor support quality through sentiment analysis across channels, queues, agents, and topics.

Intelligent voice via PVA and Azure Bot Framework

GA – August 2021

How Intelligent Voice Agents Can Replace Costly Contact Centers

With speech-enabled Power Virtual Agents, businesses can empower business users to build and update intelligent voice bots that use built-in natural language processing capabilities to engage conversationally with customers and provide personalized self-service always. Bots can be built once and deployed across messaging and voice channels for maximum efficiency and consistency. For more advanced scenarios, businesses can integrate bots built with the Microsoft Bot Framework to work on the voice channel.

With this feature, businesses have a familiar bot authoring experience for all customer service bots, across messaging and voice. Customers will enjoy with flexible, free-form service experiences, instead of inflexible menu trees. Bots can easily hand off the call to humans agents, with the conversation history and context gathered by the bot. This allows Omnichannel for Customer Service to route the customer from the bot to the best available live agent to provide a seamless, contextual hand off.
The key highlights of this feature include:

  • Enable Power Virtual Agents and Azure Bot Framework bots to provide intelligent voice bots on the voice channel
  • Support for built in dual tone multi-frequency (DTMF) as a secondary means to interact with the bot
  • Transfer calls to human agents with full transcript and context
  • Use bots for post-call surveys

Modern Administration Experience for Omnichannel Voice (Number Management)

GA – August 2021

Typically, customer service organizations must manually integrate standalone telephony and customer relationship management (CRM) solutions, which results in fragmented experiences and error-prone data integration. Administrators need to manage resources and phone numbers in the telephony provider’s app and manually bring over this information to the CRM solution. Very often, this setup process requires collaboration between business and IT administrators, adding delay to an already lengthy process. With the availability of Azure Communication Services, Omnichannel for Customer Service now offers native voice channel. This all-in-one solution empowers business administrators to independently deploy a telephony resource and acquire phone numbers in a few steps, offering a fast and consistent experience.

Until now, administrators created resources and managed phone numbers in a separate telephony application and then manually deployed the numbers in the CRM solution. The long-fragmented process is inconsistent and requires continuous maintenance to keep both applications in sync.
With the native voice channel, business administrators can deploy the telephony resource and acquire phone numbers without leaving the Omnichannel Administration app.

The key highlights of this feature include:

  • Telephony resource deployment using connection string or sign into Azure account.
  • Acquiring phone numbers of various types and plans.
  • Releasing phone numbers.

Modern Administration for Omnichannel SMS via ACS (Number Management)

GA – August 2021

Typically, customer service organizations must manually integrate standalone telephony and CRM solutions, resulting in fragmented experiences and error-prone manual data integration. Administrators need to manage resources and phone numbers in the telephony provider’s app and manually bring over this information to the CRM solution. Very often, this setup process requires collaboration between business and IT administrators, adding more delay to an already long process. With the availability of Azure Communication Services, Omnichannel for Customer Service now offers native new voice channel. This all-in-one solution empowers business administrators to independently deploy a telephony resource and acquire phone numbers in a few steps, offering a fast and consistent experience.

Until now, administrators created resources and managed phone numbers in a separate telephony application and then manually deployed the numbers in the CRM solution. The long-fragmented process is inconsistent and requires continuous maintenance to keep both applications in sync.
With the native voice channel, business administrators can deploy the telephony resource and acquire phone numbers without leaving the Omnichannel Administration app.

The key highlights of this feature include:

  • Telephony resource deployment using connection string or sign into Azure account.
  • Acquiring phone numbers of various types and plans.
  • Releasing phone numbers.

Supervisor monitoring and barge

GA – August 2021

Call Monitoring – Understanding this Tool in the Call Centre

Service managers are responsible for the overall quality of customer service and often need to observe customer service representatives while they are on the phone with customers. Omnichannel for Customer Service allows supervisors to listen in on phone conversations and join a conversation, if needed. This helps supervisors increase the likelihood of resolving customer issues, enforce proper business practices, and identify training opportunities.

When supervisors log into the application, they are provided a list of phone calls that are in progress. From the list, they can choose to join a call with the option to join anonymously as a hidden participant. If they want to intervene, they can join the call, referred to as “barging”, which then becomes a group call.

Topic Clustering for Voice

GA – August 2021

Topics are automatically generated using AI to organize similar issues into groups. By aggregating metrics from issues grouped into the same topic, organizations get a full view of KPIs and metric impact for each topic. For example, organizations can view the average handling time, sentiment, and CSAT for a specific topic, and whether the topic is a key driver for any of those metrics.

Topics, which represent semantically similar support issues, help organizations better identify and respond to issues their customers are facing. Correlating these topics along with core historical analytics makes it quick and easy for a supervisor to see common issues by volume, CSAT impact and new cases, helping to identify where they should invest their time.
In this release, the same capability will now be applied to voice channel, generating topics off of the transcript. This will help organizations better understand issues that customers face and their impact on core business metrics across the spectrum of engagement.

I’m really quite excited to see how the new Voice channel will be received, as I think it’s a great feature addition to the overall tools available. It will be interesting to see how clients may choose to use it over their existing voice channel setup.

I’ll be looking deeper into the different functionalities, and will share them here. If there’s anything you think would be helpful to focus on, drop a comment & let me know!

Managed Solutions, & replacing a field

Well to start with, I’m sure that I’m going to get pulled up by some people for my use of the word ‘field’ in the title. After all, officially it’s now a ‘column’! But I (still) can’t let go of calling them as I’ve done so for over a decade, so field it is.

Now to the actual topic of this blog post, which is centred around Managed Solutions. Leaving aside the whole debate about whether we should be using managed or unmanaged solutions (& when/where to do each), there is one definitive benefit of using a managed solution.

See, unmanaged solutions are additive in nature. Work is done in the development environment, then deployed. Further work is done (additional items added, etc), and deployed, and they then appear in the downstream environments. However, if you delete an item in the development environment, it’s not removed when the solution is deployed downstream.

Managed solutions, on the other hand, are both additive & detractive. As with unmanaged solutions, items added in the development environment are also added downstream when deployed. However, if an item is removed from the solution in the development environment, it will also be removed when the solution is deployed downstream. It’s one of the useful ways to ensure that you don’t end up with random unused items just lying around in Production (which have a habit then of popping up in the Advanced Find window, for example). So it’s really quite handy for a lot of reasons to go down this route.

Well, I found myself going down this route recently, but with slightly unexpected results, I’ll freely admit…

The scenario was that we had deployed a managed solution to the UAT (test) environment on a client project. Then the client changed their mind (shock & horror!!) as to a specific item, and we needed to change it from a text item to a lookup item. Obviously (as per best practise, of course) this would need to be done in the development environment, and then released downstream. Given that this is a managed solution, I’d expect this to work, without any issues. Well, it didn’t…

The change in the development environment (deleted the old item, ‘re-created’ it as a lookup with the same system name) was done, we exported it as managed, and then went to import it in the UAT environment. It took the solution file, thought about it for a while (it’s somewhat of a large solution), & then errored:

Exception type: System.ServiceModel.FaultException`1[Microsoft.Xrm.Sdk.OrganizationServiceFault] Message: Attribute mdm_field is a String, but a Lookup type was specified.

Now I was somewhat confused by this message occurring. It’s not been the first time I’ve seen it over the years, but in my previous experience I’ve seen it when handling unmanaged solutions. It’s when you delete an item in the development environment, re-create it as a different item type (with the same underlying system name), and then deploy it as unmanaged. The solution import in the second environment fails due to the different in the type (as it sees the same name). This, of course, is to be expected.

But here we’ve been using managed solutions for deployment, and as mentioned above, they’re detractive as well. The expected behaviour (at least from my side of things) would be that the system would note that the item type has changed, remove the old item, & import the new item. In my mind, that’s logical, but apparently not?

See, even managed solutions have their limitations, of which this is one of them. Having checked with several other people who I reached out to around this, I’ve discovered that it can’t work in the way that I was expecting it to. Instead, a specific process has to be followed

  1. In the development environment, remove the item, & export the solution as managed
  2. In the downstream environment(s), deploy this (interim) managed solution. This will remove the item from the environments
  3. In the development environment, re-create the item with the different system type. Then export it as managed
  4. In the downstream environments, deploy this solution. This will then add the item (with the new system type) into the environment.

This means that development & deployment teams (if separate ones) need to co-ordinate around this, to ensure it’s done in the right way. It could also be developed/exported in succession, and then imported in succession as well (either manually, or through an Azure DevOps Pipeline, for example).

This worked wonderfully for us, and to be honest, I was quite relieved after several hours of frustration with things. Even better, it was a Friday, so meant that the week could end well!

Have you ever come across this, and been frustrated as well? Have you got a similar story with something else that happened to you around solutions? Drop a comment below – I’d love to hear!

Customising Case Resolutions

Well, the title is a bit of a mouthful, I’ll admit. Hopefully though this brings some good information, and can help people out.

Cases are wonderful things, and can be used for tracking client interactions, compliments/complaints, and so many other things. What cases do have is the ability to resolve them, and provide information around the resolution.

Now, the standard way of doing this provides the following screen:

There’s the ability to set the Resolution Type (being a dropdown, aka Choice, field), & putting in free text for the Resolution itself (allowing us to track information around it). There are also time fields, which can be used for working out the time spent, as well as any time that’s going to be chargeable.

Now when going in to modify these, we’d think to open up the Case Resolution table. However, this isn’t actually the right place to do it. Instead, we’re needing to update the Case table itself, as the Care Resolution items comes from the Case Status field!

Somewhat annoyingly, it’s not possible to do this through the new ‘Maker’ interface:

In order to actually handle this, we need to switch across to the Classis editor to set this up. This could be because it’s actually a situation of having both parent & child entries. What I mean by this is that there’s the actual status (being Active, Resolved or Cancelled), and then a reason under each one. Hopefully at some point it’ll be updated into the new UI, so that we can do it from there.

We’ll need to change the Status item to ‘Resolved’, & can then add in the options that we want:

After adding them, we need to save & publish, and then they’ll show up for us, and are able to be selected:

So that’s great – we’re able to customise it. But what if we’re wanting to customise the actual ‘Resolve Case’ form itself? Not everyone wants to show Time/Billable Time on it (quite a few of our clients ask us to remove it), and perhaps they want to add additional custom fields.

So from the usual perspective of doing this, we’d open up the Case Resolution table, create new fields as required, and modify the existing form (we’re not able to create any other forms for this specific table). After all, this is how we’d do it for any table in the system (whether a standard one, or a custom one). This is going to be the Main form, rather than the QuickCreate one:

We save & publish it, and then would open up a Case record, click ‘Resolve Case’, and expect to see it. However, that doesn’t happen, which has been most puzzlingly to me!

It turns out that there are two things needed to be done in order to get to see our ‘custom’ form (though it’s not really custom, as it’s modifying the default form, but whatever).

  1. We need to modify security permissions for users, and is a critical requirement. An example of this is shown below:
Security Role: Customer Service Representative

2. We need to enable customisable dialogues. Yes, it’s a setting that needs to be updated in order for users to see the custom layout of the form. If we don’t do this, they’re shown the default form, even though we’ve modified it! Seems a little strange that the system seems to have this concept of a ‘shadow’ form, but I guess that’s how it is.

To do this, we need to go into the Service Management settings area. I usually launch this through the Customer Service Hub app, though it’s available through several of the other standard apps as well:

Once there, we need to click into the Service Configuration menu item, and then change the ‘Resolve Case Dialogue’ option as shown below:

Remember to click the ‘Save’ button to save this.

Finally we can go back to our Case record, click ‘Resolve Case’, and look what appears!

So in summary, it’s definitely possible to modify & change the way that Case resolutions works in the system. It does take a little bit of fiddling around with settings in different areas, which can be confusing if we’re not used to this, but can give a great result in the end.

Have you ever come across this, and wondered how to do it? Have you developed Case Resolutions any further? Drop a comment below – I’d love to hear!