Welcome to the “Introducing” series!
Today we will introduce to the second of three Clouds which Microsoft provides. In the last part of this series, we introduced Microsoft 365. When most people we talk with hear the words Microsoft and Cloud, they assume what we are referencing is Azure and in most cases that is correct. It is important to note however that Microsoft has three different Clouds. In this blog post, we will provide some details on the “Dynamics 365” or D365 cloud solution.
D365 Cloud Solution
In the first blog post of this series, we discussed the various applications which are used as part of our daily jobs such as email and word processing. As mentioned previously, these are commonly referred to as commercial off-the-shelf software (COTS) apps as they are not custom to an organization or a specific vertical industry such as healthcare or finance. Many industries utilize specific types of COTS software to provide functionality such as Customer Relationship Management (CRM) or Enterprise Resource Planning (ERP). These types of COTS packages are what we will be discussing in today’s blog post.
From a high-level, Dynamics 365 is a cloud-based business application platform that combines components of customer relationship management (CRM) and enterprise resource planning (ERP). As a cloud-based solution, they also integrate artificial intelligence for applications to provide a variety of insights around sales and customer. Dynamics also integrates with the Microsoft Power Platform to provide additional capabilities. For a quick introduction video on D365 cloud solution check this out.
- D365 cloud solution is the subscription services version of Microsoft Dynamics. As a quick summary from the previous blog post subscription services update throughout the subscription and continually evolve to provide more features on a quicker cadence.
- Dynamics 365 is designed to assist in seven major areas:
- Sales, Marketing, Service, Finance, Operations, Commerce, Human Resources (HR)
- An off-the-shelf product in this space makes a lot of sense as these seven areas are extremely common in most organizations.
- One of the interesting aspects of Dynamics 365 is that it is a platform that you can use to build out your custom applications. As an example, Catapult Systems has a Grants Management solution built on Microsoft Dynamics CRM.
- To keep up with what’s going on with Dynamics 365, check out their blog.
- Pricing/available plans for D365 cloud solution:
- Information on licensing for Dynamics 365 is available here and a licensing guide is available here.
Thank you to Chad S and Beth F for their help on this blog post!
- Go back to the previous article in the series: Introducing the first of three Microsoft Clouds: M365
- Continue to the next in this series: Introducing the third of three Microsoft cloud: Azure
How can we use the Power Virtual Agent to start digging into, and surfacing, data from different sources? Let’s take a look at how to use Power Automate and flows, to extend the reach of Power Virtual Agent.
What’s our use case? Let’s say, hypothetically, that we have a list of cats (yes, cats because they are the best type of furry babies you can have) and we want the bot to be able to tell us who the owner (or “Hooman” as they like to refer to us as) of a specific kitten is.
First start with this link on how to get started to create your first bot: https://docs.microsoft.com/en-us/power-virtual-agents/authoring-first-bot.
Once the bot is created, let’s create a new Topic: https://docs.microsoft.com/en-us/power-virtual-agents/authoring-create-edit-topics. One note on the trigger phrases is needed. Initially I was hoping that the trigger phrase was going to be wildcard and then parsable to extract the cat name. “Wow, that’s so many fancy words Pontus!”. What I mean by that is: can I trigger it by saying “Who is Dodgers hooman?” ? Unfortunately no. But I learned that triggers are very precise (think German electrical engineer) and we need to look at it more like an action call. So the trigger had to be “Find hooman”. And that would then start the topic. Hopefully we’ll get more options to make it more natural conversation -like in the future.
To create the flow we just add a new step and enter the call for an action. This will create the flow in a new tab, and it comes pre-populated with some input and output variables.
Once the flow is saved, i still couldn’t see it in the Virtual Agent’s authoring canvas. The one missing step is to create a Solution and add the flow into it: https://docs.microsoft.com/en-us/power-virtual-agents/advanced-flow#move-a-flow-to-the-solutions-tab-on-the-microsoft-automate-portal. Once that was done, the flow did show up!
Using some basic input and output variables I could set up the logic needed to handle the passing of data back and forth. If the flow returns “NotFound” – show one message. Else – show the actual persons name:
So how does the flow work it’s magic? First, let’s take a quick look at the data source in SharePoint, pretty basic stuff:
Let’s dig into the flow! I did edit the default JSON since I only needed one input (flow_input_string). Then the basic variable initialization and finally the call to SharePoint to get the item with matching title and at the end update the CatName variable with the Hooman’s name from the SharePoint list.
So that works just fine, but what if the user enters the name of a cat that doesn’t exist in the list? Let’s build some basic exception handling. If the HoomanName variable didn’t get a value set from SharePoint, just set it to “NotFound” since we use that value as the condition on the Virtual Agent’s authoring canvas.
Great! The topic has been created to trigger, gather the name of the cat you want to lookup, trigger the flow, get result back from the flow and then wrapped up with a condition to show different messages back to the bot user.
How will it look if we pass invalid cat name?
How will it look if we pass correct cat name?
This was a very basic example on getting a single value back from SharePoint. Imagine expanding it to get multiple values, just by expanding the number of output variables from the flow. Easy peasy!