Environments & ‘Admin Mode’

With some recent events happening (both professional & personal), I’ve taken a slight step back from putting out posts on here. Thankfully things seem to be settling down, so I’m getting (back) into the swing of things!

I thought that it would be good to talk about a subject that I fell ‘foul’ of recently. This is around environments, and more specifically, the ‘admin mode’ that it’s possible to use on them.

So what exactly is this ‘admin mode’? Well, the aim of it to restrict access to certain users, namely System Administrators & System Customisers. Why would we want to do this? There are several scenarios that come into mind:

  • Performing a system upgrade (such as enabling new features)
  • Changing environment type (eg Production to Sandbox, or vice-versa)
  • Restoring an environment

Essentially, any time we have operation-type work that we’re wanting to carry out. This way whatever we’re doing won’t affect users, and anything that the users are doing won’t affect things either (symbiotic relationship there!).

So as an example, if we’re doing a major release, which changes functionality within a system, we wouldn’t want users in the system carrying out their usual work, as this could have data issue if saving during the actual release. We of course SHOULD be communicating to users that a release is going to take place, and that they shouldn’t be in the system at the time, but ‘admin mode’ is how we can truly enforce it.

Something to bear in mind as well is that if you’re going ahead & restoring an environment to a previous state (whether that’s an automatic save point, or a manual one), it will automatically put the environment into ‘admin mode’ once the restore has been completed. This is very important to keep in mind!

There are three settings around administration mode:

  1. ‘Administration Mode’. This sets whether admin mode is on or off!
  2. ‘Background Operations’. This sets whether background processes, such as workflows, power automate flows, and Exchange synchronisation are enabled (allowed to happen) or disabled (stopped from happening
  3. ‘Custom Message’. This allows you to set a custom message that users (who are not system administrator/system customiser) will see when they attempt to access the environment

So this is the scenario that tripped me up a few weeks back:

  • I was needing to restore an environment to an earlier save point (to be clear, this was NOT a production environment)
  • I went ahead with the restore, and it completed successfully
  • Given that I was doing this at night, one of my children woke up, and I had to deal with them
  • I came back to things, saw that it completed, and then went ahead with the release that I was needing to do

All seemed to go well. However, when users were testing (which admittedly was a few days later), they reported that some functionality wasn’t working. This was strange, as it had been working before the release (& the release that I did hadn’t actually touched it!).

It turned out to be Power Automate flows that just didn’t seem to be running. OK – I started to look into them, but couldn’t figure out why they hadn’t run.

Creating a test Power Automate flow didn’t seem to work either – despite running it to test it, the trigger never activated! I was quite puzzled by this, and couldn’t (initially) work out the reason.

Then I thought to check environment settings! Lo & behold, the environment was STILL in administration mode, and the Background Process option was disabled! Aha – I’ve found the source!

Flipping this out of administration mode thankfully then allowed all Power Automate flows to work/run, and users confirmed that functionality was indeed running as expected. As you can imagine, I was quite relieved!

man in white shirt and black pants standing on black concrete bench near white building during

Something that I hadn’t realised previously is that if you manually put an environment into administration mode, it doesn’t automatically disable background processes. However, if you restore an environment, it DOES disable background processes by default. So if you’re wanting to try out automation items within a restored environment that’s still in administration mode, you’re going to need to ensure that you toggle the Background Processes toggle to allow it to work!

One further thing to learn as well (which I’ve been asked already by some people, so thought that I would mention it here). I’ve mentioned above that users were in the system, but reporting that things weren’t working. Now given that the environment was in administration mode, people have asked how users could be in it! The answer is that these users actually had the system customiser role applied to them, which is why they could get in! If they hadn’t had the role, then perhaps I might have realised things a little sooner (ie that the environment was in administration mode).

So a (good) little lesson learned, and I’ll definitely take it forwards. Has this, or anything else like it, ever tripped you up? Drop a comment below – I’d love to hear!

Working with Opportunity Close table

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

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

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

So let’s get started then!

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

Working with Opportunity Close

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

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

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

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

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

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

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

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

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

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

Challenges with data

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

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

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

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

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

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

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

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

Power Automate to the rescue

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

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

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

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

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

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

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

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

Caveats

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

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

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

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!

Keeping belief in oneself

Although I usually post around technical matters & such, occasionally I digress into personal reflection. After all, this is my personal blog, & I feel it’s sometimes good/relevant to share certain personal things. Today’s post is along those lines, though it does relate to a technical matter.

Let’s set the scene. As many of you know (either from knowing me personally, or from reading my blog posts), I’m from the ‘model-driven app’ background. Canvas apps are really cool, but I wouldn’t say that I’m a very advanced creator of them. I’m learning the whole time about them (well, when I have a free minute here & there). There are many people in the community who are extremely more advanced than I am, and I love being able to learn from them.

I’m also considered to be in ‘Delivery’, This is the fancy word for those who run/are involved in projects, rather than selling concepts to clients. I’d run a mile if someone tried to put me in a Sales role (though I do admire the power suits that Sales have, occasionally). I’ve done a bit of Pre-Sales (where I’m helping out from a technical perspective), but haven’t been heavily involved. It’s actually something that I’m trying to work on, with being a tech evangelist. After all, if people already know/rave about the tech, how can you evangelise about it to them!!

Account Managers vs Sales People - davidmarkshaw

So last week I get a call from our Sales team. They’re really nice, and know their stuff. However they’re not ‘techies’. They had a situation – we’d been talking to a client about a potential project, and the client told us to pitch for it. Brilliant, right? Well…

The client told us that we had 4 days until the pitch deadline. Not only were we needing to pitch with the usual presentation pack (however would Sales operate without PowerPoint…?), we also had to do a live demo. Not for a completed product, but rather a Proof of Concept (PoC).

The only person available was….yes, you guess it…me. There wasn’t anyone else around with the necessary knowledge/skills to create the PoC in the time-frame needed. I’ll freely admit that I was absolutely slammed with existing projects, but wanted to be able to help out.

However, things then got ‘better’. And by ‘better’, I meant ‘interesting’. I got told who else was pitching to the client. Obviously I’m not going to mention any specific details here, but I knew who they are. More importantly, I figured that I had a very good idea of who from their side would be creating the tech, & doing the pitch.

Now as I’m not mentioning any identifiable details, I’m feeling free to say this. They’re not at my level of tech skills. They’re nowhere NEAR my level of tech skills. This is NOT because I’m better than they are. Totally the opposite – they’re SO far ahead of me with their knowledge of things, I can barely see the dust that they kick up in a race.

Knowing this, I knew that I couldn’t build a model-driven app (though it would have worked perfectly for the scenario/s we were given). I HAD to do a canvas app. But even with doing that, it wasn’t going to be anywhere near as good as what the other side would be able to put on.

The phrase ‘gibbering in fear’ does come to mind with my reaction to finding all of this out. I did feel slightly like a deer caught in the headlights. I wanted to do well, both for myself & my company, but I honestly had no idea how we could stack up.

Deer in the Headlights: By Generation Success – Generation Success
How I felt I looked like!

Thankfully, my company has an extremely open culture, and I was therefore able to talk to my manager about it. He understood where I was coming from, but encouraged me to go for it & do what I would be able to create.

My wife also encouraged me to go for it. Well, actually her words were ‘it’s not sexy when a husband says that he can’t do it, so man up and go for it!’. Ha…after that I couldn’t very well NOT do it.

So I applied myself, and with some VERY late nights (I did have other projects on, as I mentioned above), managed to get something in place. Not only did I create it, I think it looked really good. There was some really nice (canvas app) functionality, and it all came together pretty well.

Everything was in place in time (including some last minute tweaks). I even decided to spice up the demo a bit, and borrowed some dinosaurs from the kids to use for personas. We were using live camera feeds for part of the demo, and suddenly the demo was joined by ‘Rexy’, the ‘Customer Service Representative’ T-Rex! They were quite amused by it (thankfully!), and our team thought it was absolutely hilarious.

Hire A Dinosaur - Creature Events
‘Good afternoon, how may I be of assistance?’

I have no idea how the other partner pitched to the client, or what the decision will be from the client. It’s way too early for that.

What I do know is that sometimes we can lose track of ourselves. I’m not going to go into the subject of ‘Imposter Syndrome’ (check out Em D’Arcy if you want to read up about that). Rather that having others around to encourage us, even though others may be more skilled, can really make the difference.

In life, we can often face challenges. How we handle them, and how we decide to move forward, can define who we are. When dealing with technology items such as the Power Platform, where there’s constant change, it can sometimes feel very daunting, but we still need to push ahead.

Yesterday I was listening to Lisa Crosbie talking about her journey into technology (and canvas apps). As she put it – ‘there is no comfort zone here – you need to find a place to feel comfortable with this level of discomfort, and ride it to be successful’. It’s really so true. It’s not just needing to push ourselves in the traditional way, but to keep up our own confidence in our skills & abilities. With this, we can continue to drive forward, keep on learning, and continue our journey of greatness!

I’m really glad that I was able to do this, and hope that I can keep this with me. By doing so, I’ll be able to continue along my own journey.

Have you ever had a time when a challenge seemed insurmountable? How did you cope with it? Drop a comment below – I’d love to hear!

MB-600 Solution Architect Exam

I haven’t really touched very much on any exams that I’ve taken so far during the lifetime of this blog. I’ve mentioned them a few times (ie how important they can be), but haven’t really gone into detail.

However, having seen various comments online recently around the MB-600 exam, I thought I’d do a post on it with my thoughts and comments!

So, what is the MB-600 exam? Well, it’s sort of the ‘Holy Grail’ for Dynamics 365/Power Platform. This is due to the actual full name for it – ‘Exam MB-600: Microsoft Power Apps + Dynamics 365 Solution Architect’. Indeed – assuming you pass it (and you’ve already passed the MB200, and either the MB210. MB220, MB230, MB240), you can officially refer to yourself as being a Microsoft certified ‘Solution Architect Expert’.

Impressive!

The exam was being talked about at the beginning of 2020, and went live (in beta) on Jan 27th 2020. If you’re wanting to book it, do so at https://docs.microsoft.com/en-us/learn/certifications/exams/mb-600.

I sat it several days after it went live, and to be honest found it quite challenging. Why was that? Well, when I sat it, there were no learning paths on Microsoft Learn for it at all. Thankfully that’s now changed – there’s a massive amount of great material at https://docs.microsoft.com/en-us/learn/certifications/power-apps-and-d365-solution-architect-expert. If you’re looking to go ahead and do the exam, I’d highly recommend you go through everything that’s there.

I’ve taken quite a few exams since early 2019, and have now taken the general approach to take exams in Beta. Although there can be some waiting until the results are announced, they’re cheaper, and give you an understanding of what’s going on.

I sat the exam through the Proctored option. I’m not going to say too much about that (you can look up online what this is about), other than to say that I feel that Microsoft really should be doing something about the proctored experience. Pearson Vue is in charge of this, but it can be really bad at times (having taken a dozen or so exams this way in the last year, I feel I’m quite qualified to be able to judge this!). I hope that things do get better for this.

So, to the exam itself. Well, I was lucky – there were no Labs in it (yet!). Several case studies, and lots of questions. Quite hard questions as well – make no mistake, they’re out to seriously test your knowledge.

The first thing that I ‘loved’ when starting the exam was the general briefing, which included something along the lines of this absolute gem (this isn’t word for word, as I’m not allowed to write it down during the exam, but it gives the gist of it):

Some question sets may have more than one solution, while others might not have a correct solution at all

Right. So tell me – if there’s no correct solution, what am I supposed to do? I’m still waiting for someone to enlighten me on this matter, as I haven’t found anyone who’s able to explain it….

Now, part of the exam rules state that it’s not allowed to share any of the exam questions. What I’ve therefore included below is an overview of the sorts of things that were covered for 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!).

  • Data imports – what they are, how to go about them, troubleshooting them, etc. Also covering different types of sources
  • Security models, permissions, security types (field level, role, user, team etc)
  • Teams integration. How it’s set up, configured & used
  • Solution patch types. What they are, how they’re applied, how they’re used, benefits & drawbacks
  • BCP (Business Continuity Planning and Disaster Recovery) processes. What option/s should you be considering to ensure your business is fully covered in a disaster situation, how are they configured
  • Portals. What they are, how they’re set up, security permissions
  • Business rules, Business Process Flows, Workflows. What each one does/doesn’t do, benefits & drawbacks, how they’re set up & configured
  • Systems – On Premise vs Cloud. The advantages and/or drawbacks of each type, and the different BCP methods (see above) for each one
  • Data integration. OData vs Custom Service for continuous data
  • SLA’s and KPI’s. What they are, when each is used, how to set up & configure them
  • System upgrade paths and compatibility. How you go about upgrading legacy systems, and the necessary path/s that you have to take for a given version number
  • Customer Service through multiple channels. Which option/s would you select for a given scenario, how would you set it up/configure it
  • CDM/CDM/PowerBI/Azure Service Bus/PowerApps. What is each one, what are the benefits/drawbacks of them, how is each one used, & set up/configuration
  • Licensing Types. What license/s would you need for a given scenario
  • D365 Sales Insights. What it is, what benefit/s it brings, how is it used
  • Data security. How is security used for Dynamics 365 & PowerBI data, how is it set up/configured
  • Field properties. For a given scenario, how would you change field properties and/or parameters?
  • Data Migration. Different options available for this, benefits/drawbacks, resolving issues
  • Form security. What is it, what are the different types of security that’s able to be used, how is it set up
  • Solution management. What are the different types of solutions, how is each one used, what are the associated risks, which option would you use for a given scenario

Wow. That’s a LOT of stuff. Like…an incredible amount. Some of it touches on parts of the system that I’ve never used before (like PowerBI). Other parts are extremely familiar.

I can’t tell you if I’ve passed it or not…YET!. Results aren’t yet out, as it’s still in beta (and from what I’m hearing, it’s likely to be remaining in beta for several months still.

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

Bus Apps At Speed Day

Today I attended a ‘BusApps@Speed’ day (BusApps refers to Business Applications) at the Microsoft campus in Reading. The aim of the day was to give a whistlestop tour through many different applications, including some that I’m not that familiar with (in terms of the functionality and integration). Organised by Chris Huntingford (who also took most of the pictures that I’ve used below), it was really great to learn & broaden my knowledge and understanding of the different applications/functionality that can be used

A quick summary is below:

Image

Chris kicked off the day in his usual style, talking about how the landscape has changed and evolved. Quickly covering abilities that are now present in Power Apps, Power Automate and Power BI with quite some finesse, we were immediately entranced and ready for the rest of the day.

Image

Ruth Forster-Towne from FourVision gave a presentation about Human Resource, which is what Talent has been rebranded to (along with some changes). There were some gaps in the functionality, so FourVision brought several HR ISV solutions to the table to fill these gaps, which is really great to see. The ability to have a standard integration for payroll gives the option for companies to use a local payroll provider in order to be compliant with the necessary legislation (as this can change extensively from country to country!)

Chris Haley spoke about Project for Web, Project Online and PSA. Covering some of the architecture and how best to use each one, it was quite informative as I’ve never used any of them. It was also interesting to hear that DevOps could be included alongside as a project tool, and I’m going to be doing some research into how this would work best.

Image

Afshan Ipsen blew us away with talking about ‘One Version’ for FinOps – we couldn’t believe it’s the first time she’s carried out a speaking engagement at one of these events. Talking through the continual development of the platform, and how to efficiently handle testing the new releases (minor as well as major) on a regular on-going basis. Some really amazing thoughts which can apply to all technology projects really.

Image

Thomas Carroll absolutely wowed us with his presentation on the different Reality series that Microsoft has. Augmented, Virtual and Mixed all bring amazing solutions for being able to help us get better, as well as troubleshoot situations.

Dynamics 365 Guides in particular together with HoloLens can bring the amount of time needed to skill up in a particular area down by a massive amount

Image

Jack Lewis came to talk to us about Microsoft Teams, and the amazingly cool stuff that it’s now able to do. Benefits to people using it obviously include auto-creating Sharepoint sites in the background, but what was amazing to hear was that it’s possible to surface some Power Platform capabilities within Teams itself! Imagine having a Power App right there in the Teams channel.

Paul Henwood gave an amazing session on Power BI and AI capabilities. Demonstrating some of the functionality that Power BI can bring to the table (along with some of the noticeable limits when it comes to data sizes and processing), it was great to learn how AI can really feature. I’ve only played around with Power BI a little bit, and it’s definitely on the list of things that I’d like to take a further look into!

Image

Ana Demeny talked to us about integration architecture, and pointed out very clearly that the ‘right solution’ will always depend on the exact circumstances of the project. It was very clear that it’s vitally important to clearly understand all of the different components that could be used from the entire platform, and apply them in the right way for handling the business scenario, as well as licensing/cost considerations.

Pavlos Vasileiadis talked to us about the importance of having a Centre of Excellence for Power Platform objects (ie Power Apps). Unfortunately I was too engrossed in his session to take any pictures, as it was so excellent! Covering what’s needed to enable a CoE to run and function, as well as how it should be structured for success.

Image

Kaila Bloomfield led the final session, showing how wonderful everything would be if it were all pink! This talked about the capabilities of the different options of Power Platform versus Azure functionality, and that it’s not always a case of just being able to use Power Platform components without running into issues.

Omnichannel – Data Masking Rules

There are various scenarios in which companies would be quite keen to utilise data masking rules. Examples of these include:

  • Masking credit card details, so that firstly the company isn’t required to comply with credit card handling information requirements, and secondly (and potentially more importantly!) there’s no risk of an agent copying down a credit card number, and using it fraudulently
  • Masking personal information – if a customer mistakenly types in their Social Security Number, UK Tax Reference, etc, then the company is likely to want to avoid having their support agents seeing this sensitive information
  • Socially offensive language – companies will be extremely keen to avoid having their staff exposed to offensive language and behaviour

There are obviously other examples of these as well – you can feel free to let your mind run free as to the possibilities.

Omnichannel for Dynamics includes what are referred to as ‘Data Masking Rules’. Using these, you can create rule/s that will then be used to identify the undesired words (or other types of data) within a conversation, and these will then be automatically masked with the asterisk (*) character. Data masking works for chat and async channels.

Now, a few things to keep in mind. Data masking is done through the use of regular expressions, also know as ‘regex’ (when I heard this, I needed to go and look up what a ‘regular expression’ is, as I had no idea! If you have no idea as well, take a look at https://en.wikipedia.org/wiki/Regular_expression , which has a good summary of things).

Currently, there is a HARD LIMIT of 10 data masking rules. Yes, you read that correctly. You are ONLY able to have 10 rules saved. However if you play cool, there’s a way around it, thanks to the way that regex expressions can work.

So, let’s look at how to set up and configure these data masking rules. As with practically everything else that’s set up in Omnichannel, you’ll need to be in the Omnichannel Administration Hub. Scroll down in the left hand menu, and you’ll find it under the Settings section:

Click on it to open, and you’ll presented with a slightly different looking screen than you’re used to. It’s not a general view/list of records – it’s a static screen, with a grid of rules on the right:

The two settings on the left hand of the screen are really quite important. They are:

  • ‘Mask private agent data from the customer’. What this does is mask data that the agent is sending, for both the agent and the customer (ie the agent won’t be able to see the data either, even though they’re typing it). This applies for both live chat and async channel messages.
  • ‘Mask private customer data from the agent’. This will mask data that the customer is sending to the agent, for both the customer and the agent. This is only masked for live chats for both; when using async channels, it’s only masked for the agent interface (ie the customer will still be able to see the data)

Note: If only the first option is enabled, then if the customer types in data matching the masking rule, it will not be hidden, and vice-versa for the second option. It’s therefore vitally important to consider all of the relevant scenarios for the company, and apply these settings appropriately.

Note: Data masking isn’t just through the chat interfaces – it’s also how the data is stored. So if you open up a transcript, or get to check the data within the database, it’s also masked there, which means that it’ll allow you to be fully compliant with everything! A side effect of this is that the sentiment analysis

There are 3 rules provided for you out of the box (in an inactive state). They are:

  • Credit Card: Masks the credit card number, if provided in a message.
  • Email: Masks the email address, if provided in a message.
  • SSN: Masks the SSN, if provided in a message.

Opening up one of these shows us how Microsoft is implementing these:

There’s the name (which you can put whatever you want to), and a description (which is always helpful and useful!). Then there’s the regular expression (I’m not going to go into details as to how to actually put these together – there are plenty of resources out there. Take a look at https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference as a starting point). The character used for masking can’t be changed (at this point in time – perhaps in the future they’ll allow this to be changed).

The really great thing from my perspective is the testing area on the right hand side of the form. Here you can input your text, and see if it actually matches the conditions for the regex (or not, as the case may be). This will allow tweaking of the regex etc:

Just please be aware that you need to click or tab out of the ‘enter test data’ field in order for the ‘masked test data’ value to update

Once you have a rule in place, save it, and click ‘Activate’! Otherwise the rule will be saved, but won’t actually work!

Now, remember that I mentioned above about the limit of only TEN data masking rules? Well, here’s a great little tip as to how to work around this, as there are many legitimate examples of needing many more than ten!

So how do you go about doing this? Well, it goes something like this:

  1. The ‘Regular Expression’ field is actually of type ‘Text’ (with it being ‘Single line of text’). This means that it can actually hold up to 4000 characters in it (according to https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/customize/types-of-fields )
  2. There’s a cute little character that exists – this is the ‘|’ character (also known as the pipe character)
  3. Using the pipe character, you can separate regex expressions, which will be evaluated separately
  4. Therefore you can ACTUALLY have multiple regex expressions in a single data masking rule!

Let’s see this is set up!

And now to see it through the actual interface:

So with this, though it might take a bit of time and testing (and double-checking, to make sure it’s working absolutely correctly, of course), it’s possible to have quite a lot of regex expressions for you to use!

Quick Responses in Omnichannel

We’ve all had these types of scenarios. You know, when you’re needing to type the same response (or similar ones) time and time and time again to customers. Or alternatively queries can be grouped together under different topics, and you just wish there was a way to quickly and easily answer these, rather than manually answering each customer.

Thankfully, there is indeed such functionality within Omnichannel! No longer do you need to type out general responses (or indeed custom responses) each and every time that a customer requests some information about something, or when helping them out.

In Omnichannel, these are called ‘Quick Responses’, and are really incredibly easy to use.

As a default, the system ships with some quick responses already loaded in, and available to use. This covers usual circumstances such as ‘Hello, how may I assist you?’, ‘Your patience is appreciated. I will be with you shortly’, and also ‘This chat service is permission based. Before a chat begins, no data is collected about you beyond the information which websites usually collect. Once an invitation is accepted, all chats are monitored for quality assurance purposes. Any information gathered is for internal use only.’

In fact, not only are these pre-loaded in English, they’re actually pre-loaded in 23 other languages as well! (at the time of writing, that is – I’m sure there will be more to come)

Now these are all very well and good for generic customer service. What makes this really cool though is that you can create your own ones, and then use them.

Setting them up is really simple and straightforward. Make sure that you’re in the Omnichannel Administration Hub, scroll down in the left side navigation bar to ‘Quick Replies’ (in the ‘Agent Experience’ section), click it, and then click the ‘New’ button on menu ribbon bar:

Give the record a title to identify it by, select a local, and then enter the message that you’re wanting to use:

Now all the agent needs to do in the chat window is use the ‘/q’ command (without the quotation characters, of course). Typing this will bring up the Quick Response window in the chat session.

The agent can then type in a keyword, and the list of available quick replies will be filtered to just those that have the keyword in it:

Note that due to the way in which Omnichannel works, it can sometimes take a little time before the new Quick Reply entries will appear for the agent to use in the chat interface

Clicking on the line that they want to use will then populate the text from that quick reply into the chat window. The agent can modify it if they want to, and then send it to the customer:

This is a really helpful feature, and can assist greatly in speedier responses to customers, as well as cutting down on the time needed for interactions!

Continual development in small steps

One of my resolutions for 2020 is to go out and get books to read, for self improvement – all in the name of getting better at stuff!

One of the books that I’ve read is The Phoenix Project (billed as a novel about IT, DevOps, and Helping Your Business Win). It’s been a real eye opener as to how we may currently go about projects, and what would be a much better approach. The thinking behind it is to look at how to best use DevOps.

Incidentally Tricia Sinclair has recently started talking about DevOps, and is REALLY knowledgeable on the subject. I’ve had many conversations with her, and her breadth of information and understanding is second to none. I’d really recommend that you go check out her blog at https://triciasinclair.com/.

There are several ideas/concepts that I’ve taken out of it. One of the main ones (as far as I’m concerned) is about continual improvement, and doing this in small steps.

It’s not about massive changes in life. It’s about identifying something (small) that can be changed/modified, and implementing a new regime around it, or a new way of doing it. This way you can train yourself into a new habit, which will take you forward. Once it’s settled in, pick something else, and then work on that.

The effect will be gradual, but it’ll be noticeable in being better at whatever it is that you’re addressing. It doesn’t just stop there though – improvement in ONE area has shown a noticeable marked improvement in OTHER areas as well across the board.

This concept doesn’t just apply to personal habits – it also applies to technology. Gone are the days (for most people!) when the next updates and/or items were released just in new product versions, or major updates.

Yes it’s true that there are two major releases each year for Dynamics and PowerPlatform (Spring/Fall), but the Microsoft Development Teams don’t work on items and then queue them all up for the major release.

Instead there are items that are released as soon as they’re ready (take a look at https://thecrm.ninja/required-fields-on-forms-what-did-you-forget-to-fill-in/ for an example of this). This is why you’ll be using the system, and suddenly notice that you don’t have as many steps to carry out, or something looks better and works faster, etc.

Every member of the team should feel that their input is valued, and able to be used – this will reinforce the team status. In the Toyota Way (see https://en.wikipedia.org/wiki/The_Toyota_Way for more information) quality takes precedence. Anyone at all, even a ‘lowly’ factor worker, is empowered to stop a production line when they’ve identified a problem.

One of the items in the ‘Toyota Way’ is called the ‘Toyota Kata’. This is a skill-building process to shift our mindset and habits from a natural tendency to jump to conclusions, to a tendency to think and work more scientifically. It’s not difficult to pick up, and recommendations are to practise it for only 10 minutes a day!

Everyone knows that making small improvements everyday is good and everyone wants to do that. But the following questions arise:

  • What to improve?
  • How to improve?
  • How will I know am improving?

The Toyota Kata comprises of 4 steps:

  • Plan. Draw up a list of things to do over the next period of time (one or two weeks). Establish objectives and processes required to deliver the desired results.
  • Do. Carry out the planned items. Small changes are usually tested, and data is gathered to see how effective the change is.
  • Check. The data and results gathered from the Do phase are evaluated. Data is compared to the expected outcomes to see any similarities and differences. The testing process is also evaluated to see if there were any changes from the original test created during the planning phase.
  • Act. This is where a process is improved upon. Records from the “Do” and “Check” phases help identify issues with the process. These issues may include problems, opportunities for improvement, inefficiencies and other issues that result in outcomes that are not optimal. The root causes of such issues are investigated, found and eliminated by modifying the process (as part of Plan in the next cycle).

Work in the next cycle Do phase should not create recurrence of the identified issues – if it does, then the previous action was not effective.

The most obvious manifestation of the Toyota Kata is the two-week improvement cycle at Toyota itself, in which every work centre supervisor must improve something (anything!) every two weeks. Mike Rother (who wrote the book for Toyota Kata) says ‘The practice of kata is the act of practising a pattern so it becomes second nature. In its day to day management, Toyota teaches a way of working—a kata—that has helped make it so successful over the last six decades.”

My resolve is to do this – not only on my personal items, not only in my work environment, but also with the clients that I work with.

Let’s go out there and use this to make things better for everyone. Let’s challenge our clients and see how this can enable and empower them? Sounds crazy, right – but it could actually bring a massive benefit to project/s. Sit down with the business team/s, and get them to identify one point (that’s not too big) that can be (quickly) worked on (try using the 80/20 rule). Do the work on it, release it, and then get them to do it again. See the results and benefit from it!

Note: Don’t get them to build too much of a backlog around this, as release items may cause one or more of the backlog items to be non-relevant anymore!

You could even get managers to give a reward for coming up with ideas around this concept that have a major noticeable effect on productivity etc.

By bringing these concepts together, our clients (along with ourselves) can better understand what’s happening, bring better suggestions to the table in order to build better systems, and a much higher working co-efficient will evolve, empowering everyone!

Required fields on forms – what did you forget to fill in?

Well, somewhat of a mouthful of a title for this article, but I couldn’t think of a better way to put it!

You know the scenario – we’ve all been there. There’s a custom form (for a system entity, or even a custom entity). Multiple sections, tabs, and multiple fields that are required. Users are going through data entry, but SOMEHOW have forgotten to fill one (or more???) in, and they’re just not able to save the form!

Well, Microsoft has now upped the quality of the user experience, and OH BOY was I SO excited to see this!

Previously when you clicked the Save button, it just wouldn’t allow you to save. It told you that it was missing required information, and you had to go search to see WHICH field(s) you had missed out on.

But search no longer. For now the notification bar has a whole new behaviour:

Firstly, it tells you that there are notifications, and to select to view (Note: If you’ve only missed out one field, just skip to step 2!)

Then when you click on it, it tells you which (required) fields have data missing from them!

Even better, if you click on the notification for a specific missing field, it even takes you to that field – no longer do you have to try to find where it is!

This is truly amazing, and will help enable users (and relieve their frustration) so much!