Tag Archives: PowerApps
Refactoring Pipelines and Implementing PowerApps Checker in DevOps for Dynamics 365 for Customer Engagement Solutions – DevOps Part 2
Welcome to the next entry in our blog series on DevOps for Dynamics 365 for Customer Engagement (D365 CE). Up until now, we’ve covered the following:
This article will build on the material covered so far, so if you want to follow along and you haven’t walked through those articles yet, I’d recommend you do so.
Contents
Introduction
Often times in large development efforts, a codebase will rapidly approach a critical, messy mass where additional features become exponentially more difficult to implement. The developers’ impulse here may be to stop all new feature development and redesign the entire system, but this is never a good idea. Instead, we need to start making iterative changes to our code to clean it as we add new features. In this article, we are going to be celebrating this philosophy.
As a new deliverable in our DevOps environment, we will be enforcing some code quality rules by including PowerApps Checker in the build stage of our pipeline. We can consume the results of the report generated by this module to prevent developers from introducing common D365 CE anti-patterns to our codebase.
Making Pipelines Reusable
It is very likely your D365 CE deployment will consist of more than one solution. While the components that comprise your solution may be distinct, the pipelines you use to deploy these solutions will be quite similar, if not completely identical. That said, it would be an ironic shame if we were to start copying and pasting our code while incorporating DevOps.
There are many strategies for organizing your D365 CE solution architecture in source control. We will be exploring some of them in later blog posts, but for the purposes of this article, let’s assume that we’ve landed on a strategy which includes storing our pipeline templates in a separate repository. You can import, fork, or directly reference our pipeline repository, or create your own.
Introducing Stage Templates
Stage templates allow us to write the YAML for our stages in separate files, enabling us to gain the power of new multi-stage pipelines combined with the cleanliness of modularity. At the time of writing this article, there are templates for stages, jobs, steps, and variables. Eventually, we will be using each of them, but for now, we’ll start with stage templates, leaving the world a little better than we found it.
stages: - stage: Build jobs: - job: displayName: "Pack Solution from repository"
Excerpt from stages/build.yml
For the full source code of the stage template, click the link above. Since we’re planning on using other template types here, let’s think ahead a little bit and place our stage templates in a folder. Of course, the eventual increasing complexity of this project may call for that organizational strategy to change.
stages: - stage: Release dependsOn: Build condition: succeeded('Build') jobs: - deployment: Deploy displayName: "Import solution artifact"
Excerpt from stages/release.yml
Migrating the Release stage to an external template should be a practice of repetition at this point. We will be improving these stage templates soon, and I encourage you to experiment with how you can find an organizational strategy that works for your team.
Referencing a Pipeline Repository From a Pipeline
Since the stage templates we’ve created are tracked in an external repository, we will need to make them available by adding a repository resource to our pipeline. The steps for this are going to vary slightly based on where your pipeline templates repository is stored:
Pipeline Templates in Azure Repos
If you chose to import our repository or create your own in Azure Repos, you can simply reference it by name in a repository
entry, as explained in the documentation for the type
parameter.
name: $ (BuildDefinitionName)-$ (Date:yyyyMMdd).$ (Rev:.r) trigger: - master resources: repositories: - repository: templates type: git name: pipeline-templates stages: - template: stages/build.yml@templates - template: stages/release.yml@templates
Pipeline Templates in GitHub
If you are using GitHub for your repository, you will need to create a service connection, if you don’t have one already. Be sure to adhere to the principle of least privilege. That is, you only need to read from a public repository, make sure your service connection only has that privilege.
Steps to Create a GitHub Service Endpoint
- Create a personal access token in GitHub
- From GitHub, click on your Profile icon.
- Click Settings.
- Click Developer Settings.
- Click Personal access tokens.
- Click Generate new token.
- Enter a note, such as “Read Public Repositories”, and check the box for public_repo.
- Click Generate token.
- Click the clipboard icon to copy the token.
- Create a service connection in Azure DevOps.
- From Azure Devops, click Project Settings.
- Click Service connections (in the Pipelines category).
- Click New service connection.
- Click GitHub.
- For Choose authorization, select Personal access token.
- Enter a Connection Name, such as “pipeline-templates”.
- For Token, paste the token from your clipboard.
- Click OK.
Now that you have a service connection, following the documentation for the type
parameter, you can reference your repository by name and set the endpoint
parameter to the name of your service connection. Also, if you want to point to a specific version of the external repository, supply the tag in the ref
parameter. For example, if you are using our public pipelines repository, for the purposes of this tutorial, enter a value of refs/tags/blog-part-2.0
for a version consistent with what we’ve learned so far. We will be updating this in a moment.
name: $ (BuildDefinitionName)-$ (Date:yyyyMMdd).$ (Rev:.r) trigger: - master resources: repositories: - repository: templates type: github name: microsoft-d365-ce-pfe-devops/D365-CE-Pipelines ref: refs/tags/blog-part-2.0 endpoint: pipeline-templates stages: - template: stages/build.yml@templates - template: stages/release.yml@templates
After the changes we’ve made, if you attempt to run your Build & Release pipeline, you shouldn’t notice any change in behavior.
Include PowerApps Checker in a Pipeline
At the time of writing, the D365 CE product group has just released the PowerApps checker PowerShell Module. In conjunction with this module, they have also released a collection of official DevOps tasks for invoking the service, and we will cover them in another article in the near future. For now, we will be using the PowerShell module. Let’s add it to our environment and provide a report on our built solution.
For the purposes of this stage, we will be using the Invoke-PowerAppsChecker cmdlet. In order to call this, we’re going to need a few new variables in our pipeline. At a minimum, we will need the following:
- Geography (or ApiUrl)
- Azure Tenant Id
- Client Application Id
- Client Application Secret
- Ruleset Id
Create an Application Registration for PowerApps Checker
In order to add the Client Application Id / Secret, we will need to create an App Registration in Azure Active Directory. The documentation on PowerApps Checker includes a script to do this for you. If you’d rather do this manually from the portal, you can follow the instructions in the “How to”, using the configurations provided below. If you choose to use the script, you can skip to generating a client secret.
Per the documentation on PowerApps Checker, provide the following options when creating your App Registration:
- Redirect URI
- Type: Public client (mobile & desktop)
- Redirect URI: urn:ietf:wg:oauth:2.0:oob
Then, in API permissions, grant access to the PowerApps-Advisor API, giving Application permissions to Analysis.All.
Finally, generate a secret for the registration.
Create Additional Pipeline Variables Required to Call PowerApps Checker
Now that we have a client application that we can use to authenticate with the PowerApps Checker service, we can create the additional pipeline variables. Open up the pipeline we currently use for Build / Release and add the following variables:
-
azure.geography – Region of data center to temporarily store reports generated by the PowerApps Checker service. Read more.
Note: Based on your implementation, you may need to use ApiUrl instead. If so, be sure to modify the YAML file accordingly.
-
azure.tenantId – Example: ab2cea59-d1df-4950-ad30-3d7f43d1a8d8
-
powerAppsChecker.clientId – Example: 24076c4b-1a57-4ca1-9da5-42f367cf57d8
-
powerAppsChecker.clientSecret – Generated in the steps shown above. Be sure to change this variable type to secret.
You can get azure.tenantId and powerAppsChecker.clientId from the Overview tab for the App registration you created.
Retrieve the Ruleset Id
The final variable we will need in order to invoke PowerApps Checker is powerAppsChecker.rulesetId. You can use the Get-PowerAppsCheckerRulesets cmdlet to retrieve the available guids. At the time of writing, there are two rulesets available. The guids will never change, so you are free to store these as a variable to re-use them for your pipelines.
- powerAppsChecker.rulesetId
- 083a2ef5-7e0e-4754-9d88-9455142dc08b for AppSource Certification
- 0ad12346-e108-40b8-a956-9a8f95ea18c9 for Solution Checker
Install Sarif Viewer Build Tab
The PowerApps Checker service will generate a JSON file following the SARIF schema. Once we invoke the service from our pipeline, we will want a convenient way to view the results. The Microsoft DevLabs team has released an experimental, open-source Azure DevOps extension for this called Sarif Viewer Build Tab. Open that link and install it into your Azure DevOps organization in order to view the results of PowerApps Checker within your Pipeline summary.
Invoke PowerApps Checker From a Test Stage in a Pipeline
We now have all of the pieces in place to add an additional stage to our Pipeline and start invoking PowerApps Checker. Add the following YAML file to your pipelines repository, or if you’re referencing ours, update your reference to use the blog-part-2.1 tag, which contains the newest test.yml file.
stages: - stage: Test dependsOn: Build condition: succeeded('Build') jobs: - job: displayName: 'Run PowerApps Checker' pool: vmImage: 'vs2017-win2016' steps: - task: DownloadBuildArtifacts@0 inputs: buildType: 'current' downloadType: 'single' artifactName: 'drop' downloadPath: '$ (System.ArtifactsDirectory)' - powershell: Install-Module -Name Microsoft.PowerApps.Checker.PowerShell -Scope CurrentUser -Force displayName: 'Install Microsoft.PowerApps.Checker.PowerShell' - powershell: | md '$ (Common.TestResultsDirectory)\powerapps-checker' Import-Module Microsoft.PowerApps.Checker.PowerShell $ ruleset = New-Object Microsoft.PowerApps.Checker.Client.Models.Ruleset $ ruleset.Id = [Guid]::Parse('$ (powerAppsChecker.rulesetId)') Invoke-PowerAppsChecker ` -Geography $ (azure.geography) ` -ClientApplicationId $ (powerAppsChecker.clientId) ` -TenantId $ (azure.tenantId) ` -Ruleset $ ruleset ` -FileUnderAnalysis '$ (System.ArtifactsDirectory)\drop\packedSolution$ (solution.name)_managed.zip' ` -OutputDirectory '$ (Common.TestResultsDirectory)\powerapps-checker' ` -ClientApplicationSecret (ConvertTo-SecureString -AsPlainText -Force -String '$ (powerAppsChecker.clientSecret)') displayName: 'Invoke PowerApps Checker' - powershell: md '$ (Common.TestResultsDirectory)\powerapps-checker\unzipped' displayName: 'Create folder for unzipped results' - task: ExtractFiles@1 inputs: archiveFilePatterns: '$ (Common.TestResultsDirectory)\powerapps-checker\*.zip' destinationFolder: '$ (Common.TestResultsDirectory)\powerapps-checker\unzipped' displayName: 'Extract results to folder' - task: PublishBuildArtifacts@1 inputs: pathtoPublish: '$ (Common.TestResultsDirectory)\powerapps-checker\unzipped' artifactName: CodeAnalysisLogs displayName: 'Publish PowerApps Checker report artifacts'
Note that at the time of writing, it is important that your artifact be called “CodeAnalysisLogs”. The current version of the Sarif Viewer Build Tab extension is hard-coded to only read from that folder. Also, the tab extension will not read from zip files, so you need to extract the SARIF files into that folder.
You will also need to update your main YAML file to include a reference to the newly created stage:
name: $ (BuildDefinitionName)-$ (Date:yyyyMMdd).$ (Rev:.r) trigger: - master resources: repositories: - repository: templates type: github name: microsoft-d365-ce-pfe-devops/D365-CE-Pipelines ref: refs/tags/blog-part-2.1 endpoint: pipeline-templates stages: - template: stages/build.yml@templates - template: stages/test.yml@templates - template: stages/release.yml@templates
github-build-test-release.yml
(Azure Repos version: azure-repos-build-test-release.yml)
Once you’ve committed that, you should be able to run your pipeline and watch as the Test stage completes prior to beginning the Release stage. Once the Test stage completes, from the Pipeline review, you should see a “Scans” tab, which will show the results of the PowerApps Checker.
However, right now, if you are using the sample solution from our tutorial repository, this view is pretty unexciting. Feel free to verify it by adding a solution component that violates a PowerApps Checker rule. Alternatively, you can download and check in the newest ExtractedSolution folder from our tutorial repository for a version of the solution containing a JavaScript file that should throw off some red flags:
That’s it for this article! There’s still plenty of room to add value here. As a fun challenge for yourself, see if you can parse the results of the PowerApps Checker programmatically and actually cause the Test stage to fail if any results are found. We will be providing a solution to this in our next entry. (Hint: The PowerApps Checker result includes a property called IssueSummary.)
Thanks for reading, feel free to ask any questions in the comments section below, and happy DevOps-ing!
Enhancing Customer Experience with PowerApps and Chatbots

When researching or buying a product or service, a customer has several touchpoints with a company – these can include a salesperson, technical engineer, financial adviser, retail store employee, field technician, and many others. Through all these touchpoints, the customer is expecting a smooth, easy, and pleasant buying experience. For this to happen, all internal employees must be certain they’re providing the right information at the right time to their customers, which begs the question: do our employees have access to the right information, tools, and people to provide good and accurate information to the customer?
Many times, the issue that arises in this endeavor has nothing to do with providing information to customers or prospects – instead, it’s that our own employees may not be familiar with the processes in place and may need help getting their questions answered to get comfortable with the process. Here are a few examples:
- “What PowerPoint template should I use for my presentation with the prospect? There are so many!”
- “Do we give discounts to Non-Profits?”
- “My prospect is asking for a demo this week. How do I get technical sales involved?”
- “Is there a document I can read to get familiar with our sales process?”
All employees who accompany our customers on their buying journeys may have such questions. So, the question becomes, how do we ensure they are empowered every step of the customer journey and have access to the right information at their fingertips? In today’s blog, we’ll answer that question!
PowerApps + Chatbots
First, let’s quickly discuss chatbots and attempt to debunk some preconceived notions about them. In our experience, when most people think about chatbots, they automatically and immediately associate them with customer service. It seems they picture a customer wanting an update on their delivery status, so they go to a website, start a chat, ask a question about their delivery status, and boom! They immediately get a bot-powered response. Now, it’s great that customer service for end-consumers is the first thing that comes to mind, but chatbots can be used in so many other scenarios besides just tier-one customer service.
Let’s revisit one of the questions we posted above: “What PowerPoint template should I use for my presentation?” This is an innocuous question asked by a salesperson – can we not have a bot answer that question for them?
Yes, of course we can! Not just this, but many other process-, product-, or service-related questions, as well. And what this means is that your employees are not emailing, texting, or calling each other to find the right information. In times of needs, a beloved bot can be at their service and help them out immediately!
Let’s look at a few more possibilities:
- A Financial Planner goes to a meeting with an investor and accesses production-sales data from their mobile device. Can that Financial Planner ask the bot for recommendations on the best next action, product, or investment approach? Yes, of course! And a bot will provide them with responses and guide them through the process.
- A consumer walks into a retail store and wants to know where the slim-fit jeans are. Can they just walk up to a kiosk and ask? Yes, of course! And a bot can instantly provide the right information.
How to Create a Chatbot
A chatbot can be created in a variety of different ways. In this example, we’ll describe a specific bot from QnA Maker, which we’re using for two important reasons:
- It’s a no-code solution. Yes, you read that right: it requires zero coding!
- It can be surfaced easily in PowerApps through an out-of-the-box connector.
Indeed, QnA Maker is one of the easiest chatbots out there. Simply go to www.qnamaker.ai, sign in with your Microsoft account, and click <Create a knowledge base>. The page walks you through some very quick and easy steps, and before you know it, your bot is ready!
Once your QnA Maker chatbot is ready, you can use the QnA Maker connector in PowerApps to surface it in your app. Now, using a phone, tablet, or computer, anyone in your organization can access this bot to get answers to their questions!
Note: To see how to surface a QnA Maker chatbot in PowerApps, watch this live webinar
on Thursday, 11/8/2018.
What is the experience like? See for yourself:
Salespeople, Financial Planners, field technicians, customers at an in-store kiosk, and anyone else you can imagine… everyone can get their questions answered in a matter of seconds!
Who is it for?
Currently, the licensing for PowerApps does not allow for apps to be exposed to customers, although your employees with Office 365 accounts can always access any app. In other words, while your customers will not be able to access the app directly on their own device, your organization can use this chatbot app to enhance customer experiences. In addition, using PowerApps on your own devices, you can make these apps available at an in-store kiosk where anyone, including customers, can walk right up to it and get “self-service” answers to their questions.
Bringing it all together
Businesses of all sizes have various employees interacting with customers at several stages of their selling process. The goal of any successful business should be to not just close a sale, but to wow their customers in the process, gaining their trust for a long-lasting relationship. None of this is possible if we don’t provide our own employees with the right knowledge, ability, and tools to help our customers. In pursuit of enhancing consumer experiences, solutions like chatbots and PowerApps play a small yet crucial role. “No code/low code” platforms (which also tend to be “no cost/low cost”) are becoming increasingly viable solutions for many business scenarios, and PowerApps and QnA Maker are just a couple of examples.
If you want to empower your employees with the right knowledge, ability, and tools, please explore these platforms for your needs – and you can start by joining us on 11/8 for a live webinar.
Happy D365’ing!
Fill Your “Last Mile” Gaps with PowerApps

“Last mile” is a major buzzword right now, especially as it relates to PowerApps. To understand the concept behind the buzz, let’s consider a company that spends millions of dollars on CRM and other software to help induce customers to buy their product. Perhaps the various parts of said product are created in multiple countries, shipped to the US, and driven across the country to stores or warehouses to facilitate a customer’s purchase, all of which is nicely tracked in the CRM. Then, after all that complexity, the sale falls apart in the “last mile,” which is the seemingly simple act of delivering said product to the customer’s house.
This is a big issue across industries right now, as customers have high (and constantly increasing) expectations for flawless execution, service, delivery, etc. To that end, it is becoming tougher every day to meet the standards set by the likes of Uber and Amazon, and thus “last mile” gaps are created.
In this blog post, we will show you how you can build last mile solutions to ensure your users:
- Can get what they want, when they want it, wherever they are.
- Can get information easily, seamlessly, and painlessly.
- Adopt the bigger Dynamics 365 implementation through these apps!
In the example below, we’ll look at how an employee who is always (or mostly) on the road can use a PowerApps app to:
- Easily communicate with customers through phone calls and text messaging.
- Get driving directions to customer locations.
- Email customers and coworkers.
- Schedule appointments.
…all with minimal clicks!
In the home screen below, we have a list of contacts that the user owns. (Note this “gallery” can be filtered based on various conditions.) For each contact, we can do the following with a single click:
- Call
- Text/SMS
- Get driving directions to their location from user’s current location
- Check calendar + schedule appointments
Digression: At the very bottom is a “robot” icon. We have integrated a QnaMaker.ai chatbot with this app that does not require any coding. More on that in an upcoming blog post!
Notice that not all contacts have the same icons. That is intentional! If we don’t have a contact’s mobile number, we make our users know that by hiding the call and text icons (another option is to “gray out” the icons).
The first three icons under Yvonne McKay perform calling, texting, and getting driving directions – with a single click, as shown in the video below:
Clicking on Yvonne’s fourth icon takes us to the next screen, where we can add as many email addresses as we want, compose an email, and send it to everyone.
Note: The email screen integrates PowerApps with Exchange, making it a breeze to find coworkers to add to emails.
Clicking the final icon for each of our contacts allows the user to do two things: check calendar and schedule appointments. As a bonus, our app once again connects to Exchange to:
- Show the current user’s appointments first
- Schedule meetings with coworkers – by picking a date and duration of the meeting, the app shows all the times that work for everyone without conflicts.
The screen is doing a lot here, and the coolest part is that we’re using one of the out-of-the-box screens that are available within PowerApps. In other words, you wouldn’t need to write a single formula to adopt this functionality!
Bringing it All Together
So, what are we really doing here? Essentially, four things:
- Surfacing information from a certain data source. In our example, contacts are coming from Dynamics 365, but the source can be SharePoint, Excel, or any other.
- Providing users the ability to interact with their customers and co-workers easily, creating a wow! factor for everyone involved.
- Encouraging user adoption.
- Helping to close those last mile gaps!
Apps like this one are extremely quick and easy to build. In our next blog post, we’ll show you the formulas that our PowerApps designers used to build this app. Until then, learn more about PowerApps here.
As always, Happy D365’ing!
D365 in Focus: PowerApps Demo [VIDEO]
![D365 in Focus: PowerApps Demo [VIDEO] D365 InFocusPowerApps Demo Still 800x600 300x225 D365 in Focus: PowerApps Demo [VIDEO]](https://www.powerobjects.com/wp-content/uploads/2018/10/D365-InFocusPowerApps-Demo-Still-800x600-300x225.jpg)
Watch our Power Platform Capability Manager build a fully functioning app – all within minutes! This video showcases the creation of an app that empowers traveling agents and salespeople with single-click options to call, text, and get driving directions to their clients and prospects. Although this is just one of countless functionalities that can easily be built out with PowerApps, you’ll see the drag-and-drop actions and Excel-like formulas that differentiate PowerApps from other app builders.
When to use Dynamics 365 Connector or Common Data Services in PowerApps

Word’s out! PowerObjects hosted its first ever hackathon in July. Great apps were built PowerApps by team members across the globe, and you can check them out here. With all the development accomplished in a few hours, many lessons were learned. In this blog post, we’ll be sharing one of the lessons learned by the team.
Spoiler Alert: If you can’t find an entity in the Data Source’s tables list, it is not the right connection for your scenario
Using Connections
With PowerApps, you can create intuitive applications connected to your organization’s Dynamics 365 data. You can create, update, and see Dynamics 365 records right within your app. Common Data Services (CDS) and the Dynamics 365 Connector are considered standard connections, and can be used to connect to your Dynamics 365 data. You can also use CDS to create and customize entities from PowerApps.
To learn more about Connectors, and how to connect, review Microsoft’s PowerApps guide here.
First attempt
For one of the use cases, we wanted a user to be able to create a Lead within PowerApps. To connect the app to the Dynamics 365 data in the organization, we first added a data source.
From the available Data Connections, we selected CDS.
To choose a table (entity), we searched for Leads.
Look again at the image, and you’ll notice the Leads table is not available. This takes us to the lesson learned: not all out-of-the-box (OOB) entities are currently available in CDS. When working with OOB entities and choosing your data source, visit PowerApps’ Entity Reference to identify if the desired entity is currently available.
But we still need to build an app, right? A lesson learned is complete when there’s a solution for it.
Dynamics 365 Connector
Microsoft is still updating the Common Data Model, and new entities are expected to be available in the future. In the meantime, the Dynamics 365 Connector is an excellent alternative to connect to the data. The solution is to repeat the previous steps; this time selecting the Dynamics 365 Connector.
Choose View > Data Sources > Add a Data Source. From the available Data Connections, select Dynamics 365.
Search through the tables for Leads. Success! You are able to connect to the out of the box Leads entity.
Now connected to Leads, you can continue building the app. If you wish to learn more about the Dynamics 365 Connector, check this list of formulas you can use to complete and deploy your app.
Happy D365’ing!
8/2 Webinar: See how PowerApps and PowerBI can provide school teachers the apps and the reports they need by Daniel Christian
Join Charles Sterling and one of the Power BI, PowerApps and Flow MVPs Daniel Christian (a triple crown awardee!) as Daniel covers how PowerApps and PowerBI can provide school teachers the apps with reports.
Session Abstract:
Education should be the #1 priority and school teachers should be provided all the tools they need. PowerApps, Flow and Power BI can be part of those tools. In this webinar Daniel Christian, Microsoft MVP will demonstrate how his educational app and report can help school teachers monitor the performance of their students. Daniel will demonstrated his PowerApp and Power BI report leverages the back end data to provide valuable insights.
When: 8/2/2018 8AM PST
Where: https://www.youtube.com/watch?v=FeDmLwU2YC0
About Daniel Christian
Daniel Christian has over 11 years of SharePoint experience starting with SharePoint Portal 2003 . His area of expertise includes SharePoint On-Premises architecture, maintenance and administration, SharePoint Online administration. He is a big fan of building no-code solutions and reporting. Currently, he is focused on PowerApps and its integration using Gateway with SharePoint Server 2013 and 2016. Besides writing blogs, Daniel enjoys working with musical holiday lights and photography. Here’s the YouTube playlist of his 2016 holiday lights.
PowerApps Hackathon Event Recap

On July 1, PowerObjects hosted its first ever company-wide hackathon. The goal of the daylong competition was to empower PowerObjects employees to truly “Live the Technology” and gain hands-on experience with Microsoft PowerApps. PowerApps is one of Microsoft’s Business Applications that allows users to create custom mobile apps on a cell phone, tablet, or computer without any coding or development experience.
We had a tremendous day with nearly 20 different apps created across the globe, showcasing rapid development in PowerApps! We learned a lot and at the end of the day we increased our organizational knowledge around this very powerful tool. Check out a few of the apps that our employees created during the PowerApps Hackathon.
GPS Locator
Connectors: Flow, Bing Maps and Dynamics 365
What the App Does:
This apps allows users to quickly view nearby records by utilizing their physical (GPS) location and displaying all customers within a given radius based on the address field entered in Dynamics 365.
How it works:
By connecting Microsoft Flow to Dynamics 365, users are able to capture the geo-codes of the out-of-the box address fields (street, city, county, country, zip code) and map the data to the address 1: latitude and longitude fields. Using BingMaps API in Microsoft Flows, the latitude and longitude data is returned in to PowerApps. Displaying a list of nearby customers along with their record details.
Delivery Tracking
Connectors: Azure and Google Maps
What the App Does:
This app is designed to allow drivers to view a dynamic list of deliveries scheduled for a specific day with an optimized route and barcode scanner to track delivered packages.
How it works:
Azure Functions and Flow are used to call Google Maps API, which launches an in app navigation screen that displays the optimized route for the current deliveries scheduled for the truck. The PowerApps Media Barcode can then be used to scan barcodes on packages to indicate a successful delivery. Once a package is successfully delivered the app automatically updates and begins navigating to the next location.
Field Reporting
Connectors: Dynamics 365
What the App Does:
One of our current customers needed an app that all employees can use when in the field or during off-hours to collect information needed to create a new opportunity.
How it works:
This app connects to the Dynamics 365 entity “Opportunity Create” that allows team members to easily schedule a follow-up communication and assign that activity to the appropriate project manager or owner in CRM. The user can collect data and on-site photos from the potential customer and associate the information to an existing record in Dynamics 365. The data collected in the “OpportunityCreated” entity then ties to a dashboard to allow CRM to review the contact information collected and create a formal opportunity via their existing native processes.
PowerScan
Connectors: Dynamics 365
What the App Does:
This app allows you to use your mobile device to scan bar codes, QR codes, and business cards to deposit data into Dynamics 365. Instead of having to purchase a third-party scanner at a trade show to do the exact same thing and then get a CSV file to import into Dynamics 365. The app scans this information at trade shows, events or just anytime where you can verify the information, then qualifies and assigns the leads in real time.
How it works:
The out-of-the box PowerApps Camera captures and stores images as Notes or Attachments using Optical Character Recognition (OCR) Text. These notes are can then be set Regarding to the Trade Show Lead record. OCR Text is processed with Regular Expressions to determine the type of data. Name, Email, Telephone, Address, etc., is saved to the Trade Show Lead record. From here, PowerApps can be used to launch Google Maps for driving directions, send emails or call a lead directly.
Want to see these apps in action?
PowerObjects is a Platinum Sponsor at this year’s Microsoft Business Applications Summit happening in Seattle, Washington July 22-24. Be sure to visit our team of experts at booth #1 for exclusive demos and experience the power of Microsoft’s end-to-end Business Application Platform solutions for yourself. You can register for the conference with our code: HCL100dc to receive a $ 100 discount.
Happy D365’ing!
Checking for Consecutive Repeating Characters in PowerApps

Today’s blog will walk through how you can check for repeating characters within PowerApps. We at PowerObjects are excited about the functionality of PowerApps and their potential for reducing the time for developing mobile apps. There are many resources to get up and running, including our webinars.
The challenge with checking for repeating characters is that the PowerApps platform does not allow for writing loops within the PowerApps designer. How can you check if char4 = char5 = char6 within a full string? The solution is to leverage regular expressions. JavaScript regular expressions work in PowerApps.
The solution for this use case is to use the IsMatch (Text, Pattern [,Options]) function with the Contains option and combining special characters “.” and “\x” and “{n,m}” to get the desired regular expression pattern: (.)\x{n}
Let’s walk through an example of how to apply these pieces by creating a simple screen.
Steps overview:
- Insert a Text Field.
- Insert two icons.
- Set one icon to display and the other to not display if there are three consecutive repeating characters.
- Test it out.
Step 1 – Insert a Text Field
Step 2
Step 3
Set one icon to display and the other to not display if there are three consecutive repeating characters
Input the following expressions in the Visible property of the icons:
Icon 1: If(IsMatch(TextInput1.Text,”(.){2}”,Contains),true,false)
Icon 2: If(IsMatch(TextInput1.Text,”(.){2}”,Contains),false,true)
Let’s break down what each piece means:
IsMatch – checks if the input text matches what you specify in this function
(.) – match any character except a newline character
– remembers 1 preceding character
{2} – matches at least 2 occurrences of the preceding character (exclude the “m” in {n,m} because we are not limiting the number of characters in the string)
Contains – the string specified is within the input text
Step 4 – Test it out
The happy emoji should display only when there are no three consecutive repeating characters, including letters and numbers.
Congratulations! You just executed a workaround for the known limitation that PowerApps do not support programming loops. This is particularly helpful if you need to validate password inputs. You can learn more about the Dynamics 365 Spring 2018 Update for PowerApps in this blog.
Want to learn more about how PowerApps and Microsoft Business Applications can benefit your organization? Join PowerObjects, this year’s Platinum Sponsor, at the Microsoft Business Applications Summit on July 22-24 in Seattle. Register with our code: HCL100dc to receive a $ 100 discount.
Happy Dynamics 365’ing!
6/14 Webinar: Inside the Universal Audit App: See what PowerApps and Flow are capable of by Paul Culmsee

This week have another Australian join me to cover off one of my favorite topics….using PowerApps and Flow to deliver applications that traditionally require a development and devops team!
Inside the Universal Audit App: See what PowerApps and Flow are capable of by Paul Culmsee
This popular app in the PowerApps showcase has resulted in 3-5 requests a week for this app. As a result it has been deployed all around the world. In this session Paul will show how it was conceived, how we leveraged PowerApps and Flow to their full potential and what customization have been done for clients. A great accompaniment session for those looking to get started by showing a complete solution in use around the world…
When June 14th 2018 6pm PST (NOTE the time!)