One of the main parts of any system is to see who’s available to handle customer service queries. This is, of course, vitally important for any company – you wouldn’t want to overload an already busy agent!
In the case of Omnichannel, the system uses something called ‘Presence’ to show this. When users are set up, they have a default presence set against them. These govern system behaviour, along with having a nice friendly icon that helps from a visual perspective. Omnichannel has the following default options available:
These are available for supervisors to see from their dashboards, so that they can see the status of all agents at a single glance.
It’s also used by the system for auto-routing conversations. For example, if the agent status is ‘Busy’, then they won’t have new conversations routed to them. Similarly, if they’re set as ‘Away’ or ‘Offline’, they also won’t get conversations sent through to them (admittedly supervisors can override this, and assign specific conversations to agents who have one of these set).
Agents are able to change their own presence by clicking on the toolbar, and selecting the one that they wish to set:
But what happens if you want to have some custom statuses? Off the top of my head, I can think of at least half a dozen clients that would want more granularity around this.
Well, thankfully we’re in luck. Omnichannel supports the option for a ‘Custom Presence’!. They do need to be set up through the Omnichannel Administration Hub. To do this, go to ‘Custom Presence’ on the left side & select it. We can see that the default system entries are there.
Before going any further, I do want to point out that we should NOT deactivate or delete the standard Presence entries. It’s possible to do, but it’s going to create MAJOR issues in your system. So please, don’t!
Right – back to things. To create a custom presence, we click the ‘New’ button on the menu bar. We get the following window:
The 4 fields shown are as follows:
Name. The name of the record
Presence Text. The wording that the agent sees when they’re picking their status
Base Status. The default system status that this new status will be based on. This is important, as it will drive the icon used
Description. A ‘friendly’ description of what the presence/status is about. This is useful to keep track of things
Once we’ve saved the record, it’s then immediately available for agents to select! The only thing that agents need to do is refresh their browser tab. This makes a nice change from the usual ’15 minute wait’ for data to update within Omnichannel :).
So let’s go ahead and see what this then looks like. I’ve chosen a very familiar item (for most people):
When I’ve selected this new custom status, we can then see that the icon in the Ribbon Bar changes as well, to the icon for the base status that we used:
So in short, this is quite a nice little piece of functionality. Nothing too fancy or complicated to setup, but will allow companies to further segment their agents & understand what they’re up to.
Something else that we’re able to use this for is the agent ‘Default Presence’, which is set on the User record. Once we have custom presence records in place, it’s possible to select these there:
So apart from having agents segmented by Teams & Queues, we can now also use these. Some very interesting scenarios pop into mind!
So, how do you think you’d apply this in your own environment? Drop a comment below – I’d love to hear!
As many people are aware, Microsoft is changing the certification landscape somewhat. With the emergence of the Power Platform, there’s a need to test skills other than the traditional Dynamics 365 ones.
To this end, a new series (the PL-XXX) has been created. The first (main) one of these exams is the PL-100, which is the entry level exam.
Now, when I say ‘entry level’, I’m not referring to basics. This isn’t a Fundamentals exam – for that, you’ll be wanting to take a look at the PL-900 exam (which came out a while ago). To put it into perspective, the PL-200 (which is aimed to launch in September 2020) will replace the MB-200 exam!
So, the exam went live (in Beta) just over a week ago (July 17th). I’ve been waiting for this for a while, as I’ve really been wanting to see how the new exams are structured. Taking it in Beta means I’m going to have to wait (a little while) for my results to come through, but it gives me the opportunity to see the new landscape upfront.
I booked it as soon as it was available, for Wednesday July 22nd. Nicely (as mentioned above), there were already learning paths in place, so I eagerly went through them (again) in preparation. I was feeling pretty much quite prepared, but then….
See, I had signed up to attend the Power Platform Virtual Happy Hour (PPPVHH) on the same day as I had booked the exam for. Incidentally, if you haven’t come across this before, take a look. It’s hosted every month, and has some AMAZING speakers. Clarissa Gillingham presented on the ‘Infinity Form’, and it was a joy to behold. But I’m digressing.
After the event had finished, some of us remained chatting in the virtual room. Amongst them was none other than Chris Huntingford, who we all love and adore!. I mentioned that I had to sign off soon to get ready for the exam. No sooner had I mentioned this than Chris said to me something along the lines of ‘BRO….WATCH OUT!! It’s REALLY HARD!!’.
I might mention here that I have a slight (friendly) rivalry with Chris, in seeing who can take newly released exams first. I had figured that he’d be so busy with everything going on that I’d get this one before he did. Little did I know that he had ALREADY taken it.
Here I was, about to go sit down for the exam, and he got me TOTALLY freaked out. I’m not sure how much of it he did on purpose, but I’m sure that when I get him into a corner, I’ll find out…one day!
Anyhow – I sat the exam, took most of the time available (pretty sure I hit the 2 hour mark), and found it quite good overall. One or two things that seemed to be totally random/in the wrong place, but otherwise it was fine. Definitely much better that the MB-600 (MB-600 Solution Architect Exam), and I felt much more comfortable than I did with the MB-400 (MB-400 Power Apps & Dynamics 365 Developer Exam).
It really is very cleared aimed at app developers (both model & canvas), as well as other Power Platform skills. According to the exam description:
The app maker builds solutions to simplify, automate, and transform tasks and processes for themselves and their team where they have deep expertise in the solution domain. They are skilled in key technical business analyst tasks such as data modeling, basic UX design, requirements analysis, process analysis, etc.
The app maker creates and enforces business processes, structures digital collection of information, improves efficiency of repeatable tasks, and automates business processes.
The app maker uses the maker tools of Power Platform to solve business problems. They may have experience with Visual Basic for Applications, Excel pivot tables, Teams, and other tools. They should have a basic understanding of data models, user interface, and processes. The app maker is aware of the capabilities and limitations of available tools and understands how to apply them.
The app maker is self-directed, and solution focused. They may not have formal IT training but are comfortable using technology to solve business problems with a personal growth mindset. They understand the operational need and have a vision of the desired outcome. They approach problems with phased and iterative strategies.
So, as before, 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!).
Canvas App Test Studio. What it does, how to carry out tests in it, how to set up Test Suites, etc
Developing Power Automate Flows. Different types of connectors, different types of steps/actions. How to deploy properly between environments using solutions
Field Level Security. What it is, what it does, what it can/can’t be used for
Canvas Apps:
Publishing rights
Access rights
Versioning
Editing vs using
Sharing & security
Saving changes, & deploying them to users
Collections. What they are, what they do, how they work
Galleries. What they are, what they can do, how to configure them in different way
Navigation around screens. How to set this up, how to pass information from one screen to the next
New vs Display vs Edit forms. What each one is, how each one is used
Charts. Which ones are available, how they’re configured
Using AI features, such as text/data recognition. What’s able to be used, how are they configured, what the benefits of each are
Versioning. How to handle this, what the benefits are
Accessibility for less-abled users. What options are available to facilitate this, how are they configured
Data Security. Different types of security available (roles/teams/access teams/business units) etc. Configuring security roles with different levels of permissions
Power BI Security. Showing/hiding information for specific users/teams, and how to configure this
Solution publishers. How these are set up, what you can modify after they’ve been set, considerations between default & other solutions
Business Logic. Differences between Business Process Flows, Business Rules & Power Automate. What each one can/can’t do, and is best suited for
Creating environments. Where to do this, how to do this, what steps are needed
Connecting to data sources. Different types of data connections, what each one is suited for
Model Apps:
Forms & Views. What these are, how to set up & configure them
Navigation, Sitemap etc.
Business Rules. How they work, what the different levels of scope are, how they affect functionality
Automation. Workflows vs Power Automate Flows. The different types (eg On Demand, Instant, Scheduled)
Arrays. What they are, what they do, how they work
DLP (Data Loss Prevention). How this works, how to set it up, different options available
Data field types. What each one is, how each one is used & able to be configured
Calculated/Rollup vs Autonumber. What each is, when to use each one
That’s quite a lot of stuff, with an emphasis on canvas app functionality & solutions. It definitely is important to ensure that you’re really on top of these. Thankfully not too much mention of Power BI (at least not in my exam), and for that I’m quite grateful!
I do have to say that in one respect, I found something quite amusing. See, on the same day as I took the exam, Microsoft Ignite was taking place. One of the major announcements was the ‘rename/rebrand’ of CDS to Dateflex (Pro). I therefore kept laughing when questions would refer to CDS again & again! Obviously I’m expecting this to change in the exam (at some point?).
In summary, I think that this is a good start for the new range of exams, and look forward to the other ones in the series coming out!
Have you taken this? What was your experience like? Drop a comment below – I’d love to hear!
Normally when I write a blog post, it’s about sharing some cool features, new functionality, etc. However this post is going to be a little different, because I don’t actually have an answer (yet!) to what is going on here.
Let me explain the situation.
I’m needing to show some very specific data for reference purposes. For the purposes of this, let’s say that I’m looking at Contacts, and needing to report on Phone Calls. The reason is to identify Contacts who are frequent callers. My criteria are as follows:
At least one phone call (that has the Contact as the Regarding value) need to have a specific field set
At least one phone call (that has the Contact as the Regarding value) needs to have its Activity Status as Open
These two conditions are separate. So the contact essentially needs to have at least 2 phone calls against them, with each one meeting one of the conditions. There can be more than 1 phone call record with the same condition – that’s not an issue here.
Back in the (good old) day, I’d have written some cool SQL to return this data. Two Left Outer Joins, and we’d be done. However I can’t do that now (I’ve recently started dipping into FetchXML, which is an entirely other story to cover at some point). So I’m having to use the Advanced Find to check that I’m getting the right data.
This isn’t the easiest of things to do. I’m needing to start from Contact, go to Phone Call, go back up to Contact, & go back down to Phone Call. But hey, this is what it looks like:
So with this set up, I run the query, and get some results (in this specific scenario/time, there are 3 results). I go through the data to check that the results are actually satisfying my requirements, which they are:
Wonderful – let’s move forward then!
My next step is to look to set this up as a system view. To do this, I go to the Power Apps Maker (http://make.powerapps.com/), open my solution & find the Contact entity. Opening it, I switch to the Views tab:
I create a new view, add the columns I need, and then open up the Filter Criteria to start setting this up. I’m using the Advanced Find as a reference guide for the conditions I’m needing to use. Going through it, I replicate the values across:
That looks about the same as the Advanced Find, right? It’s laid out slightly differently, but that’s just the designer. OK – let’s go ahead to save/publish it, and see it it in the app:
Hold on. There’s only 1 record showing up there. Admittedly it’s in the list that came from Advanced Find, but what’s happened to the other 2 records?
So I go to check the data. I had already done this before, but I thought that perhaps I overlooked something, so I checked again. Nope – all of the data is fine/correct. There should indeed be 3 records showing up in the system view, but 2 are missing…
Note: As an aside, I do know that this isn’t permissions related. I’m doing all of this as a systems administrator with full privileges to everything. So it’s not that
OK – next steps:
Clear browser cache, reload and see if they’re showing up (useful tip – Control+F5 does this!). Nope, they’re not showing
Use Incognito mode, log in and see if they’re showing there. No, they’re still hiding away
Use a different browser, with a different system administrator login. Unbelievably they’re still being very shy, and refusing to appear!
Even more confusing about all of this is something truly perplexing. I can open up Advanced Find, select the system view (without doing ANYTHING else) & click ‘Results’. When doing this, all of the records appear! So in the entity view they’re not, but when I use that same system view through Advanced Find, they are!
I’m scratching my head at this. It just doesn’t make sense. I have no idea why this is happening. Reaching out to others, they also don’t seem to have any idea either.
My next step (I’m feeling SO proud of this, and so dev!) was to check the FetchXML. Perhaps there was something underlying in it that’s causing this? Using the FetchXML Builder in XrmToolBox, I loaded both views up, and compared them. It’s crazy – they seem to be exactly the same! (well, some cosmetic differences with where aliases appeared on the line, but this wouldn’t affect it):
At this point, I’m thinking that there are some magic elves under the hood, squirrelling away the data. It has to be the only logical reason for this, right?
The only thing I could find in the FetchXML that might make a difference is that there’s a ‘Distinct’ clause at the top of it in the one that’s working:
Why this would cause the issue, I have NO idea. Views return distinct results in them anyhow, so I’m not sure what this is actually doing here.
Regardless, using FetchXML Builder I updated the code, and WOW – it worked! I’m now returning 3 records in my system view! Absolutely strange, but hey – if it’s working now, who am I to question it…
I’m going to try to raise this through official Microsoft Channels, and see what I might be able to find out from them. However if you’ve come across this (or similar), or have some ideas about how to work around it, I’d LOVE to hear from you!
Now there’s obviously a lot of different stuff in there, covering all of the different first party apps in Dynamics 365, as well as functionality for the different parts of the Power Platform. I’m going to focus on the Omnichannel features, as after all that’s what I (mostly) talk about 🙂
As I’ve done before, I’m going to include the dates that are applicable (at this point in time) for each time.
Agent suggestions for similar cases
Public preview – October 2020. No current date for GA release
Customer service agents will usually use multiple resources to efficiently handle & resolve customer cases. When doing so, the ideal is to provided consistent responses across agents & sessions. Carrying this out can involve knowledge articles, involving other agents, or reviewing active/similar cases.
The aim is to therefore improve this to enable the agents to be more efficient. Items such as being able to identify other cases that similar actions have occurred will result in a much more empowered experience.
The key highlights for this new feature include:
AI driven case suggestions bases on the context & historical success rate
Secondary actions that can be taken, such as collaboration with an expert
Continuous improvement of the recommendation model through a comprehensive feedback mechanism
Embedding chats in mobile experience
GA – October 2020
Until now, the only way possible for customers to engage with Omnichannel customer support on mobile has been through a mobile browser. This hasn’t always been the best of experiences.
This feature allows business with mobile applications to provide customers the ability to engage with customer service directly within the mobile app. There are two options available for this across iOS & Android devices:
By embedding the Omnichannel chat widget into an iFrame, with minimal code customisation. The colour & logo can be set through the Omnichannel Administrator app. This method includes a sample app on AppSource with examples for common scenarios
Through the React Native Mobile SDK for Omnichannel for Customer Service. This will allow developers to build fully customised chat widgets in mobile apps
Persistent messaging for chat
GA – October 2020
One of the main challenges around chat is that when a conversation is closed, the history is accessible the the chat transcript. It’s not easily visible in the chat conversation history. Asynchronous messaging channels such as WhatsApp don’t have this ‘restriction’, as the chat history is directly available in the session.
If an agent needs to go look up the chat history, it can cause a delay in responding to the customer whilst it’s located, opened & read. This in turn can degrade the customer experience.
In this new feature, admins are able to enable persistent messaging, so that the customers previous conversation shows in the actual conversation window. This in turn allows the agent to have the full context of the customers previous engagement before responding.
Outbound messaging
Public preview – August 2020. GA October 2020
There are occasions when organisations need to proactively reach out to customers. This could be to notify them of a case update, regulatory information, upcoming appointments, etc. Being able to do this via the customers preferred method of communication is important in delivery best-of-class service
With this feature, organisations will be able to dynamically message their customers based on specific events through supported channels. This includes the following capabilities:
Creating message templates that can be adopted for outbound messages
Configure outbound messages based on specific events on any entity, & send messages when these events are triggered
The customer will now be able to respond back upon receiving one of the messages. This response will be treated like any other incoming conversation in Omnichannel. It will flow through the appropriate routing & work distributions, agent assignment, etc, and the agent will be able to respond back to the customer in real time
Post-conversation surveys using Forms Pro
Public preview – August 2020. GA – October 2020
Until now, there was no (easy) method for post-conversation surveys to be sent out to customers. Businesses wish to ensure that customer satisfaction is met, and often make use of such things. Custom Power Automate actions could be implemented, but this obviously takes additional time &/or resource to develop.
With this new feature, Omnichannel administrators can configure post conversations surveys using Forms Pro. These can be presented natively as part of the customer experience to provide feedback. There’s also support for sending offline surverys through one of the various enabled channels.
Real-time language translation of messages
Public preview – August 2020. GA – October 2020
Customers would like to receive support in their native language. Businesses are not always able to do this, as it would require having staff who can communicate in different languages to their customers.
In this feature, real-time translation of messages is carried out between the customer & the support agent. It’s also available for the internal collaboration between agents. It’s enabled as a plug-in that exposes API’s to bring in 3rd party translation services, & also provides a native implementation through Azure Cognitive Services.
This is a feature that I can see being used heavily by not only multi-national organisations, but also by by smaller national-based organisations that have an international customer base
Agent personalisation of quick replies
Agents spend a considerable amount of time engaging with customers. We already have quick responses within Omnichannel to save agents time in typing replies, & to deliver consistent replies.
However these can’t be personalised for individual agents to represent their identity. This new feature allows the pre-configured quick responses to be customised by agents to represent their styles. With this, they can then address communication scenarios in a manner that’s common & personal to them.
Agent personalisation of sound notifications
Public preview – September 2020. GA – October 2020
This feature enables agents to customise sound notifications for incoming conversations so that they can easily distinguish between different sessions. It will also allow them to differentiate their sessions from others around them in a call centre setting.
Agent suggestions for knowledge
Public preview – September 2020. GA – October 2020
Agents typically use several different resources to efficiently resolve customer cases. These include knowledge articles, collaboration with other agents, and reviewing other cases. Up until now, this has all be done manually.
The new feature for this uses AI to proactively surface relevant knowledge articles, taking case context & previous history into account. It also includes a comprehensive feedback mechanism to continuously improve the recommendation model.
Experience designer for multi-session apps
Public preview – September 2020. GA – October 2020
The experience designer is an out-of-the-box solution that lets organisations create targeted app experiences, to be used by agents & supervisors. Administrators can select specific channels & tool to be used by these profiles, as an alternative to building & maintaining custom apps.
All in all, I think that there are some really helpful additions to the core Omnichannel product, aimed at making the customer & agent experiences more productive. I’m looking forward to getting hands on with these, and writing about them!
I haven’t usually been putting up posts around the exams that I take. A few months back I did decide to write one on the MB-600 exam (MB-600 Solution Architect Exam), which just took off! It was quite amazing (& pleasing) how many people were looking at it, & asking me questions around the exam.
As a result, I’ve decided to continue this, and am therefore now writing this post on the MB-400 exam.
There are several different ‘ranges’ of exams within the Dynamics 365/Power Platform space. These are aimed at different types of roles, or specific specialisation/s within a role. A good example of this is the MB-2xx range. It covers functional technology, and is split across the different ‘main’ areas of Dynamics 365.
The MB-400 (the only one in the range at the moment) is aimed at developers. According to the official description for the exam:
Candidates for this exam are Developers who work with Microsoft Power Apps model-driven apps in Dynamics 365 to design, develop, secure, and extend a Dynamics 365 implementation. Candidates implement components of a solution that include application enhancements, custom user experience, system integrations, data conversions, custom process automation, and custom visualizations.
Candidates must have strong applied knowledge of Power Apps model-driven apps in Dynamics 365, including in-depth understanding of customization, configuration, integration, and extensibility, as well as boundaries and constraints. Candidates should have a basic understanding of DevOps practices for Power Apps model-driven apps in Dynamics 365. Candidates must expose, store, and report on data.
Candidates should have development experience that includes JavaScript, TypeScript, C#, HTML, .NET, Microsoft Azure, Office 365, RESTful Web Services, ASP.NET, and Power BI.
As anyone who knows me will attest, I am NOT a developer. However I decided (for several reasons) to give this one a go, and see what would happen! I knew I’d be pushing myself out of my comfort zone, there would be things I wouldn’t understand/know at ALL, but hey – I was curious to see what would happen! Even more challenging, I decided to book & take it within a 24 hour period!
Now as this has been out for a little while (& isn’t in Beta), there’s thankfully some good resources on Microsoft Learn about it. Take a look at https://docs.microsoft.com/en-us/learn/certifications/exams/mb-400, where there are several learning paths that can be followed.
A big shout out as well to Julian Sharp & Joe Griffin who recently ran a multi-week course around it. The official Microsoft learning paths are great of course, but seem to miss out quite a bit of what’s actually needed to be known for this. The course that they ran covered a lot more. Hopefully there will be more courses like this run in the future!
When passing it (& assuming that you’ve passed the MB-200 as well), you get a lovely shiny badge!
Once again, I sat the exam through the proctored option (ie from home). The experience went somewhat better than previous times. Amusingly I got told off by the proctor during the exam for ‘looking down at the keyboard’, rather than looking at the screen! I explained that I was using a different computer, & kept clicking the wrong mouse button on it (leaving aside that I was exhausted when doing it!).
So, as before, 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!).
Configuring security for system connections (security types)
D365 Web API – how it’s used, types of calls made from/to it
Azure API – making calls to/from it
Code for importing data (debugging, variables)
Advanced Find
Types of calls (synchronous, asynchronous, )
Data modelling
Creating & deploying solutions through different methods
Publisher versioning
Identifying code variables, and saying what would happen in given scenarios
Power Apps Component Framework (PCF) – how to use, how to package components, how to deploy
PCF components & classes
JavaScript – code examples, what happens when a given scenario happens
JavaScript functions
Dynamics 365 Ribbon – what it is, what you can do with it, different types of functionality & ways to do things with it
Security & Permissions, including roles, teams, field level security, business units
Workflows, Power Automate Flows (how they’re set up, different functionality within them, how to do things with them given a specific scenario)
Business Rules (what they can/can’t do, different scopes, etc)
Field types (eg option-sets, calculated fields, roll-up fields, multi-select, etc)
Importing solutions – requirements for this, versioning, deployment between environments
Compatibility with Microsoft Teams
Now many of these (as I said above) are outside of my comfort zone. In fact, I’d say that even with absolutely cramming for a whole day for the exam, I still felt that I was guessing the answer for at least 30% of the questions. Admittedly though, as Julian Sharp says, a ‘gut feeling’ answer is usually right most of the time, coming from what the subconscious has absorbed during revision.
I was REALLY happy that I got a passing mark for this, & admittedly was VERY relieved as well. So now another lovely shiny badge in my collection, and I’m now going to go and update it on LinkedIn as well!
If you have any questions on this, feel free to drop them below, and I’ll try to help out as best as I can!
Many people in the IT scene will know of LogMeIn (https://www.logmein.com/), or LMI for short. For as long as I can remember (which means going back almost 2 decades!) they’ve been one of the main remote access solutions. With their product range, it was possible to leave your computer at home, travel abroad, and easily log into it from practically any computer anywhere.
It’s also a great product for IT professionals. Being able to deliver customer support through remote sessions, manage identity solutions, etc. The number of products over the years has grown, and been quite pleasing to watch:
Pro handles unattended remote access for up to 10 computers, and is aimed at small businesses
Central takes this up to the next level, covering 250 computers, but has all of the admin features that larger businesses want
Of course, LogMeIn Free (a great starter product for personal usage) was removed some years back, which to this I still believe is a great pity. Obviously the company decided to focus on the more enterprise side of things, which I can understand as a business.
So, why am I now writing about them? Quite simple, actually. LogMeIn are one of the providers that are working with Microsoft to provide Co-Browse solutions for Omnichannel! It’s a very new piece of functionality that’s been launched in the Dynamics 365 product, and there aren’t many providers out there that have integration points to it.
What is Co-Browse?
It’s important to understand what co-browsing is, and some useful stats:
“Co-browsing” refers to the ability to have a service provider & customer jointly navigate an application in real time through the web.
Co-browsing: The Gateway to Happy Customers & Better Financial Results, 2015
So co-browsing is useful. But just how useful can it actually be? Well, apparently it can be VITAL:
Co-browse has the potential to bridge the gap between human & AI-driven customer interaction, & to enable organisations to differentiate their customer service.
By 2022, co-browsing will be used in 2% of customer service interactions, up from 0.1% in 2017 (2000% growth).
Gartner 2017: How Co-browsing Can Differentiate Your Customer Service
LogMeIn has had their Rescue offering available on the general market for a while as a standalone product (alongside the rest of their offerings). They’ve now build it out into a new standalone product called Rescue Live Guide, and provided an integration into Omnichannel for Dynamics 365. Customers obviously need to have licenses for the product, but with these, they now have the ability to co-browse during support sessions. Not only can they see what’s going on, but they can also interact with the customer browser itself, providing an even better support experience.
So, let’s go ahead and take a look at how to set it up, the experience itself, and my thoughts on things.
Setup
When I first started testing out the LogMeIn offering, I had to go through a manual install process. This was due to the product just being released (in May 2020), but wasn’t actually that difficult to carry out.
However, they were in the process of switching over to an automatic installation through AppSource, as most of the other apps have. It’s great to be able to see that this has gone live, and is now available for users – it really does make the install that much easier!
Clicking ‘Get It Now’ takes you through the usual route of installing a solution from AppSource: selecting the environment, confirming the installation, etc. After around 5 minutes, I can now see the following:
Once it’s installed, we’ll need to set it as the co-browse provider for the channel that we’re wanting it for. To do this, open the chat record, go to Conversation Options, and select it there:
We’ll also need to put in two records for the LogMeIn co-browse configuration:
Finally, there’s a script block that needs to be added to the webpage where the chat widget is located. This enables the LogMeIn co-browsing ability from the customer side. It can be added right under the chat widget code itself; in the fullness of time, this may be able to be auto-generated as part of the chat widget code, but it’s not at the moment (this is dependent on Microsoft being able to offer it):
Right – setup all done, but before we see it in action, let’s take a quick look at the Rescue Live Guide admin console side of things.
Rescue Live Guide Admin Console
Although the functionality is within Omnichannel for Dynamics 365, administering agent licenses and groups takes places within the Rescue Live Guide admin console at https://console.logmeinrescue.com/admin. As companies will need to have Rescue Live Guide licenses, they would usually be familiar with this.
There’s the ability to create new users or groups, and manage them as well:
It’s also possible to set the names that are used for the agent & customer. These can be either the actual name of the agent, or instead potentially a job role/title:
I’m not going to go further into the admin functionality here – documentation can be found on the Rescue Live Guide site around this. Let’s instead take a look at the experience within Omnichannel, which after all is what we’re here to see!
Agent Experience
So how does this actually work, in practise? Well, from the customer side, they start a chat like they would usually do. When the agent responds, they’re given an option for ‘Live Guide’:
When the agent clicks on this, two things happen:
Firstly, there’s a URL that’s posted in the chat. This contains a link for the customer to click, with an auto-generated ID number
The agent is taken to the LogMeIn Rescue site page in a new tab.
Note: At the moment, the agent will have to sign in manually. LogMeIn have told me that their roadmap includes Single Sign On, so that after the initial setup they’ll be signed in automatically, and not have to perform this step in the future.
Once logged in, the agent will see that the session is ready, & waiting for the customer to connect to it. Once the customer has clicked the URL provided in the chat, it will open the Rescue Live Guide session, and authorise the agent to co-browse with them. They’ll then see the following prompt. This tells them that the session is connected to the agent, and that they can begin:
Once the customer has accepted to start browsing together with the agent, they get some small extra items appearing on their screen:
They can see that there is indeed a shared browsing session happening
They can also see where the agent’s mouse cursor is pointing to (by default, without the agent actually doing anything)
It’s important to note that that the co-browse session is taking place within the specific browser (tab) that is open. Therefore if the user navigates away, the session is paused until they navigate back to it.
On the agent’s side, they can view the customers browser. They can only see what’s happening in the actual tab that’s open for the co-browse session (see below for some more information around this though). It’s quite similar to the customer’s side, though has some LogMeIn features available. Well, obviously it’s similar to the customer – the agent is seeing the customer’s browser window!
They can of course still access the Omnichannel chat itself, and send information through that as well if they wish to.
Just as the customer can see the agent’s mouse position, the agent can see the customer’s mouse position. There are also gesture indicators so that each person can see what the other clicks etc as well, which can be really helpful when walking through a process.
The functionality currently available to the agents covers scrolling (within the page), highlighting, drawing and ‘virtual tabs’. As shown in the image above, the agent is able to highlight text/images, which will then be displayed as being highlighted to the customer. Agents are also able to enter text into text fields, click on buttons, and interact with the native webpage functionality.
Note: The Rescue Live Guide admin centre provides granular controls around these, so that customers can allow agents certain rights, rather than allow them to do everything.
The agent is also able to ‘draw’ on the webpage to be able to point something out, highlight a part of the page, etc.
Note: These annotations will disappear once the customer or agent starts scrolling up/down the page again.
As I’ve mentioned above, the session is taking place within a single browser tab. If the user nagivates away (to a different tab), the session is paused. The agent isn’t able to see any other tabs. So what happens if we do indeed need to open a new tab for something?
Well, there’s a really nice feature that the agent is able to use for this. It’s sort of a ‘virtual tab’ within the browser tab. Sounds interesting!
The customer is able to see this, and can navigate between the tabs. They’re now also able to open a new virtual tab themselves (which is an update to the functionality – originally they weren’t able to, and had to request the agent to do it).
If the customer wants to pause or stop the session, the user simply has to click the ‘Stop’ button in the bottom left. They’ll then be presented with the following screen:
Whilst the session is paused, the customer can continue to use their machine as normal, but the agent won’t be able to see what’s going on. Only if the customer allows the session to resume by clicking ‘Continue Browsing’ will the agent be able to see the customer’s browser once again.
Alternatively, the agent can end the support session themselves, and the customer will be notified about this.
Suffice it to say that LogMeIn have been a market leader for many years in this sector, and I’m happy that sessions through their products are adequately encrypted & protected.
Other functionality
Apart from the above, which is obviously the core of the product, there’s other functionality that’s possible to enable through the LogMeIn Rescue console:
Session recordings. It’s possible to record these for playback, which is then available from the LogMeIn portal. All recordings are carried out from the agent’s viewpoint, not the customers – there is therefore no issue that sensitive information from the customers side could be seen
Data masking. It’s possible to use data masking to hide sensitive information. At the moment the setup for this is a very manual process, so I’m not going to go into how to set it up it here. Having played with it a little, it’s really quite useful. Agents can’t see sensitive information on their screen, and if a customer needs to enter/update information, the session pauses whilst this is being done. However I understand that part of the LogMeIn roadmap for the near future is to make the setup process much more user friendly. When this is released & available, I’m planning to do a post on this
Reporting happens through the LogMeIn portal (see my thoughts below on this). It looks nice, and can be downloaded as a CSV file. Again, the functionality of this is going to be expanded in the near future.
My thoughts
Having gone through testing out the product, I think that LogMeIn has brought a really great product of theirs into the Omnichannel experience. I used to use their products regularly (I ran an IT MSP some years back, in which we used LogMeIn products as well), and always found that they behaved well.
Now having the ability for agents to not only see, but also interact with the customer browsing experience really does take things to the next level. Audio and/or video support is great of course, but sometimes being able to see what the customer is seeing in their browser results in a much quicker resolution. This of course results in happy customers, which is what we’re striving to achieve!
As I’ve said above, I’ve used LogMeIn over the years, and always found their products to be pretty much amazing. With Rescue Live Guide, there are several differentiators that the solution brings to market:
For the standalone solution of Rescue Live Guide dedicated web resources aren’t needed. It’s an easy solution to set up, and for the customer to engage with – all it requires is a URL to be provided to them to get the session going. Obviously, as mentioned above, there is some slight coding needed for the Omnichannel integration, but this is really minor. Any company having Omnichannel installed/configured will already have power users/admin familiar with what’s needed for this, so it’s a very small additional step
It’s possible to co-browse on any website that the customer wants to, not just a single specific website. Once the co-browse session is active, the customer can change to any other website, as long as they do so within the co-browse session tab. Most other co-browse solutions out there can’t do this, so this is a really strong point in favour of this solution.
The data masking is really cool, and for most customers, will be a ‘must have’ rather than ‘nice to have’. I’m looking forward to when the setup for this is updated to be more business-user friendly, and will then do a separate blog post around it, together with a video!
A few things that I think would be nice to have:
The agent is already able to draw on a webpage during the co-browse session, and select different colours for this. It would be great if the agent could also type text in to display on the screen (not in a specific field) in colour. Sometimes being able to see an example written in front of you (without it going into the actual field) can be quite handy.
Being able to transfer the co-browse session to another agent. This could be either another Omnichannel agent, or a separate specialist team. It is of course possible to transfer the chat session to another Omnichannel agent, but then they’d have to start the whole co-browse session again (with a new PIN, etc)
Reporting (for the most part) all occurs in LogMeIn at the moment, as Dynamics 365 only has very limited reporting on this natively. However I understand that this is due to change at some point this year, with the ability to report properly on it within Dynamics 365 itself.
At the point when new items do get released, I’ll be aiming to do a review of them, and add to the knowledge around the product.
So, with all of that, how do you think this could best help you & your customers? Please comment below – I’d love to hear!
Previously I’ve touched on how it’s possible to use Azure Active Directory for Dynamics 365 security. This can be of great benefit to an organisation, especially when needing to invite in external users. The details that I go into around it can be found at Dynamics 365 Security & AAD. As I point out there, it’s a very helpful feature, and can also help with onboarding new users within an organisation.
What I’ve found out about it, however, is that there can be some very interesting little quirks with how security actually works. Originally I thought it was a bug, and raised it with Microsoft Support, but it turns out not to be. Let me take you through the journey that I experienced last week…
The scenario is as follows. We had security set up in place, which was working perfectly (or so we thought). We’d gone through all of the following steps:
Create Dynamics 365 security role/s with appropriate permissions
Create AAD security group
Create Dynamics 365 AAD Security Team, and link it to the AAD security group
Assign users to the AAD security group
This was working exceptionally well (except, of course, when the external users hadn’t followed the setup instructions correctly). Users were logging in, searching for information, creating/updating records, etc. All was good…or so we thought.
Now, the users who are actually using the application don’t have a Dynamics 365 background. It’s the first time that they’re using the specific system, and as such, are going through a learning curve. We’re not expecting them to understand the advanced functionality at this point, though some of them are indeed venturing further/deeper into the capabilities that it brings.
One of these, of course, is the Advanced Find. Now, those experienced with Dynamics 365 will know all about it. There are good points, and there are not so good points. Functionality in it has expanded over time, though to be honest it’s still easier to run a SQL query/extract for more advanced information retrieval.
Users seemed to be fine with the Advanced Find. We showed them how it works, how to filter, set up columns, etc. We even showed them how to export data to Excel, and keep a live data connection back to refresh it!Brilliant – they were most pleased.
Then I got an email in from a user needing support. They reported that they weren’t able to save custom searches. This is of course very helpful, in order to avoid having to set up the same search/layout every time. This seemed puzzling to me, and I started to take a look into it.
I was able to replicate the problem immediately with a test user, having assigned it the same security role. Opening the log file (which can be extremely helpful at times with troubleshooting), I looked to see what the issues were. I was thinking it was a problem with security permissions – if I assigned the system administrator role to my user, everything worked just fine.
In my error log, there were repeated references to ‘ObjectTypeCode”:4230’. This is the View settings in the security role. I therefore went to the security role, and ensured that it was set to allow access to Saved View across all permissions:
Right – permissions set, all should be good. Let’s go ahead & try to save an Advanced Find as a view…but no! It’s still not working, and showing the same error message!
What I then tried to do was apply the security role directly to the user, rather than through the AAD security team. To my surprise (well, not really, actually), it worked. I was able to save Advanced Find views. I changed back to the user getting permissions through the security group (ie not directly), and again I had the issue.
OK – so I thought I had discovered a bug. As far as I was aware, I couldn’t see any reason why the user wouldn’t be able to save the Advanced Find view. After all, they’re able to create & save records within the system. There surely shouldn’t be any difference between saving records, and saving an Advanced Find view?
My next step was to raise a support ticket with Microsoft, and then carry out the obligatory ‘show & tell’ to the support agent. Ivan (the agent assigned to my case) was very helpful, understood exactly what I was trying to accomplish, and what the issue seemed to be. I left him with the support case, and focused on trying to find a workaround for the situation.
After a few days, Ivan came back to me with a resolution. It wasn’t a bug in the system (which was a shame – I was looking forward to having it attributed to me!), but rather a specific case of permissions.
See, there’s something called ‘privilege inheritance’. In a nutshell, there are two ways of giving access through a security role:
User privileges. This is when the user is given the permissions directly
Team privileges. This is when the user is given the permissions as a member of the team. If they don’t have User privileges of their own, they can only create records with the team as the owner
Users were able to read, create, update records without issues, as the team was the owner of these records
However as views need to be owned by a user (though they can be shared with a team), the user was unable to save them!
Thankfully it’s quite easy to fix – on the security role itself, you change it here:
With this then in place, everything then worked just fine. The user was still getting the role through the Security Team, but was now able to save these directly.
Quite an interesting little quirk, but one that is likely to come in useful when looking at other functionality within the system.
Have you come across this before? Have you found anything else that seems a little strange? Comment below – I’d love to hear!
Recently I’ve been doing a LOT of work with canvas apps. As I think I’ve mentioned before (at least once or twice!) my background is the traditional ‘model’ style app. As a result, it’s been quite a steep curve to skill up, but I think I’m handling it alright. I’m (slowly) getting used to the way that canvas apps work, the ability to put different controls on the screens, and reference each other.
Heck, I’m even starting to play with more advanced navigation concepts, based on some REALLY great ideas that I’ve seen (Clarissa, I can’t say how grateful I am to you for all of your assistance & guidance!).
Amongst all of this incredible & wonderous journey, I’ve also been learning some code. Yup – you heard me correctly! I’ve always said that I’m not a developer – I respect them greatly, but I don’t develop code.
True, I’ve picked up some SQL here & there, and will freely admit that running SQL queries against the Dynamics 365 database is SO much more powerful than running an Advanced Find. Of course, it’s necessary to know the joins, conditions & such. Redgate’s SQL Helper has been amazing along the way. With moving to cloud systems, things got a little more….complicated. XrmToolBox has the SQL4CDS tool which I’ve used several times, but I was really excited by the recent announcement/release of being able to (properly) run SQL commands against the CDS database from SQL Management Studio….
Anyhow, I’m digressing. So, I’ve been needing to learn canvas app style code. It’s like Excel commands, though (slightly) different at times. Things don’t always make sense (to me, at least) – I STILL haven’t figured out why some expressions need to be in a certain order. After all, according to mathematical principles it doesn’t matter if you write A>B, or B<A. Going to still need to wrap my mind around all of this.
In short, Patch allows you to set record values from places other than a form table to the data that you’re saving. It also allows you to save field values that aren’t available on the canvas form table (due to limitations). I’ve referred to this previously at https://thecrm.ninja/canvas-app-record-set-regarding-field/. The scenario that I talk about there is just one of the things that can be done in this way. Since that post, we’ve come a long way, and are doing most things with Patch statements (due to the scenario requirements).
So that’s all well & good. However, there IS actually a reason for me writing this blog post….crazy, right? And it’s not to waffle on and on about patch statements. It’s about a very specific scenario that we hadn’t come across to date, but that came up last week.
Now, obviously you’re now VERY interested in hearing all about it, and learning for your own situations. I mean, otherwise you wouldn’t have stuck with me through this article for so long. So, let me set out what happened.
As mentioned above, we’re mostly using patch statements throughout this specific app. That’s….quite a lot of patch statements (especially as we also have IF statements governing which one is being used, as it’s not possible to use IF inside a patch statement, but I’m digress…). I’d say we’re pretty familiar with this now.
However, even with being familiar with it, we suddenly had a problem. One of the forms that we’re saving down started to NOT save down. Records weren’t being saved, which obviously is a problem!
Bear in mind here that we hadn’t touched the code for this specific action for a few weeks. Nothing had changed in our code, and nothing had changed from a platform perspective (ie Microsoft hadn’t changed any of the underlying functionality.
Going into the statement, we immediately started testing it out, and saw something interesting. We were getting an error that a required field could not be NULL:
This was quite puzzling – although in a model app we can set fields as required, and users can’t save the record until they populate it, this isn’t true in a canvas app (well, when using Patch, at least). See, it’s technically possible to use a Patch statement to create/update a record, but you don’t have to pass in required field (values). It’s a sort of workaround (& can be used in some scenarios for benefit, actually). So this happening all of a sudden was quite strange to us.
It was even stranger as we hadn’t been using the field on the form at all. The field that was being referred to was being used for a totally different process, in a different team, & not surfaced into the canvas app at all. This really was causing us to scratch our heads, and try to think (more) out of the box. It didn’t seem to be the code (we could set a value in code, but didn’t want to as it wasn’t relevant), yet we weren’t able to ignore it. Really frustrating!
With all of this in mind, I decided to go back to absolute basics after a few hours of troubleshooting. The field that seemed to be causing all of these issues was a relatively new addition, so I checked all of the details around it:
Was the field type correct for what it should be? Yes
Was it set as required on the CDS field definition? No (not that I thought this would help, but still checked)
Was the field on the entity form? Yes
Was the field set as required on the entity form? No (again, I didn’t think I’d get any joy from this)
Hold on….on the form designer it’s not set as Required. But when I open the form, and put some values in, suddenly it IS required.
Aha! OK – I’m now starting to see some light shining on this. I headed over to Business Rules to check out what might be there. Lo & behold, there was a business rule that set the field as required (when certain conditions were filled). An example of this would be:
Now this field hadn’t been in place when the code was developed (as mentioned above) – it had come in since. I was very curious if a Business Rule could require canvas apps to set the value, and so did some testing.
Disabling the business rule removed the error from the patch statement. Re-enabling it caused the issue again. OK – so we’ve found what’s been causing this, and could put in an adequate solution to handle it.
So in short, if you’re setting a field as being required through a Business Rule, you’re going to need to address it in any canvas app as well (that’s saving data down to the same form that it’s appearing on). Why it actually happens, when just setting it as Required on the form doesn’t, I have NO idea.
But it’s a good concept to keep in the back of your mind, I believe. Especially if there are multiple people working on developing a single entity, as otherwise you could find yourself in exactly the same scenario that we did!
Have you come across anything like this, or a different piece of strange behaviour? Comment below – I’d love to hear about i!
Recently I’ve been expanding my knowledge of Power Automate, and how it works. It really is a truly amazing tool, though there can be some quirks to things! There are so many connectors to use, though I haven’t really used that many of them to date.
Truthfully, most of my work in Power Automate is around CDS & Office 365. Occasionally I’ll dip into another system, but for the most part that keeps me busy enough. It’s not to say I don’t want to explore further, but finding the time can be quite difficult!
One of the great abilities that Power Automate has is to be able to update a record. With focusing on CDS entities for the moment, we would use the inbuilt action for this:
We’d run a query to get a specific record – this would give us the record ID (or GUID, depending on your preference). With this, we’d use the Update Record action & pass in the record GUID. After all, we need to know which record we’re going to update! So for example:
What we can then do is set values for the record. So we can pass in Dynamics Content, use Expressions, etc. These can be from records that are part of our Power Automate query chain, or from elsewhere.
For example, I can say that when a contact’s postcode changes (or zip code for USA), go away, look up the new city, and update it (Note: I haven’t shown the postcode lookup part below):
So this is all really brilliant. Different fields have different behaviours, of course, and we need to respect that. Otherwise the Power Automate flow won’t run, and will error. This is, of course, the digital equivalent of not trying to force a square brick into a round hole!
What we can also do is clear a field value. If for example we’re wanting to remove a value from a field, we can use the NULL expression on the field. When the Power Automate flow runs, it’ll clear whichever value the field is currently holding:
Now, one of the the field types available within CDS is the lookup field. I’m not going to go into what this is, as we should already know this!. We can, of course, set lookup fields values to populate the field, which works as expected.
However (& thanks for bearing with me so far), what happens if we want to clear a lookup field value?
Say for example that we have a task, that’s assigned out to someone. If they reject the task, we want to be able to remove them from the task record. We wouldn’t delete the task, as we still need it (& now would need to assign it to someone else). We need a way to do this.
I can hear what you’re thinking right now – mentioned above is the use of NULL, so we’d use this! Um…well, you’d think so. You can try that, but we’ve found that doesn’t always work. Additionally, that doesn’t actually seem to remove the underlying relationship that’s been put in place.
Update: Thanks to Lin Zaw Winn, who dropped me a line to let me know further information around this. The standard CDS connector (the first one that was available) allowed this to work, but the updated CDS connector (Current Environment) doesn’t allow it. Unfortunately the different connectors aren’t at parity, which is a pity!
So, there’s another way to clear lookup field values. This involves the Unrelate action that’s also available. The steps for this are as follows:
Get the related record (lookup the record type, pass in the GUID for it)
Use the Unrelate action to remove the connection
This will then remove the relationship, which actually results in clearing the lookup field value. In practise (for our scenario), this would look like:
Let’s take a bit of a further look at the options available here:
The Relationship field is the relationship between the two entities (eg here it’s Contact & Task). Thankfully you don’t need to manually type this – it’s easily selected from a dropdown list.
The URL field is the linked record itself
Note: It’s VERY important to have the Entity Name & URL values in the right order. I’d suggest looking up the connected record first (ie what the lookup field is pointing to), and using that as the Entity Name value. You’d then select the record where the lookup is saved on as the URL value.
What I’d usually suggest as best practise is to have a condition before this takes place. As mentioned earlier, removing the lookup would happen on a record update. This is because you wouldn’t be removing a field value if you’re creating the record!
But you’re not always going to want it removed. In the scenario that I’ve been dealing with, we’re only wanting to remove the volunteer if they’ve rejected the assigned task. So our Power Automate flow is set out like this:
When Task record is updated
Filtering on the field for ‘Task Accepted’, as we could have other things being updated on the Task record that we don’t want to trigger this particular process
Condition to check the ‘Task Accepted’ field value
When it’s something other than ‘Rejected’, cancel the flow
When it’s ‘Rejected’, run the Unrelate process set out above, and stop flow
You can obviously build out other functionality within it as you so desire.
So with this in mind, how do you think you could benefit from this? Drop a comment below – I’d love to hear!
I come from an ‘on-premise’ background. I’ve spent years in organisations with on-premise systems such as Dynamics 365. Take me into a server room that’s alive with whirring fans, and I get quite nostalgic. Those were the days…well, in some ways, anyhow. But having recently discovered some quite helpful functionality, I thought I’d share it with others!
See, when it came to Dynamics 365 security, there was no way to automate things. Yes, users had to be created in Active Directory (and also, in a folder that the Dynamics install could refer to within AD!), but they had to be manually added to Dynamics 365. There was no way to automate this (from recollection – then again my memory grows dim with the fog of time).
So what the system administrators needed to do was to manually go to Settings/Security within the system, and there they could either add a single user at a time, or multiple users. They would then assign role/s (for multiple users, all of the users would need to have the same role/s – it wasn’t possible to modify individual users within this process).
One way to slightly speed up time in handling different security roles was to have teams, relating to the business needs. The security role/s would be created, assigned to a team, and then any user added to the team would automatically get all of the permissions that they needed.
Then came the heady world of Dynamics 365 being online! Well, nothing much changed really, at least not for a little while.
But then, things really did change, in May 2019. Functionality for security teams within Dynamics 365 was increased. Notably, there was now something called a ‘AAD Security Group Team’:
So what was this magical new item?
When we create a team, and we set the Team Type to ‘AAD Security Group’, we’re now able to set an AAD Object ID. In fact, it’s required! After we’ve created this object within Dynamics 365, we can then apply security role/s to it directly (as we could to any other team records beforehand):
Let’s take a moment to reflect & think on this. Until now, we’ve had to handle security directly within Dynamics 365. Now, we have the ability to have an Azure Active Directory (for that is what AAD stands for) group, and reference it within Dynamics 365.
Suddenly new possibilities open up. As part of the on-boarding process (for example) we can users to specific AAD security groups, which will then give them access with appropriate permissions within Dynamics 365. We’re also able to have multiple AAD groups, each inheriting a different set of Dynamics 365 roles, and thereby create a multi-layering approach to different business & security needs.
We’re also able to use tools such as PowerShell, LogicApps, Power Apps & Power Automate to carry out automation around this. There’s an Azure AD connector (https://docs.microsoft.com/en-us/connectors/azuread/) which gives the ability to set up & administer these.
We’re actually using this functionality now in some of our COVID-19 response apps. Instead of needing our own support desk to manage the (external) users, we’ve provided an interface where client IT departments can quickly log in, upload a list of users, and assign them to the relevant AAD group/s. It’s very quick, and allows the users to onboard to the Power Apps within minutes!
So with knowing this, how do you feel it might help benefit you? Comment below – I’d love to hear!