Solution deployments: Automated vs Manual

Over the holiday period, I’ve been playing around with solution deployments. OK – don’t judge me too much…I also took the necessary time off to relax & get time off work!

But with some spare time in the evenings, I decided to look a bit deeper into the world of DevOps (more specifically, Azure DevOps), and how it works. I’ll admit that I did have some ulterior motives around it (for a project that I’m working on), but it was good to be able to get some time to do this.

So why am I writing this post? Well, there’s a variety of great material out there already around DevOps, such as https://benediktbergmann.eu/ by Benedikt (check out his Twitter here), who’s really great at this. I chat to him from time to time around DevOps, to be able to understand it better.

However, I ran into some quite interesting behaviour (which I STILL have no idea why it’s the case, but more on this later), and thought that I would document it.

Right – let’s start off with manual deployments. As we know, manual deployments are done through the user interface. A user (with necessary permissions) would do the following:

  1. Go into the DEV environment, and export the solution (regardless of whether this is managed or unmanaged)
  2. Go into the target environment, and import the solution

Pretty simple, right?

Now, from an DevOps point of view, the process is similar, though not quite the same. Let’s see how it works:

  1. Run a Build pipeline, which will export the solution from the DEV environment, and put it into the repository
  2. Run a Release pipeline, which will get the solution from the repository, and deploy it to the necessary environment/s

All of that runs (usually) quite smoothly, which is great.

Now, let’s talk for a minute about managed solutions. I’m not going to get into the (heated) discussion around managed vs unmanaged solutions. There’s enough that’s been written, said, and debated on around the topic to date, and I’m sure it will continue. Obviously we all know that the Microsoft Best Practise approach is to use managed solutions in all non-DEV environments..

Anyway – why am I bringing this up? Well, there’s one key different in behaviour when deploying a managed solution vs an unmanaged solution (for a newer solution version), and this is to do with removing functionality from the solution in the DEV environment:

  • When deploying an unmanaged solution, it’s possible to remove items from the solution in the DEV environment, but when deploying to other environments, those items will still remain, even though they’re not present in the solution. Unmanaged solution deployments are additive only, and will not not remove any components
  • When deploying a managed solution, any items removed from the solution in the DEV environment, and then deploying the solution to other environments will cause those items to be removed from there as well. Managed deployments are both additive & subtractive (ie if a component isn’t present in the solution, it will remove it when the solution is deployed)

Now most of us know this already, which is great. It’s a very useful way to handle matters, and can assist with handling a variety of scenarios.

So, let’s go back to my first question – why am I writing this post? Well..it’s because of the different behaviour in manual vs automated deployment, which I discovered. Let’s look at this.

When deploying manually, we get the following options:

The default behaviour (outlined above) is to UPGRADE the solution. This will apply the solution with both additive & detractive behaviour. This is what we’re generally used to, and essentially the behaviour that we’d expect with a managed solution.

Now, when running a release pipeline from Azure DevOps, we’d expect this to work in the same way. After all, systems should be build to all work in the same way, right?

Well, no, that’s not actually what happens. See, when an Azure DevOps release pipeline runs, the default behaviour is NOT to import the solution (we’re talking managed solutions here) as an upgrade. Instead (by default), it imports it as an UPDATE!!!

This is what was really confusing me. I had removed functionality in DEV, ran the build pipeline, then ran the release pipeline. However the functionality (which I had removed from DEV) was still present in UAT! It took me a while to find out what was actually happening underneath…

So how can we handle this? Well, apart from suggesting to Microsoft that they should (perhaps) make everything work in the SAME way, there’s a way to handle it within the release pipeline. For this, it’s necessary to do two things:

Firstly, on the ‘Import Solution’ task, we need to set it to import as a holding solution.

Secondly, we then need to use the ‘Apply Solution Upgrade’ task in the release pipeline

What this will do is then upgrade the existing solution in the target environment with the holding solution that’s just been deployed.

Note: You will need to change the solution version to a higher solution number, in order for this to work properly. I’m going to write more about this another time, but it is important to know!

So in my view, this is a bit annoying, and perhaps Microsoft will change the default behaviour within DevOps at some point. But for the moment, it’s necessary to do.

Has this (or something similar) tripped you up in the past? How did you figure it out? Drop a comment below – I’d love to hear!

Workaround for sharing Canvas Apps

Don’t you find it absolutely frustrating when there’s a canvas app that you want to get access to, or give other users access to, but can’t see it? It’s REALLY annoying, but it’s sort of the way that Microsoft has designed the platform (at least at this point in time).

See, when a user creates a canvas app, only the creator is able to see & launch it. If other users want to get access to it, the creator needs to share it. This can be done by sharing the app directly with another user, or by sharing it with an AAD Security Group (which is sort of best practise).

Now, of course there’s the Microsoft Power Platform Centre of Excellence solution, which includes a very handy app to assign permissions for canvas apps. After all, if a user is on holiday, sick leave, or has left the company, there needs to be some way of assigning permissions for other users to gain access to it. It’s really helpful, but of course needs the CoE solution installed.

Let’s think of another scenario. What about if we have some canvas apps as part of a solution, that’s deployed through (proper) ALM – such as using Azure DevOps with automated pipelines. Best practise for this is to use service principals (ie non-interactive user logins). This is great, but then the canvas app/s will be owned by this user. So without the use of the CoE ‘Set App Permissions’ canvas app, we’re sort of stuck, as we can’t gain access to the app.

Or can we…..?

So this is a scenario that I’ve been dealing with recently, and I’ve found a really cool workaround that doesn’t need the CoE ‘Set App Permissions’ canvas app to be able to handle the situation.

The example below (amusingly, in my opinion) is actually using the Microsoft CoE solution as an example, but this works with any canvas apps that are held within a solution (against, this heavily supports using solutions for ALL development items!).

So, this is what the actual installed apps look like in this environment:

As we can see, there are a lot of them! But what happens if I’m logged in as my regular user? What do I see if I go to the list of apps? Well, I’ll see the following:

Now, as we can see, I’m able to see the model-driven app (as these aren’t hidden at all). But I’m not able to see ANY of the canvas app! So how can I get access to it, or share it with other users?

Well, if I take a look at the solution itself, I can see the following when browsing to the list of apps (I’m really loving the new Solution Explorer layout, I’ll freely admit!):

I can try to play the canvas app (in this case, the ‘Set App Permissions’ app) directly from the solution. But when I try to do this, I’ll get the following error message:

Now, this is of course happening because I’m not the owner of the app, & the app hasn’t been shared with me at all. So really I was expecting this error to happen.

However, if I take a look at the menu options displayed for me, I can see that the ‘Share’ option isn’t greyed out. I wonder what happens if I click it…

Now this is EXCITING! When clicking the ‘Share’ option on the menu, I’m given the regular sharing screen, where I’m able to set app permissions. So it looks like I’m able to do something here. OK – let’s go ahead & try to share the app with my own user:

So I’ve looked up my own user, and then clicked ‘Share’. This is what happens next…

Exciting moment – will this work?

Waiting with bated breath, and then…

It’s worked! The app sharing has been successful with my user.

Note: The example that I’m using here is with my own user account. However it doesn’t need to be – I can select any user account or AAD Security Group, and share accordingly.

Going to my list of apps, I can now see that the app is showing up for me:

Clicking the app to launch it presents me with the permissions dialogue, and having confirmed permissions, then launches it properly:

So this is indeed a way in which it’s possible to share canvas apps with users and/or AAD security groups, even when a user isn’t the owner of the canvas app.

It is important to note that the user carrying this out does need to have one of the following permissions in the environment:

  • System Customiser
  • System Administrator

Without having one of these roles, it’s not going to be possible to carry out the above (mostly because it’s not possible to see solutions & dig down into them).

This is a handy little trick that hopefully will help clear up one of the headaches when trying to share canvas apps! Of course it’s possible to use the Microsoft CoE tool to set app permissions, but if a customer doesn’t have it installed, then this would be another way to approach things.

Have you ever had this issue? How did you go about solving it? I’d love to hear – please drop a comment below…

Omnichannel vs Customer Service Workspace

This is a question that I’m being asked on a semi-regular basis at the moment, so I thought it would be helpful to do a writeup around things. It’s definitely not clear from the outset based on existing documentation. However, being able to speak to wonderful people such as Tricia Sinclair has been amazing in being able to figure out the differences between the two applications.

So, where to start. Well, let’s first of all understand the similarities between the two applications.

Firstly, they are both multi-session apps. To put this in context (as mentioned elsewhere previously) – traditionally Dynamics 365 applications have been ‘single session’ applications. This means that users would navigate around, open/close records, create or edit as necessary. If users wanted to have multiple records open, they’d need to have multiple tabs open, or even multiple windows (yes, I still remember the days before browsers had tab functionality!).

What multi-session means in this context is that users are able to open up multiple records, and switch between them in the same tab. Open records pop into the left-hand navigation bar, and users can easily click between them. Not only that – users are also able to open further tabs within the same record pane, to access further information. These stay open whilst users switch to other records, which is really quite helpful!

So for example, a user could open a case record, then open the contact associated to the case, as well as the account related to the case. They could then further open the knowledge base to search for articles, and so on and so forth. All of these stay open.

Both apps are also web applications – they run in a browser, rather than needing to have a specific software application installed for them (unlike Unified Service Desk).

So, where do they actually differ? Well, this was a bit difficult for me to understand in the first instance, though that turned out to be because I had both Customer Service Workspace as well as Omnichannel configured within the same environment! Turns out that this wasn’t the best approach to take to compare the two, & understand their capabilities. Easily fixed though with quickly spinning up a new trial to install one in.

So with knowing how Omnichannel works (after all, I’ve written quite extensively around it), let’s take a look at the Customer Service Workspace app:

Customer Service workspace overview
  1. The session pane lists all the sessions that you are actively working on. Select the tabs to navigate among sessions.
  2. The Home session returns you to the Customer Service Agent Dashboard view.
  3. Each session has a tab in the session panel. Select a tab to navigate to the session you want to work on.
  4. Select a case to open a new session. A single click on a case replaces your view with the case form. Select the back arrow in the upper-left corner of the form to get back to your previous view.
  5. Select the tabs to navigate to your open activities, cases, forms and views.
  6. Select the + icon to expand the menu to view a list of forms, views, and activities. Select the one you want to open in a new tab.
  7. Select the drop-down selector to filter cases in queues you can choose to work on.
  8. Select Shift + mouse click to open a new session for an activity. A single click replaces your view with the activity form. Select the back arrow in the upper-left corner of the form to go back to your previous vie

Now, without Omnichannel installed in the same environment (& obviously licensed for users), it’s not possible to have native Dynamics 365 channels such as Chat, WhatsApp, etc. Conversations will not appear for customer service agents who are using the Customer Service Workspace.

Note: If you DO have Omnichannel installed in the same environment, and users are licensed to use it, then conversations will show up within the Customer Service Workspace app for them. They’ll have notifications pop up on the screen for incoming customer sessions.

That’s not to say that it’s not possible to have channels available within Customer Service Workspace. So how do they actually come in?

Well, as it turns out, channels within Customer Service Workspace need to be third party channels. There are a plethora of 3rd party add-ons for Dynamics 365, that offer different communication capabilities. Some of these do date back a while (to before any native Microsoft capabilities).

For example, there are ISV add-ons for Customer Service that can embed a call dialler into the experience, so that customer service agents can call directly from a record. Or alternatively an add-on such as a 3rd party web chat application, that can then surface these within the Customer Service Workspace. Each of these obviously would need to be purchased, licensed & integrated appropriately with your Dynamics 365 solution as necessary too.

Now both applications also have other similar functionality, such as the Productivity Pane, Agent Scripts, Smart Assist & Knowledge Search. However there can be differences between them. For more information, I’d suggest taking a look at Tricia’s blog article that goes into depth on this.

So to summarise, Omnichannel is for the native Microsoft channels, giving customer service agents the ability to service customers using them. Licensing (currently) is with Customer Service Enterprise, and then either the Digital Chat or Digital Messaging add-on SKU’s.

Customer Service Workspace, on the other hand, allows customer service agents to be able to have a multi-session application for their work, as well as allowing communications through third-party channels. Licensing is as per the different Customer Service SKU’s, with any 3rd party add-on being licensed appropriately.

Hopefully this helps clarify the different between these two, and make them less confusing. If you have any further questions around this, please drop a comment below, and I’ll do my best to respond!

Omnichannel – Wave 2 2021

So last week the Wave 2 2021 information dropped. It’s taken me a few days to get round to it (family stuff happening), but I’m finally able to do a quick recap of it. As most people know, Microsoft releases features in two waves – one in the spring (Wave 1), and one in the autumn (Wave 2). As usual, I’ve included the links for the full release notes across both Dynamics 365 & Power Platform below, though will be focusing on the product features for Omnichannel

The links are here:

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

Agent workspace inbox view

GA – Oct 2021

10 Google Workspace tips to optimize your inbox - Google Workspace Learning  Center

As more and more organisations move in the direction of omnichannel system capabilities, there is a growing need for the actual agent experience to be better optimised. The inbox view that this functionality will deliver is aimed to address the needs to quickly triage requests, and allow agents to focus on customers & their issues. It will be integrated into the Customer Service workspace as well as the Omnichannel Engagement Hub, and will allow agents to effectively navigate their emails & conversions whilst handling customer interactions.

Usability improvements for agent workspaces

Early Access – Aug 2021. GA – Oct 2021

Web Usability Definition | Web Wise Wording

The Customer Service workspace and Omnichannel Engagement Hub are multi-session applications that allow users to be able to multi-task with customers to provide support on multiple cases simultaneously. This release provides usability improvements to help agents be more productive, including simplified navigation as well as the migration of productivity tools to the new extensible App side pane.

Increase agent productivity with contextual collaboration using embedded Microsoft Teams

GA – Nov 2021

How to Embed and Share Videos on Microsoft Teams | ClickView

Agents who use Dynamics 365 Customer Service can easily collaborate with anyone within their organization, such as agents from other departments, supervisors, customer service peers, or support experts, over Microsoft Teams to resolve customer issues, without leaving
the case or conversation. Chats over Teams will be linked directly to Customer Service records, enabling a contextual experience

Some of the key features coming in this release are:

  • Ability to chat with contacts from within Dynamics 365
  • Access to key Customer Service contacts, such as supervisors, queue members, and support experts.
  • Access to AI-driven suggestions of agents who resolved similar cases.
  • Access to recent Microsoft Teams chat lists.
  • Ability to link and unlink chats to case records.
  • Access to linked Microsoft Teams chats.
  • Message avatar and presence, where users can easily see profile pictures of a chat participant and their availability (presence)

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.

Voice channel powered by Azure Communication Services

GA – Nov 2021

NEW Voice Channel Capabilities Announced for Dynamics 365 Customer Service  | Preact

As mentioned in the Wave 1 2021 post, there’s a new voice channel that’s coming in. This new solution for Customer Service enables an all-in-one customer service solution without fragmentation or requirement of manual data integration. It will provide a single view of the customer that empowers agents to provide personalised service across all channels, and true omnichannel analytics and insights for agents and supervisors alike. Providing organizations with a choice of telephony delivered directly by Microsoft enables quick and easy deployment of a voice channel for their business.

  • This feature enables organizations to adopt Azure Communication Services as a voice provider natively in Omnichannel for Customer Service, and facilitates the following features:
  • Phone number procurement and management
  • Ability to handle and distribute incoming calls
  • Ability to make outbound calls
  • Ability to manage SMS (inbound and outbound)
  • Deep integration of voice into core Omnichannel for Customer Service functionality
  • Real-time sentiment analysis
  • Real-time transcription
  • Real-time translation
  • Real-time smart assist suggestions
  • Operations management through supervisor dashboards
  • Ability to record and manage phone call

Now there has been a slight delay in rolling this out. As a result, the GA dates for the below have been pushed back to Nov 2021:

  • Call intelligence
  • Call recording
  • Call transcription and real-time sentiment analysis
  • Consult and transfer
  • Direct outbound calling
  • Embedded analytics for voice channel
  • Intelligent voice bot via Power Virtual Agents and Microsoft Bot Framework
  • Modern administration experience for Omnichannel voice (number management)
  • Modern administration for Omnichannel SMS via Communication Services (number management)
  • Supervisor monitoring and barge
  • Topic clustering for voice

Unified routing

Traditionally, organizations use “queue-based routing,” where incoming service requests are routed to a relevant queue, and agents work on those service requests by picking them from the queue. Organizations can miss service-level agreements if agents pick the easier service requests and leave the higher-priority requests in the queue. To address this scenario, organizations either create custom workflows to periodically distribute service requests among their agents or have dedicated personnel to distribute the service requests equitably among agents while adhering to organizational and customer preferences. Both methods are inefficient and error prone and necessitate continuous queue supervision.
The intelligent routing service in Customer Service uses a combination of AI models and rules to assign incoming service requests from all channels (cases, entities, chat, digital messages, and voice) to the best-suited agents. The assignment rules take into account customer-specified criteria, such as priority and auto-skills matching. The new routing service uses AI to classify, route, and assign work items with full automation, eliminating the need for constant queue supervision and manual work distribution to offer operational efficiencies for organizations

Improved historical analytics for unified routing scenarios

GA – Oct 2021

historical analysis on real-time data with ActivePivot

Administrators use unified routing and routing rules across the classification and assignment stages to help ensure the work item is assigned to the best suited agent. Embedded historical analytics provides an overview of routing performance of each channel to help optimize the routing strategy and improve the routing and workforce efficiency. Providing organizations a view of the effectiveness of configurations allows them to improve routing configurations to help increase their customer satisfaction and agent satisfaction scores.

Routing diagnostics for supervisors

GA – Oct 2021

Computer diagnostics icon (PSD) psd free file | Download now!

Routing diagnostics helps an organization to better understand the path a work item takes after it comes into the routing system, through all the classification and assignment rules, to ultimately land in a queue or be assigned to an agent. Current routing diagnostics are available for administrators and are more focused on the workstream and queue routing. In this release, routing diagnostics are being introduced to supervisor experiences, and the quality of the diagnostics is being improved.

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!

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.

Branding Omnichannel Chat Widget

One of the most basic functions of Omnichannel is the humble chat widget. This lovely little feature is there to be embedded on a webpage. People browsing the website can see it in the corner (or wherever it’s placed), and can then click on it to get help from a customer service person.

When clicked on, the chat window immediately opens, and people can connect to a live advisor. As mentioned previously, it’s also possible to add initial questions to the interface for the customer to fill out, and the information is then provided to the customer service agent.

All of this is wonderful. However, companies are now, more than ever, conscious of their branding. And by branding, I’m not just referring to a corporate logo. Businesses will often have colour schemes that are globally identified with them, along with fonts as well. Think of Coca Cola, for instance. The cursive script used is identifiable wherever you are in the world, even when it’s written in a different language, or the other way around!

With the default system customisation options, the chat widget itself is able to be pointed to a logo to be used in it. However further customisations and options, such as the colour scheme, are limited to pre-set options. So what happens if a company wishes to extend this further, and keep things in line with their corporate image?

Well, thankfully due to some extended development tools, this is able to be done. Below, I’m going to set out some of the functionality that is available through the usage of different scripts that can be added to the webpage within the chat widget code, which will then enhance it even further.

Pop out mode

It’s great to have the chat widget on the same screen, down in the corner somewhere. But what if you’re wanting to have it pop out, and present in a different window? It’s not possible through the default configuration, but it is possible through the usage of code. Simply adding the following line before the ‘></script’ tag at the end of the code block, we get to see this happen:

data-open-in-window="true"

It’s also possible to set the tag to “false”, which will then obviously not pop it open in a new window, but will keep it within the widget itself.

Font options

Not only are we able to pop out the chat window, we’re also able to use custom fonts. Again, the default font options leave a lot to be desired, in my opinion. Given the wide range of fonts being able to be used on websites nowadays, it’s definitely very nice to be able to use more fonts for the chat widget itself. I’d be slightly cautious here against being too ‘wild’ with them, as obviously we want to ensure that they’re accessible for all, and not difficult to read for some people.

Adding the following code snippet before the ‘></script’ tag at the end of the code block will make this happen. Note that we do need to specify the font that we’re wanting to use, though not all fonts may be available on website pages:

data-font-family-override="Stencil; Segoe UI"

Also bear in mind that different browsers may have compatibility issues with more advanced fonts, along with mobile devices, so I’d advise to be careful here. Ensure that you do test this out as widely as you can. There is also a second option font that can be used, in the case where the main font that you’ve specific is not available.

Custom colours

The final piece of customisation that I’d like to mention (at least for the purposes of this blog post) is around colours. Again, there are only a few pre-set colours available to pick from for the chat widget interface, which is a shame. For this, I’d definitely have expected to see the ability to select more colours, or have a colour picker/HEX value column available to use. After all, if it’s possible to do this in Microsoft Word (or other programs), why not Dynamics 365?

So again, there’s a nifty little code segment that can be added to the chat widget code script on the webpage. This requires you you know the HEX value for the colour that you’re wanting (if you don’t know this off the top of your head, there are free tools out there that can easily and quickly provide it to you).

data-color-override="#174F15

Personally, I think that the colour option is the best one to go for, as you can immediately utilise any custom colours that your branding contains!

Overall, I think that these are really great, and as you can see, I’ve played around with them for my own environment!

Have you ever had a need to customise something like this, but faced challenges? Drop a comment below – I’d love to hear!

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!