Scaling Low-Code Solutions: When to Integrate Custom Code

Intro

The Power Platform is one of the most capable low-code ecosystems available today. Power Pages, Dataverse, Power Automate. When used together, teams can deliver real business solutions quickly, often without writing a single line of code.

But every platform has boundaries. And when those boundaries are crossed, users feel it immediately.

This is the story of a client who built the right solution on the right platform until scale turned a 60‑minute processing delay into a serious risk to adoption. The fix was not a wholesale rewrite or a departure from Power Platform. It was a single, targeted Azure Function that reduced processing time to under five minutes.


The Setup: A Well-Designed System With a Hidden Ceiling

The client built a customer intake system using Power Pages. Users completed a detailed, multi-question form, and each answer influenced which recommendations would be unlocked for their profile. Those recommendations were stored and managed in Dataverse.

The decision engine lived in Power Automate. When a form submission arrived, a flow iterated through every question, evaluated the response, applied business rules, and wrote the appropriate recommendations back to Dataverse.

From a design standpoint, the solution made sense. The logic was clear, the flow was readable, and for a time, it worked exactly as intended.

Until it didn’t.


The Breaking Point

The issue was not flawed logic. It was the execution model.

Power Automate processes loops sequentially. Each question required its own iteration. A check, a condition, and one or more Dataverse writes. Multiply that by dozens of questions per submission and the cost became obvious.

A single form submission took close to 60 minutes to fully process.

At low volume, this delay was tolerable. Users submitted a form and eventually saw their recommendations appear. But as usage increased, the system began to strain.

Submissions backed up. Users refreshed pages, assumed something had broken, or abandoned the process altogether. Support tickets increased. What had once been an inconvenience became a user experience problem that threatened confidence in the entire platform.


The Pull of Staying Low-Code

The initial instinct was to optimize the existing flow. Could loops be consolidated? Could conditions be simplified? Could parallel branches help?

The hesitation was understandable. The client had invested heavily in Power Platform. Their team knew it well, governance was in place, and introducing custom code meant new pipelines, monitoring, and skill sets.

But after profiling the flow, the conclusion was unavoidable. The bottleneck was structural. As long as the logic ran inside a sequential loop, no amount of tuning would produce the performance gains the platform needed.


A Surgical Fix

Rather than re-architect the system, we proposed a targeted change: move the recommendation processing logic out of Power Automate and into a JavaScript Azure Function.

Not a rewrite. Not a migration away from Power Platform. Just a surgical swap.

The Azure Function would receive the form submission data, evaluate all recommendation rules in a single execution, and write the results back to Dataverse in one pass. No per-question looping. No waiting for each iteration to finish before starting the next.


Building the Bridge

The most time-consuming part was not the code. It was extracting the business logic.

The recommendation rules lived across dozens of Power Automate actions, conditions, and expressions. Translating that into JavaScript meant reverse-engineering the flow, rule by rule.

We worked closely with the client to document every decision path, including edge cases and conditional dependencies that were not immediately obvious from the flow diagrams. Some rules were simple mappings. Others involved layered conditions such as “if Question A is X and Question C is Y, unlock Recommendation Z.”

The Azure Function connected to Dataverse using the Web API, with proper authentication, logging, and error handling built in. Unlike the original flow, the new solution provided clear, centralized visibility into execution and failures.

Testing was deliberate. We ran historical submissions through the function and compared the results to the Power Automate outputs, ensuring parity. Edge cases that had occasionally caused the flow to stall or skip records were handled explicitly in code.


The Result

The impact was immediate.

Processing time dropped from 60 minutes to under five minutes, a reduction of more than 90 percent.

Users submitted forms and saw recommendations populate almost immediately. The backlog disappeared. Support requests stopped. Most importantly, the platform could now scale without performance degrading as submission volume increased.

The broader architecture remained intact. Power Pages continued to handle the front end. Dataverse remained the system of record. Power Automate still orchestrated other workflows. The Azure Function simply replaced the one component that needed a different execution model.


The Bigger Lesson

Low-code does not mean no-code forever.

The Power Platform excels at accelerating delivery and empowering teams. But scalable solutions require understanding where the platform’s strengths end and where specialized tools belong.

The success of this project was not about abandoning Power Platform. It was about identifying a specific constraint, choosing the right tool to address it, and integrating that tool cleanly so the rest of the system continued to function exactly as before.

If your Power Platform solution is hitting performance limits, the answer is not always “optimize the flow.” Sometimes, it is a few hundred lines of code in exactly the right place.

Facing a similar challenge? We help teams strike the right balance between low-code speed and custom-code performance.

Maturing On The Power Platform: Data Loss Prevention Policies

Introduction

When thinking about your Power Platform environment, it’s important to shift your mindset. Whether you’re a small business or a large enterprise, investing time upfront to secure your environment and follow best practices is crucial. One of the biggest reasons? Scalability.

In my opinion, some platform deployment failures stem from a lack of strategic planning for business growth. As your company scales, new challenges will emerge. While we can’t predict every obstacle, there are common patterns in how businesses and applications evolve. And if you believe AI agents will make business applications obsolete, let’s clarify something—policy applies to both.

At its core, policy isn’t about what you implement; it’s about how you implement it. It’s a strategic framework, not just a tactical checklist.

What are Data Loss Prevention (DLP) Policies?

According to this nice shiny definition found on Microsoft Learn:

Data Loss Prevention (DLP) is a critical aspect of maintaining data security and compliance within the Microsoft Power Platform ecosystem.

My definition is much shorter and it simply is: “You can’t do that because the organization said so!”

Connectors

DLP policies play a critical role in keeping company data from unintentionally ending up on platforms like LinkedIn. One of the Power Platform’s biggest strengths is its access to over 1,000 connectors—and if one doesn’t exist, you can build it. But realistically, do users need access to every connector? Do they need to create custom ones? The short answer is no.

Because anyone with an M365 license has access to the Power Platform, technically, anyone can be a maker. While Microsoft encourages citizen development by providing open access to the default environment, the responsibility of enforcing policies doesn’t fall on Microsoft—it falls on the organization. That means preventing data leaks and securing Power Platform solutions isn’t optional; it’s a core responsibility for license owners.

Strategic Thinking

The more I engage in governance projects, the more I notice a common trend—and it’s not the lack of policy that concerns me. What worries me most are the gaps in strategic thinking when it comes to the Power Platform. Too often, organizations approach it as just another tool rather than a foundational part of their technology strategy.

Like any enterprise software, the Power Platform needs a well-thought-out deployment strategy. It’s not just about setting up policies; it’s about ensuring long-term scalability, maintaining clean and reliable data, and prioritizing security. Without a strategic approach, organizations risk inefficiencies, data sprawl, and security vulnerabilities that could have been prevented.

Over time, little by little, I’ve been encouraged to see companies shifting their perspective. What was once seen as a “neat little toy” bundled with E3 licensing is now starting to be recognized as a critical piece of the technology roadmap—powering mission-critical applications and driving real business outcomes. I hope this trend continues. I hope implementation include a more sound approach.

The Consultants Responsibility.

It’s also up to the consultant. As we engage with clients and deploy the Power Platform, we have a responsibility to take real-world use cases—including the horror stories—and use them to shape better strategies moving forward. Experience is one of the best teachers, and it’s our job to ensure that lessons learned don’t go to waste.

I’ve worked with combative clients who initially saw no need for a strategic approach to Power Platform implementation—until I helped them see the bigger picture. Often, resistance comes from a lack of understanding, not a lack of willingness. Once decision-makers recognize the risks and long-term implications, they begin to appreciate the value of governance.

We also can’t assume that users and citizen developers will fully grasp the security risks tied to the connectors they use—that’s not their responsibility. It’s on us to establish the right policies, provide guidance, and build a framework that protects both the organization and its data. In governance, being proactive isn’t just a best practice—it’s a necessity.

Informing Governance as a Whole

In my experience, the more we discussed governance within the Power Platform, the more it prompted decision-makers to rethink governance across their entire IT landscape. These conversations often led to deeper questions: What hidden risks exist? Where are the data silos? Who has access to sensitive information that they probably shouldn’t?

The real value in these discussions is that while I’m advocating for a strategic approach to the Power Platform, I’m also making the case for stronger governance overall. It’s not just about one tool—it’s about creating a cohesive, well-managed IT environment that serves the entire organization. When governance becomes a priority, it enhances security, improves data integrity, and ultimately drives better business outcomes across all systems.

Some might argue otherwise, but let’s take a step back—where does the data powering the Power Platform actually come from? In many cases, especially when integrating with REST services to connect to a non-Dynamics ERP or even when working within Dynamics, the data originates from silos. These are the same silos feeding into ERPs, business processes, and, more concerningly, systems that IT may not even be aware of.

This is why governance isn’t just about securing the Power Platform—it’s about understanding and managing the entire data ecosystem. Without proper oversight, organizations risk building solutions on fragmented, uncontrolled, or even unauthorized data sources. Make governance a crucial part of not just platform strategy, but overall IT strategy.

Call to Action

If you’re struggling with governance, take action today:

• Engage Your Partner – If you have a trusted partner, reach out for an assessment to identify gaps and improve your strategy.

• Tap Into the Community – If you have general questions, the Power Platform community (myself included) is here to help. Don’t hesitate to ask.

• Leverage Microsoft Tools – Install the CoE Starter Kit to gain insights and control over your environment.

• Educate Yourself – Explore Microsoft Learn for governance best practices and guidance.

Governance isn’t just a checkbox—it’s an ongoing effort. Take the next step today!

Maturing on The Power Platform: We Don’t Create Unmanaged Layers in Prod

  1. Introduction
  2. Governance
  3. The reasons that we’re here
    1. Lack of Version Control
    2. Deployment Instability
    3. Difficult to troubleshoot issues
  4. Deploy managed solutions
  5. Call to Action

Introduction

I don’t want to be the bearer of bad news—well, maybe just a little. My goal is to save you from yourself, so let me be clear: WE DO NOT CREATE UNMANAGED LAYERS IN PRODUCTION!

If you’re serious about maturing on the Power Platform, there are a few fundamental principles you need to grasp. I get it—the way Power Platform is set up, with everyone having a default environment, can feel like the wild west. But there are some non-negotiables. At the very least, you should be working with two environments—ideally, three: one for development, one for testing, and one for production-ready solutions. You know, a proper application lifecycle management (ALM) process—the same concept they drilled into us in college.

In theory—and in practice, based on what I’ve seen over the years (including my own mistakes)—you can do whatever you want. But at some point, you need to stop, take a step back, and ask yourself: Is a “hot fix” in production really worth the risk?

My answer? Absolutely not. And here’s why.

Governance

Yes, the G word—governance. Autonomy is great—until there’s a data breach. Then suddenly, we’re all asking how our favorite retailer leaked our PII (Personally Identifiable Information), and I’m staring at an email telling me to cancel my credit card, pack up, and start a new life.

Okay, maybe this article isn’t that dramatic—but it could be. Governance isn’t just a Power Platform concern; it applies everywhere. And while we champion secure backends like Dataverse, security only works if we take governance seriously. So, do yourself a favor—treat it like it matters. Because it does.

I have the privilege of working alongside some of the world’s premier experts in governance and compliance, partnering with some of the biggest names in business. And time and time again, we find organizations falling into one of two categories:

The Gentleman’s Approach

These organizations recognize the power of Power Platform but haven’t fully deployed it across their enterprise. They want to get ahead of the chaos by implementing governance before things spiral out of control.

Please Save Us

On the other hand, some organizations have already deployed Power Platform—without guardrails. Now, it’s out of hand, and they’re desperately looking for a way to regain control before things get worse.

If you’ve taken the Gentleman’s Approach, thank you. It makes life so much easier when we can focus on methodology and toolkits to set you up for long-term success.

If you’re in the Please Save Us camp, thank you as well. Acknowledging the problem and committing to steering your organization in the right direction is a crucial step.

The Problem with Poor Implementations

Here’s the thing—lack of governance in Power Platform leads to poor adoption. We have this powerful platform at our fingertips, but if security gaps, broken processes, or unchecked risks get in the way, no one wants to use it—or worse, no one can use it safely.

CIOs and the Tough Questions

Do CIOs make my job harder when it comes to governance? Yes. And they should. The tough questions need to be asked. Don’t just take my word for it—press me, challenge me, ask for sources. This is your organization, your investment, your future.

As a consultant, I care deeply about the services I provide, but at the end of the day, I will roll off your project at some point. My goal? To leave your organization better than I found it. And that is part of the reason we don’t create unmanaged layers in production!

The reasons that we’re here

Lack of Version Control

It’s right there, staring you in the face. You can do it. Just pop that flow open, add that missing action, and everything is right with the world—until it’s not.

Whatever the reason, you must operate with the mindset that tweaking production directly is not acceptable. You cannot predict unexpected behavior, and doing so completely undermines your version control and environment strategy.

If you have a production environment (and please don’t tell me it’s the default environment—that’s a conversation for another day) and some form of environment strategy, respect it.

Make your changes in the lower environments, test them, get sign-off, and deploy to production—the way it should be done.

Deployment Instability

In production, or at least in managed solutions within production, we have what are called solution layers. (I even included a nice, shiny image above to illustrate this—you’re welcome.)

When you create unmanaged layers, you introduce the possibility of deployment failures down the line. The artifacts and components in future deployments weren’t designed to handle the unexpected behaviors you introduced by manipulating a solution directly in production.

Save your deployments. Do it the right way.

Stick to the process—develop, test, get approval, deploy. Your future self (and your team) will thank you.

Difficult to troubleshoot issues

The degree of difficulty in troubleshooting can vary—but it becomes exponentially harder when you don’t even know what you’re looking for.

The unpredictability of removing a single component, a line of code, or an action in a flow can drive even the most rational person up a wall. One small tweak can have ripple effects you didn’t anticipate, turning a simple fix into a time-consuming nightmare.

Let’s avoid unnecessary cleanup, frustration, and sweat-inducing emergencies. Follow best practices, respect your environments, and don’t create an unmanaged layer in production.

Regardless of which camp you fall into, governance matters—whether you’re planning ahead or trying to clean up the mess.

Deploy managed solutions

This should go without saying—but I’ve seen it all. I’ve been on engagements where entire production environments were packed with unmanaged solutions, and it took months to convert everything to managed.

I want my clients to be set up for success, even if it means being a thorn in someone’s side. I get that introducing complexity, governance, and strategy might seem like extra overhead for IT. But trust me—it’s worth it.

Now, think about the alternative: years of unmanaged layers, uncontrolled deployments, and an unrestricted environment that you still call production. The overhead and nightmares that come with that far outweigh the effort of doing things the right way from the start.

If your goal is to build a mature Power Platform model, then you need a strategy in place. Create the necessary environments, security groups, and pipelines to establish a structured, secure, and scalable framework.

Call to Action

It All Starts with Education

Educate your business units, educate IT, heck—educate your dog if you have to. A mature Power Platform adoption is an organizational effort, not just an IT initiative. Do it the right way.

Use the Right Tools

You have plenty of tools at your disposal:

✅ The CoE Starter Kit – Provides a holistic view of your environment.

✅ Power Platform Admin Center – If you’re not ready for the CoE, at least establish a management strategy here.

✅ Security Groups (M365 or Entra ID) – Set them up early to enforce governance and access control.

One Rule Above All

Whatever you do, do NOT create unmanaged layers in production.

Power Automate: The Logic Engine Behind Power Apps

  1. Introduction
  2. The Logic Engine Behind Power Apps
  3. Solution
    1. Canvas App
      1. Project Proposal Main Grid
      2. Project Proposal Entry Form
    2. Power Automate
      1. Handling Scope Logic

Introduction

One would think that by now, we’d all be settled on what Power Automate can do. But surprisingly, that’s not the case. It feels strange to still use the word “potential” when talking about Power Automate, especially since I’ve seen it achieve some pretty amazing feats. It has served as an integration point between the Power Platform and external systems, connected Azure and the Power Platform, and even acted as the logic layer for Power Apps. Yet, I still find myself in conversations with customers, exploring the true depth of its power and capabilities.

Over the next few weeks, I’ll be sharing more about what Power Automate can do. This week we’ll be talking about Power Automate as the logic layer for Power Apps. Follow along to learn more!


The Logic Engine Behind Power Apps

Power Apps is very capable. The problem is that the more complex your logic gets, the more complicated your formulas become. In my experience as a Power Platform developer, it’s rare to build a solution without involving at least one Power Automate flow. These flows are usually triggered by something happening in Power Apps—either directly when the app triggers an automation or once a record that was changed in the app meets certain conditions (like a CRUD operation in Dataverse, SQL Server, or SharePoint).


Solution

Below is a refined version of your text, maintaining a casual style and clear flow:


Our solution will include two components: Power Apps and Power Automate. We’ll be working on a “Project Proposal” process, where every proposal requires approval. Depending on factors like scope or budget, the proposal may need multiple approvers or just one. I won’t walk through the entire build here since this post is purely informational, but I will share screenshots and add details to illustrate each step.


Canvas App

Project Proposal Main Grid

Project Proposals Grid

When you first open the app, you’ll see a main grid listing all project proposals. Each row shows basic details like project name, budget, primary approver, and scope. This screen lets you quickly scan and select any proposal for more information.


Project Proposal Entry Form

Project Proposal Entry Form
Project Proposal Entry Form

This is where you enter all the core information for a new project proposal. It includes fields for basic details like project name, estimated budget, and scope. Once you fill out the form and submit, the proposal is added to Dataverse and triggers the Power Automate flow to handle scope logic.


Power Automate

Handling Scope Logic

Logic Handler

The crux of this solution is how we’re handling our logic. Sure, I could have written an expression with multiple If statements—maybe even nested ones—to get the result I wanted. But instead, I’m passing the necessary parameters to the Flow and letting Power Automate handle the conditional logic. If I ever want to add more conditions, I can do it in a visual way without diving into Power Fx.

Power Automate also offers other logic controls beyond simple If conditions, such as switch statements and parallel branches. This gives you a drag-and-drop interface to manage complex pathways—like sending notifications to different groups or looping through multiple records—without having to manually write or manage code. It’s all about making your logic more transparent and maintainable, so you can expand on it as requirements evolve.

Thank you for reading!!

Power Platform Proof of Concepts – Turning Ideas into Impact

  1. Introduction
  2. The Role of Proof of Concepts
  3. Rapid Prototyping
  4. Conclusion

Introduction

As a consultant, I receive many questions about the Power Platform and its viability as a SaaS solution:

• “Is it secure?”

• “Is it mature enough to handle enterprise-grade solutions?”

• “Why not just use a ‘pro’ developer?”

These are all valid questions because they ultimately point to a larger, fundamental question that organizations typically have — and it can often be summed up with one word: HOW.

While “why” is often the first lens through which we view a problem, I’ve found that dwelling too long on the “why” can sometimes create more uncertainty than clarity. “Why” tends to be conceptual, inviting philosophical or theoretical discussions that don’t always lead to actionable steps. On the other hand, “how” shifts the conversation toward execution. It’s grounded, specific, and provides a strategy to address the questions at hand.

Take security, for example. If someone asks me why the Power Platform is secure, I could say, “It’s built on Microsoft’s trusted infrastructure.” While this is a fair response, it often leads to more follow-up questions: “Why is Microsoft’s infrastructure trusted?” or “Why should I believe it’s secure for my use case?”

Instead, focusing on the how delivers a clearer picture. For instance, how is the Power Platform secure? Through Azure Entra ID (formerly Azure AD), which enforces strong authentication, conditional access, and Single Sign-On (SSO). It goes further by integrating Multi-Factor Authentication (MFA) to add an extra layer of protection against unauthorized access. This level of detail gives key stakeholders in organization such as the CIO, the developer, or IT, tangible reasons to trust the platform.

The same shift from “why” to “how” applies when organizations are exploring the Power Platform’s broader potential. And this is where Proof of Concepts (POCs) come in.

The Role of Proof of Concepts

Proof of Concepts bridge the gap between “why” and “how.” They take abstract ideas and translate them into tangible solutions. A POC allows an organization to validate a concept, ensuring it meets their specific needs before committing to a full-scale implementation.

For example, when someone questions the Power Platform’s ability to handle enterprise-grade solutions, a POC can demonstrate how the platform seamlessly automates workflows, integrates data, and scales to meet business demands. It provides a real-world answer to the hypothetical “what ifs.”

By focusing on the how with a POC, we not only provide clarity but also give stakeholders the confidence they need to invest in the solution. POCs empower decision-makers to move forward with certainty, backed by a tangible demonstration of the platform’s capabilities.

Rapid Prototyping

When it comes to the Power Platform, one of Microsoft’s standout features is its low-code/no-code approach. While planning and requirements gathering remain basic necessity for any enterprise solution, the development time is reduced.

Take Canvas Apps as an example. These are web applications, but unlike the earlier days of web development, where every pixel and element had to be meticulously coded, Canvas Apps simplify the process. They allow developers to visually design the interface by dragging and dropping components onto a canvas. This lets them spend more time focusing on integrating and leveraging backend data sources—whether through Power Automate flows or connectors that directly link the app to the necessary data.

This shift in development approach transforms timelines. What used to require four weeks of intensive coding can now be accomplished in two weeks. The focus shifts from manual coding to refining security, optimizing processes, and achieving meaningful business outcomes.

Yes, investing time and resources in the Power Platform is a commitment, but it’s one that accelerates outcomes. Development on the platform allows us to either achieve success more quickly or “fail fast,” providing valuable insights along the way.

When we fail fast, we uncover lessons that inform better decisions and sharper strategies. When we succeed, we’re not just building solutions—we’re celebrating the realization of a clear path forward. Either way, the Power Platform ensures we’re moving with purpose, minimizing delays, and maximizing the value of our efforts.

Conclusion

If you’re using an M365 license, whether it’s E5 or a lower tier, you already have access to the Power Platform. Chances are, these tools are at your fingertips, yet they might be overlooked in favor of subscriptions to other software.

This is where a Proof of Concept (POC) on the Power Platform becomes invaluable. A POC will do one of two things:

1. Draw you in – It can showcase the Power Platform’s potential, demonstrating its value as an enterprise solution tailored to your needs.

2. Drive you forward – It can help you reach a clear conclusion, whether that’s investing in the Power Platform or exploring alternative solutions.

But here’s the key: how would you know if you didn’t try it?

A POC offers the opportunity to explore, test, and validate the Power Platform’s capabilities within your unique business context. It’s a low-risk, high-reward approach to uncovering whether this suite of tools can transform your processes and deliver the outcomes you’re seeking.

Thank you for reading!

More Than Word: Rapid App Development with SharePoint Templates

  1. Introduction
  2. SharePoint/Microsoft Lists
  3. Solution
    1. Available Templates
    2. Step 1: Create list from template
    3. Step 2: Be creative!!
    4. Extra

Introduction

Recently, someone asked me what I do for a living. My standard response is, “I am a Microsoft consultant.” I phrase it this way because the scope of Microsoft’s ecosystem is truly vast. Before I started consulting organizations on tools like Azure and Power Platform, I didn’t fully appreciate just how expansive Microsoft’s solutions really are.

The response I got was a little different than what I usually hear from business users, and I believe it was shaped as much by geography as by the products themselves. Milwaukee, WI, where I’m based, is a city historically known for heavy manufacturing, motorcycles, and beer.

This industrial legacy extends across Wisconsin, which has long been rooted in factories and industries, often relying on ERPs like Epicor or SAP. While Microsoft products are widely used here, they’re often limited to familiar tools like Word, Excel, and Outlook. However, Microsoft is far more than Word—it’s a robust platform that includes Azure cloud services, enterprise solutions like Dynamics F&O and Business Central, and the Power Platform. These tools empower both pro developers and low-code creators to build innovative solutions that drive business transformation.

Now, with the introduction of generative AI and Copilot, the Microsoft ecosystem has expanded even further, unlocking new possibilities for productivity and automation.

For those who still know Microsoft primarily for Word, I’m continuing a mission I started earlier this year: raising awareness of the incredible features included with Microsoft 365 licensing. Today, my focus is on the Business Standard license, specifically how it enables rapid development of custom business applications using SharePoint and Microsoft List templates. Let’s dive in and explore how you can make the most of these tools!

SharePoint/Microsoft Lists

One of the key benefits of a Business Standard license is access to SharePoint. SharePoint is an incredibly powerful tool, offering exceptional value for its cost. It serves as a collaborative workspace with features like built-in document management, intranet capabilities, and the ability to host and manage data in lists.

One of the key benefits of a Microsoft 365 Business Standard license is access to SharePoint, a robust tool offering exceptional value. SharePoint serves as a collaborative workspace with features like built-in document management, intranet capabilities, and the ability to host and manage data in lists.

While we won’t delve into all of SharePoint’s functionalities, let’s focus on its versatile lists feature. These lists are powerful tools for organizing and managing data, and you don’t need to access SharePoint directly to use them. The Microsoft Lists application provides an intuitive interface to work with these lists, making them a convenient and powerful data source for your business needs.

A significant advantage of Microsoft Lists is its accessibility across multiple platforms. You can manage your lists on the go using the Microsoft Lists mobile app, available for both iOS and Android devices. Additionally, while there isn’t a dedicated desktop app for macOS, you can use Microsoft Lists as a Progressive Web App (PWA) on your Mac. This setup allows you to work with your lists directly from your desktop, providing a seamless experience across devices.

This cross-platform availability ensures that you can access and manage your data whenever and wherever you need it, enhancing productivity and collaboration within your organization.

Solution

The template we’ll focus on today is the Asset Management template. While there are many templates to choose from, this one offers a great starting point for tracking and managing assets. It’s important to remember that you’re not limited to the fields provided in the template. SharePoint lists are customizable, and adding a new field to tailor the template to your specific needs is relatively easy.

If the out-of-the-box template meets most of your requirements but falls short in one or two areas, simply modify it by adding the necessary fields. This flexibility allows you to make the template truly your own while saving time and effort on development.

Available Templates

For posterity these are the templates available in SharePoint/Microsoft Lists:

1. Issue tracker

2. Employee onboarding

3. Event itinerary

4. Asset manager

5. Recruitment tracker

6. Travel requests

7. Travel requests with approvals

8. Work progress tracker

9. Content scheduler

10. Content scheduler with approvals

11. Playlist

12. Gift ideas

13. Expense tracker

14. Recipe tracker

15. Reading list

16. Apartment hunting

17. Job application tracker

18. Product support metrics

Step 1: Create list from template

In this step, we’ll select the Asset manager template. This will guide you through a wizard-like experience. On the next screen, you’ll see a preview of how the list will look when populated with data. From there, you’ll name your list and choose the option to create it. In just a few seconds, you’ll have a functioning data source for your asset management process.

Selecting template
Example
Renaming and creating template
Empty list in your SharePoint site.

Step 2: Be creative!!

The next steps are entirely up to you. There are countless stories waiting to be told through data. As a business application developer, I tell the story of business data using tools like Power Apps and Power Automate. A data or business intelligence analyst might choose to use Power BI to craft insightful reports from the same data. The key takeaway here is that we now have a central repository for our data—one that was created quickly, can be easily iterated upon, and serves as a foundation for exploring what’s possible with Microsoft 365 licensing.

If you’re a CIO or business user, this approach can help you realize the potential of the Power Platform. It’s perfect for spinning up a quick proof of concept (POC) to demonstrate not just the art of the possible, but the art of what is. And what is—that Microsoft is far more than just Word. It’s an expansive, powerful platform ready to transform the way you work.

Extra

Next, I’ll share images of an application and flow I built using this list as the foundation. By starting with the Asset Manager template, I was able to significantly reduce the time spent planning out the architecture and get straight to work. This allowed me to focus on the “extras”—how I wanted the app to look and how I wanted to structure my flows.

In total, it took me about three hours to build and iterate on the process, refining my ideas about how everything should function. By integrating this data source with the Power Platform, users can rapidly develop solutions tailored to meet specific needs, enabling faster delivery and greater flexibility.

List
Home screen of mobile app for managing assets
Flow used to implement ‘sumIndex’ functionality in another list, simplifying sum retrieval in the app by offloading the logic to the flow, reducing the app’s processing load.

M365 OOB Series: Planner

  1. Introduction
  2. Solution
    1. Step 1: Microsoft Forms
    2. Step 2: Microsoft Planner
      1. Create New Plan
        1. Select ‘New Plan’
        2. Name your plan
        3. Set Privacy and Sensitivity
        4. Create
      2. Buckets
        1. Creating New Buckets
        2. Add new bucket
        3. Enter bucket name: {Name of your bucket}
        4. Tasks
    3. Step 3: Power Automate
      1. Trigger
        1. When a new response is submitted
        2. Action (Get response details)
        3. Action (Update task details)
    4. End to end test

Introduction

I believe Microsoft 365 licenses often go underutilized, with many businesses purchasing them without fully exploring their potential. Time and again, I implement solutions for enterprise clients whose needs might not initially seem to require all M365 apps. However, I see these applications as building blocks for powerful solutions in today’s workplace.

I’m passionate about empowering organizations to achieve more, and I believe Microsoft shares this vision, as reflected in the capabilities offered in their standard licenses. One app with great potential is Microsoft Planner. While Planner isn’t as feature-rich as Project or DevOps, it’s a strong alternative to tools like Trello and the former and can significantly benefit task management.

In this discussion, we’ll explore how to enhance Planner using Power Platform, particularly Power Automate. You’ll gain insights into Planner itself and see how Power Automate extends its functionality with M365 components. Best of all, this solution doesn’t require premium licensing—so if you have at least a Business Standard license, you’re good to go!


Solution

Our solution will utilize three main components: Microsoft Forms, Microsoft Planner, and Power Automate.

  • Front-end: We’ll use Forms to collect input from prospective customers.
  • Automation: Power Automate will process this input, creating a follow-up task in Planner for each prospect.
  • Back-end: Planner will guide the onboarding journey for each customer. Once they’re onboarded, their information will be stored in a SharePoint list, ready for use in a Canvas App for customer management (to be introduced in the next discussion).

This streamlined approach ensures a smooth transition from prospecting to customer onboarding.


Step 1: Microsoft Forms

We’ll start by creating a basic form in Microsoft Forms, which is fortunately very user-friendly. The field types are limited, so it’s hard to go wrong here. For this solution, Forms is a solid choice since we’re only collecting general data—not sensitive information. It’s akin to signing up for a newsletter (unless, of course, it’s from a political party during election season!). Overall, Forms is a safe and straightforward option for our data collection needs.

For clarity, Microsoft Forms provides several field types, including choice, text, date, ranking, Net Promoter Score, file upload, rating, and Likert scale. In our form, we’ll use the text field type for each of our four questions, with all fields set as required. The fields will be:

  1. First Name
  2. Last Name
  3. Email
  4. Reason for contacting us

This setup keeps things simple and captures just the essential information.


Step 2: Microsoft Planner

The next component of our solution is Microsoft Planner. There are multiple ways to create a plan in Planner, but since the goal is to encourage users to explore business applications they already have, we’ll stick with the standard, non-premium approach.

For fully automated plan creation, the Graph API for Planner can be used, either through a custom connector or by making HTTP requests in Power Automate. However, for this solution, we’ll take a straightforward approach by manually creating the plan directly in the Planner interface.

Create New Plan

Navigate to Planner and take the following steps:

Select ‘New Plan’

Name your plan

Set Privacy and Sensitivity

Create

Buckets

When you create your plan in Microsoft Planner, you’ll see it displayed in a board view or Kanban view, where each category is referred to as a bucket. You can customize these buckets based on your onboarding strategy for prospects, organizing them in a way that best fits your workflow.

Creating New Buckets

Follow these steps to create new buckets. You can create as many as needed for your process. For example, I created three buckets: ‘To do,’ ‘Won,’ and ‘Lost.’

Add new bucket

Enter bucket name: {Name of your bucket}

Adding bucket

Tasks

Each bucket holds tasks that are linked to it. While you can create tasks manually, we rely on automation to handle this. When a new form submission is received, a task will automatically be created in the ‘To do’ or starting bucket.


Step 3: Power Automate

Our flow will be simple: we’ll take the form responses and automatically create a Planner task to follow up with the client.

Trigger

When a new response is submitted

When a new form response is submitted, our flow will trigger automatically. Make sure to select the correct form from the dropdown menu in Power Automate to ensure the flow works with the form you’re using.

Triggered when a new response is submitted

Action (Get response details)

The next step in the flow is to add the action to Get Response Details from the form submission. Select the same form as the Form Id that you want to receive responses from. Then, use the dynamic content from the previous step to set the Response Id and retrieve the submission details.​

The only available text field we can use is the Title field. To make it work, we’ll use dynamic content from the Get response details action, specifically the First Name, Last Name of the submitter. This information will be combined in the Title field so the agent in Planner will easily identify who to follow up with.

Action (Update task details)

After creating the task, we need to update its details to include relevant information from the submitter, such as their email address. Additionally, we will add a checklist to help the agent track the necessary steps for completing the task efficiently.

Using the dynamic content from the previous action, we will set the Task Id, update the Description field with the necessary data (such as the submitter’s email), and create a checklist item to ensure the agent follows up by emailing the prospect.

End to end test

Contact form
Successful submission

Securing Internal Documents: Managing SharePoint Locations to Restrict External Portal Access

  1. Introduction
  2. Shoutout to Keegan
  3. Solution
    1. Step 1: Configuring the Basic Form
    2. Aside: Spoofing the System
    3. Step 2: Building the Flow
      1. 1. Trigger: When a row is added, modified, or deleted
    4. SharePoint Actions
      1. 2. Create new folder (Create Parent)
      2. 2. Create new folder (Create External Documents)
    5. Dataverse Actions
      1. 1. Add a New Row (Create External Document Location Record):
      2. 2. Add a New Row (Create Parent Document Location Record):
      3. 3. Update a Row (Change Parent Site on External Folder)
    6. In practice
      1. Steps to Set Up the Internal Subgrid:
      2. Test out internal subgrid

Introduction

I want to start by saying that my recent work with Power Pages has been a significant learning experience. While I had some idea of what I was getting into, I had to quickly upskill. Here’s the key takeaway: don’t fear what you don’t know. Fear of the unknown often holds us back, especially in the tech world, where there are always countless uncertainties. We use tools to build solutions and inevitably face gaps or unknowns along the way. Instead of shying away, embrace those unknowns, expect them, and take action. Soapbox moment over.

Shoutout to Keegan

I have to acknowledge my colleague, Keegan, for this. We worked on a Power Pages project with SharePoint integration and want to ensure that only external users can view external-facing documents. Internally, a reviewer will upload documents to the external user’s record. While the internal reviewer will have access to all documents in the library, the external user will be restricted to documents stored in an external-facing SharePoint folder.

We experimented with several approaches to implement the segregation, but nothing seemed to work. Initially, we considered adding a metadata field to the document library to flag files or folders as external, then using JavaScript in the portal to filter out the results. However, I was concerned that if the JavaScript failed or loaded slowly, it could inadvertently expose sensitive files to users who shouldn’t have access. That potential risk made me uncomfortable with relying on this approach.

We noticed there had to be an internal process Microsoft uses to decide which folder gets surfaced in the subgrid. It was Keegan who suggested that maybe the ‘Created On’ field in the Document Locations Dataverse table was being used to determine which folder gets displayed. And sure enough, that was the case. So, big shoutout to Keegan for that insight. He even suggested I write an article about it, but I have no problem giving credit where it’s due—he’s a great guy.

Solution

I won’t be covering the process of setting up SharePoint integration with Power Pages in this article, but I will go over the basics of our table permissions. Anything beyond that is outside the scope of this discussion. If you’re unfamiliar with the SharePoint integration setup, please visit Manage SharePoint documents. Once you’re comfortable with that, return to this article and pick up the instructions from there.

Step 1: Configuring the Basic Form

For our solution, we didn’t need to use the entire Dataverse form; we just needed a simple space to upload files. You can choose to use the full form or modify it to fit your needs. We’ll be uploading our forms to a table we named “Site.” A quick note: avoid naming a table in your Dataverse environment “Site.” Power Pages uses a table called “Site” that holds the site record for the Power Pages website, so using the same name could cause conflicts within the environment.

Whatever permissions you set on the form; I recommend changing the parent permission to “Global” for the purposes of this discussion. You can adjust the permissions later based on your specific needs, but for now, this will help show functionality. Once you change the parent permission’s access type, we should be all set. Still, please note—until we complete the Power Automate flow, I suggest against uploading anything into the subgrid. You’d likely have to delete it later anyway.

Aside: Spoofing the System


One thing we noticed when manually walking through this process is that in the Document Location table in Dataverse, the first Document Location record “wins” and becomes the default. This is why we need to “spoof” the system a bit. When the first file or folder is added, it automatically creates the parent document location in Dataverse, which we don’t want in this case. Instead, we want to create the external document location first. Once that’s done, we create the parent document location. After the parent is created, we’ll associate it with the external document location. This ensures that the external location takes priority in the subgrid, making it visible only to external users on the Power Pages website, while files or folders outside of the external folder structure and including the external folder will still be visible to internal users via the model-driven app.

Step 2: Building the Flow

Building out the flow is fairly straightforward. We want to automatically create the folder structure every time a new site is created, ensuring that when documents are uploaded from Power Pages, they are always directed into the external-facing folder. To implement this design effectively, we’ll use an automated trigger.

1. Trigger: When a row is added, modified, or deleted

This trigger will monitor the creation of new sites and automatically build the necessary folder structure, making sure the external folder is ready for document uploads.

SharePoint Actions

To achieve the necessary design for our folder structure, we will be using two SharePoint actions. These actions will create both the parent folder and the external folder nested inside the parent folder. Both actions will utilize the “Create new folder” action.

2. Create new folder (Create Parent)

  • Site Address:
    This should be the location of your document integration. If you’re unsure of the SharePoint site location for the integration, you can review the document management settings in Advanced Settings to find it.
  • List or Library:
    Library where your documents are stored, check the site contents of the SharePoint site to verify the document library where you want your documents to be stored.
  • Folder Path:
    The folder path will be a concatenation of the Site Name and the Site GUID, separated by an underscore (_). This ensures a unique folder structure for each site created.
replace(concat(triggerOutputs()?['body/dul_name'],'_',toUpper(triggerOutputs()?['body/dul_siteid'])),'-','')

This setup will create the parent folder, setting the foundation for further customization with the external folder inside.

2. Create new folder (Create External Documents)

  • Site Address:
    Use the same site address as the Create Parent action.
  • List or Library:
    Select the same document library as the Create Parent action.
  • Folder Path:
    Using the dynamic content from the previous action, select the Title of the folder created in the parent action, then add a forward slash (/) and specify the name of your external documents folder (e.g., 0External_Documents).

This will nest the external folder inside the parent folder, ensuring that all external-facing documents are uploaded into the appropriate folder structure.

Dataverse Actions

Once the folder structure is set up in SharePoint, the next step is to establish the corresponding Document Location in Dataverse. Before proceeding with any Dataverse actions, navigate to make.powerapps.com and open the Document Locations table. Find and extract the GUID for the default site’s Document Location record, which should be titled “Documents on Default Site.” This GUID is crucial for the Dataverse actions you’re about to implement, so make sure the record is available and correctly identified before continuing.

1. Add a New Row (Create External Document Location Record):

  • Table Name:
    Document Locations
  • Name:
    External Documents
  • Parent Site or Location (Document Locations):
    sharepointdocumentlocations({GUID of Default Site record})
  • Regarding (Sites):
    dul_sites({GUID of the site in the trigger})
  • Relative URL
    0External_Documents
    (Note: “Sites” is the table name being used for SharePoint integration in this example. Your table name may differ.)

It is essential to create the external document location record before proceeding with any further steps.

2. Add a New Row (Create Parent Document Location Record):

  • Table Name:
    Document Locations
  • Name:
    Trigger Name
  • Parent Site or Location (Document Locations):
    sharepointdocumentlocations({GUID of Default Site record})
  • Regarding (Sites):
    dul_sites({GUID of the site in the trigger})
  • Relative URL
    replace(concat({Name of Trigger},’_’,toUpper({GUID of Trigger})),’-‘,”)
    (Note: “Sites” is the table name being used for SharePoint integration in this example. Your table name may differ.)

3. Update a Row (Change Parent Site on External Folder)

  • Table Name: Document Locations
  • Row ID: {GUID of External Folder Document Location}
  • Parent Site or Location (Document Locations): sharepointdocumentlocations({GUID of Parent folder})

It’s crucial to update the parent site or location to align with the folder structure in SharePoint. This process leverages relative URLs, so it’s important that the relative URLs follow a consistent hierarchy. For example:

  • Default Site Relative URL: dul_site
  • Parent Relative URL: LinkedInTestSite
  • External Folder Relative URL: 0External_Folder

By correctly linking these records, the fully constructed URL will follow the pattern: dul_site/LinkedInTestSite/0External_Folder. This ensures the folder structure in Dataverse matches the structure in SharePoint, maintaining consistency and proper document organization.

Automated Dataverse trigger and creating folder structure in SharePoint
Creating external document location record in dataverse
Creating parent folder document location
Reparenting external document location with Parent record

In practice

Steps to Set Up the Internal Subgrid:

1. Open the main form for your table.

2. Add a subgrid to the form.

3. In the subgrid properties, select Related Records.

4. Choose Documents (Regarding) from the list.

5. Select All SharePoint Documents.

6. Save the changes.

7. Publish the form to apply the updates.

Test out internal subgrid

  1. Navigate to the table with the integration and select a record.
  2. Click Edit to open the form.
  3. In the subgrid, choose the Document Location dropdown and select All Locations. This will display all files in the folder structure.

In my case, the internal subgrid shows 5 records, including those uploaded from Power Pages or residing in the External Documents folder, but on the Power Pages side, only 3 files are visible.

  • This is because documents on the Power Pages side are written to the External Folder, so only documents in that folder will be visible to external users.

Important: If you upload a file to any location other than the External Folder, it will not be accessible to external users.

If you select the External Documents tab in the internal subgrid and upload a file, it will be added directly to the External Folder, making it visible to external users.

Internal facing subrid with all files including files uploaded from Power Pages
Files residing in the External Documents folder shown here in Power Pages

Canvas App Optimization: Collections

  1. Prelude
    1. Thank you “L”
  2. Introduction
  3. Collections
    1. Collection Construction
      1. Filter Criteria
    2. Example 1: Filtering Data Source based on Status
    3. Example 2: ShowColumns()
    4. Example 3: DropColumns()
    5. Example 4: 1 Record Collection
    6. Example 5: Real Time Feedback
  4. Conclusion

Prelude

I’ve just come back from a trip to Las Vegas, Nevada, USA, where I had the honor of attending the Power Platform Community Conference — it was fantastic. Before I continue, I must express how incredible the power of community is. My growth over the past six years has been significant, and I believe it has progressed in tandem with the Power Platform Community.

The inspiration for this post comes from the community. Professionally, I hold the position of Power Platform Supervisor, essentially an architect. Before reaching my current role, I was in the same position as many of you, trying to understand the intricacies of the Power Platform. There were a few trailblazers who had already started to unravel its mysteries years ago, like Matthew Devaney, Hardit Bhatia, Reza Dorrani, and Shane Young. Their pioneering work has been instrumental in my journey. Matthew even gifted me a bottle of Canadian maple syrup along with a touching note. This community is amazing!

Thank you “L”

During my time in Vegas, I encountered a kind young woman who, coincidentally, shares the same surname as one of my close friends, though they are not related. We’ll refer to her as L. Her humility and determination to resolve the issue with her app compelled me to offer some guidance.

I noticed many similarities between myself and L, particularly that she was using SharePoint as her data source, which is where many of us seasoned pros on the Power Platform started. Her dedication to her organization’s needs was clear. I sensed her passion, and on the first day, I offered her some advice that seemed to open up a new perspective on her app to her. The next day, she came back to the conference room, presented the progress she made overnight, and discussed her successes and challenges with me.

It’s incredible to think that nearly six years ago, I was in L’s position. I suspect that if her passion for the Power Platform endures, she’ll likely surpass me. That’s what it’s all about: spreading ideas and fostering a community that’s the antithesis of gatekeeping. If it’s a matter of money and career, there’s plenty to go around. Here, you’ll find no closed doors. L, I want to express my gratitude for reminding me of what it felt like six years ago and for giving me the opportunity to pay it forward. So, here’s to you, L – thank you.

Introduction

Canvas Apps are both fun and frustrating. I find the beauty to be in creating these pixel perfect custom applications, the angst in the patterns we must construct to make the app run as smoothly as possible. When done right, not only do you have a beautiful creation, but you also have beautifully written patterns that retrieve data efficiently and in an optimized manner that will make any “pro” developer proud.

Collections

Using collections is a method to enhance our application’s performance. Collections are, in essence, temporary tables or tables stored in the application’s memory, acting as a type of variable. Their strength lies in their capacity to store tabular data, which can be a precise replica of our data source.

This data can stay in the app until the collection is updated or destroyed, either by command or upon the application’s launch or closure. Storing data within the app significantly boosts performance, as it eliminates the need to repeatedly retrieve data, thus avoiding performance lags. When fields in your forms or galleries draw from the collection, updating them provides instant feedback to those fields, bypassing the need for a patch to the data source and the later retrieval of the updated value or reloading of the collection.

Moreover, collections value extends to improving the UI of our canvas app, enabling us to write conditional patterns in our formulas that adjust the visibility of controls, borders, colors, and similar elements.

Collection Construction

Filter Criteria

Before we continue with our exploration of collections, it’s important to consider certain aspects of how we will construct our collection. Although collections can be an exact mirror of our data source, it is crucial to contemplate the techniques we use to filter our data source.

Ensuring we have proper filter criteria is crucial because it prevents us from retrieving unnecessary data. We aim to avoid overloading our application with irrelevant rows that do not contribute to the operations we intend to execute. When considering data sources or datasets, think about the number of operations that can be derived from a single source. With this consideration, meticulously decide your objectives and set filter criteria that serve as a pathway to those goals. Otherwise, you end up creating collections that deviate from the original intent of your project.

Example 1: Filtering Data Source based on Status

A prevalent method for applying filter criteria is to set up the database to return only active records. The first example will show this approach.


Using my SharePoint List:

  1. Create Collection called colBooks
  2. Filter SharePoint List by Status field to retrieve records that are active
  3. Display records in items property of table
Creating collection with no filter criteria
Unfiltered collection in data table control
Using Filter function to retrieve records with Active status
Filtered collection

Example 2: ShowColumns()

Another way to create a collection in Power Apps is by using the ShowColumns() function. This function enables developers to explicitly choose which columns they want to include and make available within the app.

Our method for building collections improves performance by retrieving only the essential columns. This reduces the app’s load, resulting in faster execution, especially when working with large datasets.

In my experience, there’s rarely a valid reason to retrieve every column from a data source. While clients may sometimes ask for this, it’s crucial to remember that doing so can pull in unnecessary system columns. For example, in SharePoint, this will include columns like {ModerationComment} and {ModerationStatus}, among others.

Formula for ShowColumns(), explicitly selects the columns needed and leaves out the rest
Explicitly selected columns on view in table

Example 3: DropColumns()

The inverse of ShowColumns() is DropColumns(). While ShowColumns() lets you explicitly select which columns to show in the app, DropColumns() lets you specify which columns should be excluded. This is particularly useful when you need most of the data but want to omit specific columns, like unnecessary system fields or sensitive information, keeping the app more efficient and secure.

Streamline your app with DropColumns() by removing unnecessary fields and keeping only essential data.
The ISBN field is empty because we used DropColumns() to remove it when refreshing our collection

Example 4: 1 Record Collection

What’s the point of having a collection with just one record? While collections are typically used to display tabular data, they’re also highly flexible and can be updated. I often pull a single record into a collection to isolate it and work with that specific data. In my opinion, it’s more efficient to modify a single record in a collection than to reset an entire variable.

To illustrate this with a use case: In Power Apps, the out-of-the-box form experience can be limited, and there are situations where creating a custom form is necessary. I often do this using a gallery, as the custom form only needs to handle one record at a time. In such cases, I create a single-record collection and assign it to the gallery’s Items property. This makes the contents of that collection available to the gallery or custom form, allowing for more flexibility and control in handling the record.

Using First() function to return the first record from the data source and create a single record collection
Single record collection
Using LookUp function to filter based on unique value (ISBN) to create single record collection
Single record collection filtered by ISBN

Example 5: Real Time Feedback

A key advantage of a collection is that it stores tabular data in memory on the client side. Since the collection is available within the app, you can change it without needing to alter the data on the server. This allows any control using the collection as its data source to instantly show changes once the collection is updated, providing real-time flexibility and responsiveness in the app.

To update a collection, there are several techniques you can use depending on your needs. You can leverage functions like Update(), UpdateIf(), and Patch(), among others. Each of these offers a different approach—Update() replaces an entire record, UpdateIf() modifies records based on a condition, and Patch() lets you selectively update specific fields within a record. These options give flexibility in how you manipulate data within the collection, enabling efficient real-time updates.

Notice price before modification
Formula to update Price of last book in the collection
Updated price

Conclusion

Once again, I’d like to thank my friend “L.” As a consultant who works with many clients throughout the year, it’s easy to forget those early days and the challenges you face when starting out as a Power Platform developer. If you’re like “L” and need some guidance, don’t hesitate to reach out to the community through various social media forums or the official Power Platform community. There’s a wealth of knowledge and support available.

Collections are a powerful tool, and I encourage all canvas app developers to take full advantage of them. Not only can collections help improve performance in terms of data retrieval, but they can also enhance the user interface and overall app functionality, as shown in the examples throughout this article. There are countless ways to leverage collections, so I urge you to explore their potential. Happy building!

Enhancing Microsoft Bookings with Power Platform: Streamlining Scheduling and Automation


  1. Introduction
  2. Bookings – 30000 Foot Overview
  3. Our Solution
  4. Building Bookings Site
    1. Step 1 – Bookings Homepage
    2. Step 2 – Create Shared Bookings Page
    3. Step 3 – Add a new service
    4. Service configuration
  5. Creating Appointment Spreadsheet
    1. Step 1: Launch OneDrive
    2. Step 2: Create Excel Workbook
    3. Step 3: Establish a formatted field using Data Validation to generate a dropdown menu
  6. Creating Power Automate Flow
    1. Step 1: Select Flow Type
    2. Step 2: Configure Flow
  7. Conclusion

Introduction

I remember my second IT leader always emphasizing the importance of leveraging out-of-the-box solutions. That initially clashed with how I envisioned my tech career. I imagined myself as a coder, creating innovative, never-before-seen applications. However, over time, I realized the true value lies in making the most of the tools and features already available on our platforms. While it’s possible to build an API for nearly anything, we have to consider that others will maintain what we create. I’ve learned that just because we can build something, doesn’t mean we should. The focus should always be on delivering value without overcomplicating the solution.

One of the questions I often ask myself as a consultant is why a business customer would purchase Microsoft 365 Business Licensing and not fully utilize its features. Is it due to a lack of knowledge? Are users simply sticking to familiar tools like Word, Outlook, and Excel? Whatever the reason, I believe we should aim to maximize the value of our existing licensing and platform(s) before seeking external services that could be recreated in-house or eliminating redundant software to save costs.

It is not my intent to talk anyone out of purchasing a platform that they are familiar with. However, I want customers to know what they already have available with their Microsoft 365 subscription. In some cases, newer customers to the Microsoft 365 ecosystem aren’t fully aware of all the services and tools they’re paying for. For example, I have found that customers are unaware of their access to Power Apps and Power Automate—tools that can unlock tremendous potential for customization and automation.


Bookings – 30000 Foot Overview

When you hear “Microsoft Bookings,” what comes to mind? Or do you even think about Microsoft Bookings at all? If not, you’re not alone. I like to think of Bookings as a web-based interface for Outlook because it essentially builds on Outlook’s scheduling capabilities, like creating Teams meetings. In some ways, Bookings is similar to Calendly, though it lacks support for multiple backend calendars.

If you’re reading this, you likely already have, or are considering, a Microsoft 365 license. Thanks to the Power Platform’s flexibility, integrating with external services like Calendly is quite simple, especially with its available API connector. However, the focus of this article is on maximizing extensibility without incurring extra costs beyond your standard business licensing. As of this writing, the Calendly connector is classified as a premium feature, which means additional charges for using it in automation or apps—approximately $15 per month for Power Automate and $20 per user per month for Power Apps.


Our Solution

We want to provide our clients with the ability to book appointments with us. After the booking is confirmed, we will send an email to the client containing details on how to remit payment before the upcoming appointment. Using Power Automate, we’ll automatically log the booking details into a spreadsheet. This will include the client’s name, meeting description, meeting notes, meeting date, and a boolean field to track whether payment has been received before the scheduled appointment.


Building Bookings Site

Step 1 – Bookings Homepage

To get started, navigate to Bookings – Admin – Outlook (office.com). Once you arrive at the site you will see the homepage (pictured below).

Bookings homepage

Step 2 – Create Shared Bookings Page

Next we’re going to create our booking page. There are two ways to create a booking page.

  1. Create from scratch
  2. Clone an existing booking page
Booking Page creation prompt


During this demo, we will create our page from scratch. To begin, select “Create from scratch,” which will launch a creation wizard with the following options:

  • Name – Name of Booking Page
  • Logo – Company logo. I would use a vector graphic of some sort just so image does not get distorted
  • Business type
    • Healthcare
    • Recruiting
    • IT Support
    • Education
    • Financial Services
    • Sales
    • Other
Configuring booking page name, logo, business type, business hours
Inviting users in organization
Selecting service – service is an appointment type
Configuring visibility of bookings page
System is creating bookings page

Bookings page created
Bookings Calendar

Step 3 – Add a new service


Once our Bookings page has been created, the next step is to add services that will be displayed to users. When creating a service, there are several categories with configurable options, including:

  • Basic Details
  • Availability Options
  • Assign Staff
  • Custom Fields
  • Notifications

These settings allow us to tailor the meeting scheduling experience to fit both our availability and the needs of our clients.

Add service modal

Service configuration

As we configure the basic settings for our new service, you’ll learn how the booking system works. Feel free to explore and configure additional options for your service during this demo.

The options we are going to configure can be found under the Basic details tab.

  • Name
  • Description
  • Location
  • Duration
  • Buffer Time
  • Cost
  • Maximum number of attendees

We will also include a custom field to capture how customers discovered our company.

This image has an empty alt attribute; its file name is image-18.png
Configuring basic details
Adding custom field

Creating Appointment Spreadsheet

Let’s focus on our outputs; we will utilize a spreadsheet to monitor whether a customer has paid for their appointment. We will store our spreadsheet on OneDrive.

Step 1: Launch OneDrive

  1. To access OneDrive navigate to office.com
  2. From our app launcher Select the OneDrive logo to launch OneDrive

Step 2: Create Excel Workbook

  1. Click the Plus (+) sign.
  2. Choose ‘Excel Workbook’.
  3. Enter the following column headers for the workbook: Client Name, Meeting Description, Meeting Notes, Meeting Date, Paid.
  4. Highlight the first row, then go to the ‘Styles’ tab and choose ‘Format as Table’.
  5. Tick the box that says “My table has headers”.
  6. Click ‘OK’.

Step 3: Establish a formatted field using Data Validation to generate a dropdown menu

  1. Select the “Paid” field.
  2. Choose the Data tab from the ribbon.
  3. Click on Data Validation.
  4. From the Allow dropdown, choose List.
  5. Enter a comma-separated list with the values true, false.
  6. Click Apply.

Creating Power Automate Flow

Step 1: Select Flow Type

  1. To create our automation to process newly created appointments navigate to make.powerautomate.com
  2. Select Create
  3. Select Automated cloud flow as flow type
  4. Name flow
  5. Select Bookings Trigger “When a appointment is Created”
  6. Select Create
Power Automate landing page
Selecting automated flow
Selecting trigger

Step 2: Configure Flow

  1. Sign in to the Bookings calendar using the same credentials you used to create the Bookings page.
  2. Add the Excel action “Add a row into a table.”
  3. Fill in the required details for the action, including file location, document library, file name, table name, and any other necessary fields.
Bookings trigger – “When a Appointment is Created”
Action to add a new row into our spreadsheet each time a new booking is created.
Flow run to insert row into spreadsheet
New row in our spreadsheet from our new client booking


Conclusion

While it’s easy to turn to familiar tools or third-party platforms, the true value lies in unlocking the full potential of your existing Microsoft 365 subscription. By harnessing the power of the platform—specifically tools like Power Apps and Power Automate—you gain a comprehensive solution that can streamline processes, drive productivity, and reduce unnecessary costs.

Microsoft 365 isn’t just a collection of isolated applications; it’s a fully integrated platform designed to help you build solutions that fit your unique business needs. Whether you’re automating workflows or creating custom apps, the flexibility and extensibility of Power Platform allow you to create tailored solutions without the complexity of building from scratch or relying on external services.

By investing in this platform as a solution, you’re empowering your business to do more with less—maximizing the value of what you already have while ensuring that any custom developments are truly meaningful and efficient. With the right approach, complex problems can be solved in simpler, more effective ways, giving you the agility to grow and adapt without over complicating your tech stack. Businesses can not only streamline processes and enhance productivity but also avoid unnecessary costs. The goal should always be to maximize the value of the tools at hand, ensuring that any custom development or external service is truly adding value. After all, the power of the platform is in its flexibility and extensibility, often making complex solutions easier than we might initially imagine.