PL-200 Microsoft Power Platform Functional Consultant

Well, the last week has been quite busy, on many fronts! One of those is having a few new exams come out in Beta. I’ve already taken the PL-400 (see PL-400: Microsoft Power Platform Developer Exam for my review of it). Last Friday, the new PL-200 exam was released as well, so I scheduled it in for as soon as I could sit it.

Now the PL-200 is scheduled to be replacing the MB-200 exam at the end of this year (2020), assuming it comes out of beta by then of course. I remember sitting my MB-200, though I didn’t write up about it at the time. Compared to some of the other exams I’ve taken, it was hefty. I’ll freely admit that I didn’t pass on first go of it – it took me 3 tries to gain it! People will be required to take this as a pre-requisite for attaining the Microsoft Certified: Power Platform Functional Consultant Associate badge.

So I’ve been expecting this new PL-200 to be quite similar, but with more of a Power Platform focus. It’s still heavy on Dynamics 365, and I wasn’t expecting that part to change. The existing MB-2xx series are also staying in place (for the moment, anyhow).

According to the official description for the exam:

Candidates for this exam perform discovery, capture requirements, engage subject matter experts and stakeholders, translate requirements, and configure Power Platform solutions and apps. They create application enhancements, custom user experiences, system integrations, data conversions, custom process automation, and custom visualizations.

Candidates implement the design provided by and in collaboration with a solution architect and the standards, branding, and artifacts established by User Experience Designers. They design integrations to provide seamless integration with third party applications and services.

Candidates actively collaborate with quality assurance team members to ensure that solutions meet functional and non-functional requirements. They identify, generate, and deliver artifacts for packaging and deployment to DevOps engineers, and provide operations and maintenance training to Power Platform administrators.

The official Microsoft Learn page for the exam is at https://docs.microsoft.com/en-us/learn/certifications/exams/pl-200, and I’d highly recommend people to go check it out. I didn’t use it that much, but felt that I was on reasonable grounds with existing knowledge. It’s mostly there, but (at least in my exam) there were some sneaky extras that I was NOT really expecting. Hopefully I managed to get them (mostly) accurate!

Once again, I sat the exam through the proctored option (ie from home). The experience went without issues for once – sign in was fine, no issues with my headset during check-in, exam loaded & worked without problems at all.

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!). I’ve tried to group things together as best as possible for the different subject areas.

  • Environments
    • Different types of environments, what each one is used for, how to set/switch them between the different types
    • How to handle security/restrict access as necessary
  • Field types. All of the available field types, what are the benefits of each, and when each type should be used
  • Data storage types. Differences between Office documents (eg Excel), CDS, SQL Server, Azure SQL. When to use each one best
  • Charts. How they’re set up, how they can be shared with other users.
  • System views. What these are, who can access them, how to set them up
  • Entity forms. The different types of forms available, how to set them up, limitations of each. When each one should be used for a given scenarios
  • Model apps. Site map. What this is, how it’s used. Implementing/customising it, the different controls available & what each one does
  • Entity editable grids
    • What these are, how they can be used, how to enable & set them up
    • Limitations that they have within the system
  • Entity/record ownership. The different types of ownerships available, benefits of each, when each should be used for a given scenario
  • Data management
    • Data importing from different sources, different methods to import data
    • What is data mapping for import, and how it’s used
  • Duplicate detection. What it is, what it does, how it works. How to implement & configure it
  • Microsoft Word templates. How they can interact with Dynamics 365, how to set them up/adjust them, what they can be used for
  • Canvas Apps
    • Expression/function types, what they are, how they’re used
    • Handling data (eg collections)
    • Offline usage & data storage
    • Controls that can be used, navigating around, loading/saving data.
  • Power Virtual Agent/Chatbots.
    • Setting them up, deploying them onto websites, deploying them into Teams
    • Configuring topics, routing, handling unknown questions
    • Bot model data, including being able to access across multiple chatbots
    • Reporting on their usage, & how customer engagements have been processed
  • Power App portals
    • Registering users, registration code process
    • Validating/confirming user accounts
    • Forms security, displaying/hiding forms & data
  • AI capabilities. AI models available. Pre-built models vs custom training, capabilities (eg text scanning), and when to use each one.
  • Omnichannel
    • What it is, when it’s used
    • How to implement, deploy & configure customers being able to be sent through to it
  • Automation
    • Workflows, Power Automate, Business Process Flows
    • What each one is, benefits/use cases for each one, when to use each for specific scenarios
  • Power Automate
    • What are triggers, & how do they work
    • What are actions, and how do they work
    • What are connectors, and how do they work
    • Prebuilt vs custom connectors, capabilities, and when to use each one
    • How to set up each type & configure them
    • Instant vs Scheduled vs Triggered
    • Security – how to enable/disable their use by users
  • Business Process Flows
    • What they are, how they’re used, limitations that they have
    • How to handle security for them
  • Business rules
    • What they are, how they’re used, how to set up/configure
    • How to use them in different parts of the system (eg forms, apps, etc)
    • Actions vs Conditions vs Recommendations
  • UI Flows (RPA)
    • What these are, how they are used
    • Requirements in order to use them
    • Desktop vs Cloud
    • Implementation, customisation, configuration & deployment
    • Limitations of them
    • Data extraction from runs
  • Security & Compliance
    • Security roles, security teams, security groups
    • What each one is, how it’s used
    • System auditing, what it is, how it’s used, how to implement & configure
    • How to access & run user audit log reports
  • PowerBI. Setting up & sharing dashboards, setting up & configuring alerts, security options/roles & how they work with data
  • Dynamics 365 integrations. What other systems can integrate directly with Dynamics 365, & any limitations that they may have

The main surprise for me was mostly around the UI flows, and the various questions I had on them. I’ve not played around with them (yet!), but they are really cool!

If you’re going to take this, I’d love to hear how your experience of it went. Drop a comment below for me to see!

PL-400: Microsoft Power Platform Developer Exam

I’ve been continuing with taking new exams as they come out. Having recently taken the MB-400 exam (see MB-400 Power Apps & Dynamics 365 Developer Exam), I was slightly surprised to see the announcement that it was going to be replaced!

Admittedly, I was also surprised (in a good way) that I passed the MB-400, not being a developer! It’s been quite amusing to tell people that I’m a certified Microsoft Dynamics Developer. It definitely puts a certain look on their faces, which always cracks me up.

Then again, the general approach seems to be to move all of the ‘traditional’ Dynamics 365 exams to the new Power Platform (PL) format. This includes obviously re-doing the exams to be more Power Platform centric, covering the different parts of the platform than just the ‘first party apps’. It’s going to be interesting to see how this landscape extends & matures over time.

The learning path came out in the summer, and is located at https://docs.microsoft.com/en-us/learn/certifications/exams/pl-400. It’s actually quite good. There’s quite a lot that overlaps with the MB-400 exam material, as well as the information that’s recently been covered by Julian Sharp & Joe Griffin.

The official description of the exam is:

Candidates for this exam design, develop, secure, and troubleshoot Power Platform solutions. Candidates implement components of a solution, including application enhancements, custom user experience, system integrations, data conversions, custom process automation, and custom visualizations.

Candidates must have strong applied knowledge of Power Platform services, including in-depth understanding of capabilities, boundaries, and constraints. Candidates should have a basic understanding of DevOps practices for Power Platform.

Candidates should have development experience that includes Power Platform services, JavaScript, JSON, TypeScript, C#, HTML, .NET, Microsoft Azure, Microsoft 365, RESTful web services, ASP.NET, and Microsoft Power BI.

So the PL-400 was announced on the Wednesday of Ignite this year (at least in my timezone). Waking up to hear of the announcement, I went right ahead to book it! Unfortunately, there seemed to be some issues with the Pearson Vue booking system. It took around 12 hours to be sorted out, & I then managed to get it booked Wednesday evening, to take it Thursday.

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!). It’s also in beta at the moment, which means that things can obviously change.

There were a few glitches during the actual exam. One or two questions with answers that didn’t make sense (eg line 30 does X, but the code sample finished at line 18), and question numbers that seemed to jump back & forth (first time it’s happened to me). I guess that I’ve gotten used to at least ONE glitch happening somewhere, so this was par for the course.

I’ve tried to group things as best together as I feel (in my recollection), to make it easier to revise.

  • Model Apps.
    • Charts. How they work, what drives them, what they need in order to actually work, configuring them
    • Visualisation components for forms. What they are, examples of them, what each one does, when to use each one
    • Custom ribbon buttons. What these are, different tools able to be used to create/set them up, troubleshooting them
    • Entity alternate keys. What these are, when they should be used, how to set them up & configure them
    • Business Process Flows. What these are, how they can be used across different scenarios, limitations of them
    • Business Rules. What these are, how they can be used across different scenarios, limitations of them
  • Canvas apps
    • Different code types, expressions, how to use them & when to use them
    • Network connectivity, & how to handle this correctly within the app for data capture (this was an interesting one, which I’ve actually been looking at for a client project!)
    • Power Apps solution checker. How to run it, how to handle issues identified in it
  • Power Automates
    • Connectors – what these are, how to use them, security around them, querying/returning results in the correct way
    • Triggers. What is a trigger, how do they work, when to use/not use them
    • Actions. What these are, how they can be used, examples of them
    • Conditions. What these are, how to use them, types of conditions/expressions/data
    • Timeouts. How to use them, when to use them, how to configure
  • Power Virtual Agents. How to set them up, how to configure them, how to deploy them, how to connect them to other systems
  • Power App Portals. Different types, how to set them up, how to configure them, how they can work with underlying data & users
  • Solutions
    • Managed, unmanaged, differences between them, how to use each one.
    • Deploying solutions. Different methods that can be used to do it, best practise for each, when to use each one
    • Package Deployer & how to use it correctly
  • Security.
    • All of the different security types within Dynamics 365/Power Platform. Roles/Teams/Environment/Field level. How to set up, configure, use in the right way.
    • Hierarchy security
    • Wider platform security. How to use Azure Active Directory for authentication methods, what to know around this, how to set it up correctly to interact with CDS/Dynamics 365
    • What authentication methods are allowed, when/how they can be used, how to configure them
  • ‘Development type stuff’
    • API’s. The different API’s that can be used, methods that are valid with each one, the Organisation service
    • Discovery URL’s. What these are, which ones are able to be used, how they’d be used/queried
    • Plugins. How to set up, how to register, how to deploy. Steps needed for each
    • Plugin debugging/troubleshooting. Synchronous vs asynchronous
    • Component types. Actions/conditions/expressions/data operations. What these are, when each is used
    • Custom ribbon buttons. What these are, different tools able to be used to create/set them up, troubleshooting them
    • Javascript web resources. How to use these correctly, how to set them up on entities/forms/fields
    • Powerapps Component Framework (PCF). What these are, how to develop them, how to use them in the right way
  • System Design
    • Entity relationship types. What they are, what each one does, how they work, when to use them appropriately. Tools that can be used to display them for system design purposes
    • Storage considerations across different types, including CDS & Azure options
  • Azure items
    • Azure Consumption API. How to monitor, how to handle, how to change/update
    • Azure Event Grid. What it is, the different ways in which it can be used, when each source should be used
  • Dynamics 365 for Finance. Native functionality included in it

The biggest surprise that I had really when thinking back to things was the inclusion of Dynamics 365 for Finance in it. Generally the world is split into ‘front of house’ (being Dynamics 365/Power Platform), and ‘back of house’ (Dynamics 365 for Finance & Supply Chain Management). The two don’t really overlap, though they’re supposed to be coming more together over time. Being that this is going to happen, I guess it’s only natural that exam questions around each other will come up!

Overall it was quite a good exam. Some of the more ‘code-style’ questions were somewhat out of my comfort zone, and I’ll freely admit to guessing some of the answers around them! Time will tell, as they say, to see how I’ve done in it.

I hope that this is helpful for anyone who’s thinking of taking it – good luck, and please do drop a comment below to let me know how you found it!

Good news for Power Automate Flows!

As a starter for 10, this wasn’t actually the blog post that I was going to write today. In fact, the subject of the post wasn’t even going to be about Power Automate! However, there was some really amazing news that dropped today from Microsoft, which I just couldn’t pass up being able to talk about.

You’ve guessed it – it’s about Power Automate! Well, I suppose that the post title was somewhat of a giveaway, wasn’t it…ah well. So let’s go ahead and find out what this is all about then!

To date, we’ve been able to put Power Automate flows into a solution. Well, it wasn’t there exactly at the beginning of things, but it happened somewhere along the way. This was very convenient, as we didn’t then need to deploy each one individually to different environments. Some solutions can contain dozens & dozens of flows, and we really do love to package them all up together for ease of movement.

So that was good. But there was still a (major) ‘bugbear’ (as I like to refer to them as). This is the fact that after we deploy a Power Automate flow, we then need to go into it & (re)authenticate it. This is due to the fact that the connector/s that it uses contains what is referred to as a ‘secret’, and these can’t be moved across environments. As a result, we need to essentially recreate the ‘secret’ in the connector (ie authentication details) every time we move it. This is an annoyance (if you have one or two flows), and an absolute bloody nightmare if you have lots.

For the technical minded – every action in a flow is bound to a specific instance of a connection that it will use to “execute” that action. This is why when moving flows across environments, users are required to rebind every operation to a connection.

For example, I’ve been working with COVID-19 triage solutions. These contain lots of flows within them, connecting to multiple different sources, and doing different things. Every time we’ve performed a release (even if it’s just a simple update), we’ve needed to manually go through each flow, (re)authenticate them, and turn them on. If you forgot one, then everything can come crashing down & not work! But there’s been no other way to do it. To represent this visually, we have the following diagram

For each & every Power Automate, the connection line gets ‘broken’ when it’s deployed, and needs to be re-made.

Until now, that is. For today, Microsoft has announced the Public Preview for ‘Connection References’. Now when something is put into Preview, I usually caveat the usage of it with saying things like ‘it might go away, or not be released for a while’. But I’m going to be quietly confident about this particular piece of functionality, as I really don’t think it’s going to be pulled!

So what exactly are these? Well, in (mostly) simple terms, Connection References provide an ‘in-between’ or ‘abstraction’ layer for the connections that use them. Let’s show this visually as well

We still need to re-authenticate the Connection Reference once we deploy things. But let’s now see how we can save ourselves a massive headache, and LOTS of time:

Oooo…now this is looking better. Instead of having to update three Power Automate flows, we only have to update the SINGLE Connection Reference that’s sitting in the middle. Now multiple that by however many flows you have (eg sending emails out, etc), and start calculating how much time you’ll now be able to spend on coffee breaks, rather than doing this manually one at a time…

We can create Connection References directly from within the solution:

We then give it a name & description, choose which connector we’re going to be using, and either select an existing connection or set a new one up:

Once we’re finished, we click ‘Create’ at the bottom. Voila – we can now see it within our solution!

Note: Interestingly enough I couldn’t actually see this within the solution after I created it, even with the component selector set to show ‘All’. How I actually got them to display was changing the component selector to ‘Connection Reference’, and they then showed up. I’m thinking that this is due to it being new today/in the process of rolling out, and am expecting it to display without any issues in the near future

Let’s take a look at a Power Automate flow itself now to see how it’s referenced. When we open an item with a connector, we can now see the following:

We’re able to select the Connection Reference that we’re wanting to use. Simple, yet so powerful.

When importing a solution containing a Connection Reference, we will be prompted during the import process to set the actual connection that should be used with it:

If you don’t have any connections set up already in the environment, you’ll be able to create a new one from the dropdown.

Some things to note around this:

  • During the preview phase, Microsoft has specified that a single Connection Reference can only be used by up to 16 flows. This limitation will be removed once it goes GA
  • Existing flows will not be automatically upgraded. What you can do though is export the unmanaged solution, re-import it to the same environment, and then they will be automatically created for you. The flow/s can then be edited to update them to the correct connection reference record
  • The connection name and connection reference name are not currently synchronised. They can be different. Therefore it’s best to keep the naming conventions the same. Don’t set different names for connections and their associated connection references.

In summary – this is an awesome step forward with Power Automate functionality. I’m already tasking some of the developers on the team to re-do existing solutions to use it for ease of use. How do you think it’ll best benefit you? Drop a comment below!

Lookup fields & Power Automate

This is an interesting post, for several reasons. Firstly, it’s the first one in 3 weeks – I was off on holiday, and decided to take an (almost) absolute break from all things digital, which included this blog. It was actually quite refreshing, though now coming back & starting to write again does seem a bit daunting, I’ll admit!

Thankfully, whilst wondering what exactly to start with, a scenario came up that I was working on. It seemed quite simple at first, but then actually got someone complicated. I therefore thought it would be helpful to others if I wrote about it, so here it is.

The scenario was as follows. We had records being auto-created in the system, and needed to create child records for them. This, as I’m sure you’ll agree, is really quite simple to do with Power Automate. We also needed to set lookup values on the child record, that were already populated on the parent record (for reference purposes).

So for example, the parent record has a lookup to Country (being a separate entity), and the child record also has a lookup to Country. These need to be the same.

Being both lookup fields, I figured that I’d be able to take the value from the parent record, and simply plop it into the corresponding field on the child record in Power Automate:

So I did that – and immediately hit an error. Not just any error, but the fabled ‘Resource not found for the segment’ error!

Obviously, I did what anyone would do at first – I put it into Google & Twitter, and took a look at what came up.

The ‘problem’ was coming from using the ‘CDS Current Environment’ connector, which is the latest version available (the old one is no longer available to use). It’s really great for a lot of things, but unfortunately not so great in a few areas. See, in the old CDS Connector, you could just drop the lookup field value into the field you were wanting to populate. Power Automate had no issues with that, & it would run just fine.

However in the ‘new’ CDS Connector, you can’t just do that. Instead, you need to use an OData reference (which I haven’t done much of before, to tell the truth). So based on the blogs I had come across, I went to work to try to get this working.

Part of the challenge was that there didn’t seem to be a unified consensus in how to do it. I came across the following variations:

  • /entityname(Lookup Field Value)
  • /entityname/(Lookup Field Value)
  • /pluralentityname(Lookup Field Value)
  • /pluralentityname/(Lookup Field Value)

Somewhat confusing, as I’m sure you’d agree. Nevertheless, I ploughed through all of the different possibilities. But nothing was working – every single time, I still got the ‘segment not found’ error message. This, as you can image, was extremely frustrating!

Thankfully, one of my good friends was around & able to help out. Namely, Tricia Sinclair came to the rescue!

We took a look at the code I was using, and she took a look at some of her own use cases (where it had worked for her). I was starting to think down the path of needing a capital letter in the entity name (some systems can be REALLY finicky around things like that), but thankfully it wasn’t.

Instead, it was the following. See, this was a custom entity. It turns out that for a custom entity (& heck, for all I know system entities as well) the syntax needed is ‘publisherprefix_pluralentityname(lookupfieldvalue)’. Now that’s not something that I had come across ANYWHERE at all!

Looking at it, I guess it makes sense. After all it would technically be possible to have multiple entities with the same name, though with different publishers. As a result, the system needs to know WHICH exact entity is being needed for the Power Automate, so uses this. Somewhat complicated (and hey – it worked without all of this in the OLD CDS Connector), but we got it to work!

Testing it out, everything worked smoothly. The Power Automates fired off without any issues, the data got created & populated, and everyone was happy.

So there you go. Another interesting little twist in syntax needed, which hopefully will NOT change in the (near) future!

Have you come across anything like this? I’d love to hear – drop a comment below around it!

Omnichannel & Knowledge Articles

One of the most useful features that Dynamics 365 has to offer (in my opinion) is the ‘Knowledge Base’ feature. The purpose that this serves is multi-faceted. It can act as a repository for internal information, serve as a FAQ store, or even be used to publish information externally.

The amount of knowledge held within any organisation can be quite staggering at times. Think back to when you’ve been trying to get an answer to an obscure question, and only Bob in Repairs knows about it. Trying to track down that answer can be quite time-intensive at times (you need to find out who to ask, where they are, etc). In the modern digitally-connected world, we have better forms of communications available. However even with those, we’re still challenged at times.

Enter the Knowledge Base. Here people can enter information that can then be searched on. It could be a simple one-line explanation, or an in-depth instruction as to how to do something very technical.

It’s also a really useful place to hold business processes in. This can come in really helpful when rare situations occur, so that customer service agents can refer to them to find out exactly what to do.

There’s already a massive amount of information (if you’ll pardon the pun!) out there around the Knowledge Base, so I’m not going to go into deep detail here around it.

However, what I DO want to talk about is the ability to use Knowledge Base within Omnichannel!

See, customer service agents are the ‘first line’ of support that customers will deal with. Admittedly they’re also the 2nd, 3rd etc (until it may get to a very technical/specific question). The types of queries that they may need to handle can be astonishing at time! Being able to refer to information ‘at their fingertips’ is therefore vital, & key in driving efficiency. This then in turn leads to higher customer satisfaction, with queries being resolved quickly & easily.

So with all of that said, let’s take a look to see how this is used within Omnichannel. Essentially, there’s a Knowledge Base tab that can be opened for the customer service agent to access:

This opens automatically when a new customer sessions starts, and is then available for the customer service agent to click into.

Note: The behaviour to open it automatically is driven from the Session Template that’s set up for the communication stream. If it’s not set up in here, it won’t automatically launch. See the screenshot below for how this is set up, and refer to Omnichannel & Application Tabs for more information around this:

Alternatively, the agent can launch this directly from the chat itself, by clicking the ellipse icon, and then selecting it from the menu:

This will then put the agent directly within the Knowledge Article search tab. When this opens, it’s blank! Don’t worry about this however – it’s only blank, as there haven’t been any searches carried out yet! When the user starts to search, it’ll then return results into the pane:

If the user wants to open the article in a new window, all they need to do is click the little ‘pop open’ icon on the article summary, which will then launch a new window with it in it. This can be helpful if the agent is needing to have several different articles open at once:

If your company has configured an external portal for sharing Knowledge Articles with the public, it’s also possible to send a link for a specific article to the customer. To do this, either click the arrow button on the article, to click the Send URL button on the menu bar:

Now, the general layout used for Knowledge Articles will be familiar to anyone who has used the same ability within Cases in Dynamics 365. However for people who are used to working directly within Knowledge Articles, it will look slightly different. There’s no ability to add a new article or edit an existing one, publish, etc.

The reason for this is that within Omnichannel itself, the functionality interface is being surfaced as a web resource. There’s no need to worry though, as users can open the familiar Knowledge Article interface as well directly from within Omnichannel. To do this, the customer service agent should click the ‘+’ button on the tab bar, and then select ‘Knowledge Articles’:

Voila! A new tab will open, and the traditional Knowledge Article experience will load. All of the expected functionality is present, and users are able to do anything that they may need to inside of here.

So in summary, this is a continuation of the empowerment of customer service agents. With the knowledge ‘at their fingertips’, they’re able to provide the best possible experience for customers. Not only that, but queries can get answered and/or resolved in less time. Customer satisfaction will (hopefully!) increase as a result of this, with everyone feeling empowered & efficient!

So here’s my question – are you currently using Knowledge Articles (it doesn’t have to be within Omnichannel)? If you are, what benefits do you see that it brings to your company? If you’re not, what could help you to adopt them? I’d love to hear – drop a comment below!

Omnichannel Agent Presence

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!

PL-100: Microsoft Power Platform App Maker Exam

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.

You can take a look at the exam requirements & learning paths by going to https://docs.microsoft.com/en-us/learn/certifications/exams/pl-100.

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!

Agent Notes in Omnichannel

Anyone familiar with Dynamics 365 will of course be aware of ‘Notes’. These are the very useful ability to for system users to add notes into records. For customers, these show up within the Activity timeline. Every time a note is added, it’s added to the activity timeline to be able to be viewed. It’s also possible to add attachments to notes, which can be very handy too.

Each note is stored with it’s own date/time logged, so it’s possible to see when each one was created. Of course it’s also possible to click into a note to edit it, if it’s necessary to add additional information.

Now, what about within Omnichannel? The interface is different, as we know. So if agents need to capture notes, are they still able to?

Well, let’s take a look at the interface. As shown below, we do indeed have a Timeline section that agents can see. Here they can view the activities that have been previously carried out with this specific contact:

Not only can the agent see notes in this section, they can also see the other items in the activity history. So they’re able to then bring up previous conversations etc.

There are two ways in which agents can log notes within Omnichannel itself. The first way is the ‘usual’ way that we’re used to. Within the Activity Timeline, they can click to enter a note, and then save it:

This will then create a note against the record, in the normal way that we’re all used to. However, there’s a MUCH nicer way to do this!

See, it’s possible for the agent to create the note from the chat itself!:

Clicking this causes a HUGE notes window to appear next to the actual chat:

This is quite nice. It gives the agent a lot more screen space to capture information for the note. They could also quickly copy/paste from the customer conversation into here.

They’re not able to add attachments though through this large pane. Instead, the agent would need to save the note, which would then cause it to appear in the Activity Timeline view. Once there, the agent could click into it, and add any attachment/s that they may need to.

OK – so we’ve found out how agents can use Notes within Omnichannel. But there’s actually a really cool function from doing it directly from the chat.

When we add Notes in the ‘traditional’ style, and save them, it creates a record for each one. As mentioned above, it’s obviously possible to open up a note, edit it, and then save it again. But this can be a slight hassle at times.

Having to wade through a load of ‘ad-hoc’ notes when reviewing a record can be difficult & take a lot of time. It also doesn’t really look very neat, and can cause challengers when trying to get a good overall picture of what’s been happening. Additionally, it’s REALLY hard to search on properly, and a we all know how important (good) searches can be in our daily lives!

There will be situations where an agent captures a note, saves/closes it, then needs to come back to it. Perhaps they may need to come back to it multiple times. For example, closing notes at the end of a customer conversation.

Omnichannel facilitates this in a most marvellous way. When the agent creates the note from the chat & saves it, it saves the Note record. If the agent clicks the Note button again from the chat, they’re presented with the ‘clean’ interface again: the previous note/s don’t appear there.

However, ALL of the notes entered are saved to the SAME notes record. It doesn’t matter how many times the agent creates/saves a new note from the conversation – they all appear in the same record. This is really great in my opinion, as it means that we can have the entire view of ALL of the notes in one place.

Interestingly enough, it doesn’t put them on different lines – I’m going to look into this further, to see if this is actually what is meant to happen or not…

This in turn then facilities clean records, clean notes, and can save us a great deal of time. Aren’t clean data structures amazing.

So my question to you is – do you use Notes currently? What challenges have they presented you with, and have you come up with any workarounds? Please share – I’d love to hear!

Canvas Apps, Collections & Dropdown Fields

This post is based around some recent work that I’ve been doing, which includes canvas apps. For those of you who aren’t familiar with canvas apps, imagine if PowerPoint & Excel had a baby! Though I’m expecting most people who are reading this to already know all about them 🙂

So enough with the waffle, let’s get on with things…let me paint the scenario for you.

The app is aimed to be used by a contact centre. Part of their function is to capture address information. So far this has been done absolutely manually. The issue with this is that data can be typed incorrectly, or in the wrong fields. We’re also needing to enhance the data with geographic-specific information (for reporting purposes). This information isn’t known by either the callers, or by the contact centre agents (for those who are curious, it’s the unique property reference number, which is unique to every address in the UK).

Thankfully, we’ve been given a source from the client which we can look this up against. In essence, we pass a postcode to it, and values are returned (in a JSON format). This includes the data that we’re looking for. Brilliant, so far.

When we got to thinking about things, there are several ways in which we could implement this:

  • Capture the data as we are already doing, & use Power Automate to get the relevant additional information

or

  • Automate this within the canvas app itself, and even give the customer service agents a bespoke address picker!

Deciding to go with the second option (it was a no-brainer, really), we moved ahead with this. We had the details that we needed in order to hit the address lookup API. One of the developers on the team created the Custom Connector, and got it working. We tested it out, and amazingly we got information back!

The next step was to see how we could do this within the canvas app itself. Now I’m going to admit here that although I’ve HEARD great things about Collections, I had never used them myself. In fact not only had I NOT used them before, I had NO idea how they worked! That was to change VERY quickly though…

Within a few hours, I had learned enough about collections to get how they worked, and pull data into them. It was actually really simple – I used the ClearCollect command to create a collection that was fed by the API query, which then created the data into a collection table for me to use. I was very impressed!

The code to return the postcode data. We had to do some manipulation due to the API constraints

OK – so I had my data in the collection now:

What were my next steps? Well, I was wanting to achieve the following:

  • Give the customer service agents an ‘address picker’ to use. They’d enter the customer postcode, & then be presented with a list of addresses that they could pick the correct one from
  • Automatically populate the customer address fields on the form from the selected address

Well, the first item (the ‘address picker’) was simple enough. Using a dropdown field, I pointed it at the collection data. This worked great, but the dropdown was only allowing me to select a single column from the collection to display. This meant that I could only select ONE column of data to return:

I can only select a single column!

1 column from the collection. OK, I thought – should be simple enough to handle. Let’s go and concatenate column values in the dropdown, to present the interface I’m looking for:

Now that’s more like it! Much easier for the customer service agents to use. OK – onto the next stage. Let’s go & set the fields to point to the collection, match to the value that’s selected in the dropdown, and populate. Should be simple to do, right?

Well…um, no, it’s not simple to do. In fact, it’s actually impossible to do. I was expecting to point to the dropdown selected value, & have the columns returned (from the collection). I could then select which column to use for a specific field. This, however, was not the case:

You have to love the ‘.’ (or ‘dot’) notation used in canvas app code. It shows you what values are available, and saves having to do lots of type. In this case, however, it also showed me that there was only ONE column of data to select from to display in the field. This was the ‘Result’ column.

This got me very confused. I tried going back to basics, and stripping out the concatenation in the dropdown. Wonderfully I was then presented with all of the different collection columns to use:

So let’s sum up things so far:

  • If I want to present the best option to the customer service agents (using concatenation), I can’t select different parts of the data for auto-population into fields
  • If I want to be able to auto-populate field values from the collection, I can’t use concatenation (& therefore can’t present user-friendly data to the customer service agents).

Note: Leaving aside wanting to show the house number & street, one of the main reason for wanting to concatenate was to handle buildings that had flats (aka apartments) in them. This is stored in a different column in the collection. It would therefore be difficult to show these both to the customer service agents

In essence, the behaviour of the dropdown field seemed to be that I couldn’t just change the displayed values without it ‘losing’ connection to the rest of the data. There was no ID that I could use to match on, or display what I wanted to.

This seemed to be a massive Catch-22. I tried various things, but couldn’t see a way out of this. I started to try to create a second collection, & concatenate fields from the first collection. This seemed like a good idea, though (with being totally new to it), I got lost. I tried various things; I even ended up managing to collect the entire data from the collection into a new column for EACH ROW!!

Thankfully, the community helped me out, in the forms of Peter Bryant & Clarissa Gillingham (I had posted about my issues on Twitter – the hashtag #poweraddicts is really great!).

With the help provided, I managed to work out the CORRECT syntax to use for the ‘AddColumns’ command. This now being in hand, I was successfully able to create a second collection & add concatenated field values to it:

Now for the moments of truth. Would the dropdown show this new column, & could I point the form fields to auto-populate specific columns?

Anticipation is the way to keep consumers coming back for more
Not me, but exactly how I was feeling!

The answer….was YES! It was working! I felt SO relieved. Let’s take a peek:

This was brilliant! We’re also populating other data in the background, but that doesn’t need to be visible to the customer service agents.

So in summary, I learned about collections, & how to use them. I also learned about the limitations of dropdown controls (when referencing them from other places), but came up with a way around it. Finally I achieved the result that I was aiming for. Very pleasing all round!

Have you come across something like this in an implementation? How did you manage to handle it (if you did)? Drop a comment below – I’d love to hear all about it!

MB-400 Power Apps & Dynamics 365 Developer Exam

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!

Microsoft Certified: Power Apps + Dynamics 365 Developer Associate
I’m SO proud of this!

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!).

  • Model driven apps:
    • User experience
    • Show/hide fields
    • Change field labels
  • Canvas apps – functionality, online/offline capabilities, field types (including searching/filtering data)
  • Plugin debugging
  • 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!