top of page
hero-bg-1.png

Search Content

150 results found with an empty search

  • New way to add the Attachment Control in Power Apps

    Ready to have your mind blown? That may be a little much, but we are pretty excited for this and think you will be as well. Let’s start with a quick look at how we used to add the Attachment control. Previously, adding the Attachment control involved multiple steps, such as adding a data source, inserting an Edit form, adding the Attachment field, and then manually copying the control outside the form to configure it. That worked for years, still does, and there’s nothing wrong with that approach. Maybe a little excessive on the steps, but hey, it works. But what if I told you there was an easier way to add the Attachment control (or any other control for that matter) in your Power Apps. Odds are if you’re reading this, you are at least somewhat interested ha. You can do this with any existing app or start with a blank app, it’s up to you.  For our example we will be using a blank app to keep things simple. From the Power Apps editor, click the Ellipses at the top and select Settings . On the Settings window, click Support . Make note of the Authoring version, it’s probably 3.25061.7 . We need to change that. Below Authoring version, click Edit . Then, under Authoring version, click the drop-down and select 3.25063.5 . (Your version may be different, but you just want to select the newest version.) Once selected, click Reload + apply version . Power Apps is then going to reload your app and reopen. It’s always a good idea to double-check that your changes were saved and your Authoring version was updated. So, take a moment to confirm your Authoring version now shows as 3.25063.5 or again the version you selected. It’s also important to note that, as a rule of thumb, we don’t recommend doing this in any other cases, as it can get people in trouble. BUT if you need the attachment control working again, you will need to update the Authoring version. And hey, Shane said it’s ok, so it must be alright 😊 Now that the version is updated, you can simply copy and paste the YAML code for the attachment control right into your app. If you’re thinking to yourself, What is YAML code? Let me assure you, it’s fine, you are not alone either 😊. We aren’t even going to get into it, just know that code is what allows you to paste these controls into your apps. Let’s check out how it works. So, from my text editor, you can see the YAML code and properties for the Attachment control. I’ve also included the YAML code below so you can copy and paste it into your app. - Attachment1: Control: Attachments Properties: BorderColor: =Color.Purple BorderThickness: =5 Fill: =RGBA(169,169,169,.5) Height: =268 MaxAttachments: =1 Size: =18 Width: =402 X: =60 Y: =111 All I have to do is copy the code , go into Power Apps, and paste it . Boom! You will see the attachment control is now there and configured with the properties specified in the code. Again, this will work with any of your controls. If you want to get the YAML code for a control, you can add it to your app, right-click on the control, and select View code. If you want to watch the video where Shane walks through these steps, check out the video below.   Whether you are new to Power Apps or an experienced builder, everyone runs into roadblocks. If it happens, just know we are here to help however we can. Just click here , send us a message, and we will be in touch soon.

  • Modern Text Input in Power Apps: What You Need to Know

    If you're building custom forms in Power Apps and want a cleaner, more flexible input experience, you can take advantage of the  Modern Text Input control. It's designed to be simpler, more accessible, and more in line with current design standards. While there are some great features to try, there are some buggy tradeoffs that make us not quite ready to completely give up the Classic Text Input. This post breaks down what matters most—especially for developers skipping the Form control and building a custom form. We'll look at some of the properties that have changed, what the new ones do, and how to handle validation. All in less than 5 minutes. Classic vs. Modern Property Mapping Here's a quick table to highlight what's changed: Modern Property Classic Equivalent Notes Value Default Holds a default input value of "". No need to replace "Text input". Placeholder HintText Shows hint text when empty. Mode Mode SingleLine or MultiLine only (no Password--see Type). Type (None) New. Choose "Text", "Password", or "Search"--see Type below. TriggerOutput DelayOutput New. More flexible—see TriggerOutput below. Required (None) New. Marks the input as required. ValidationState (Manual styling) New. Set to "Error" to show a red border. Note: Values like Type and Align properties are set using text strings (e.g. "Password", "Center")—not Enum syntax like Align.Center . Type property This property gives the text input a specific role: "Text" – Default. Accepts any text. "Password" – Masks input with dots. Shows a selectable view input toggle. "Search" – Meant for search bars. Currently, there's no difference from a "Text" type. (However, it may show a search icon or clear button in the future.) If you're asking for login info or PINs, use Type = "Password". Otherwise, stick with "Text" or "Search". TriggerOutput property This one's important if you're doing logic as you type. It controls when OnChange  fires and when the control's Value updates: "FocusOut" – Default. Fires when the user leaves the field. "Delayed" – About 500ms after typing stops. "WhileTyping" – Updates as the user types, but throttled. "KeyPress" – Fires on every keystroke  (use with caution). Pro tip : Use "WhileTyping" if you're building responsive custom forms. It's smoother than "KeyPress" and doesn’t trigger on every character. If you're tabbing through inputs, use the "FocusOut" . Required and ValidationState These two make field validation easier: Required   = true – Tags the control as required (mostly informational unless you're using forms). ValidationState = "Error" – Turns the border red. You control this manually. Here’s a quick example you can include in OnChange or OnSelect of a control: If(IsBlank(TextInputName.Value) UpdateContext({varNameError: true}), UpdateContext({varNameError: false}) ) Then bind the property: ValidationState = If(varNameError, "Error", "None") Boom—built-in red border. Bonus Tip: Use the Number Input control for Numbers If you're asking for a number, don’t use a text input . The new Number Input control: Opens the right keyboard on mobile Has increment/decrement buttons (with a customizable Step) Enforces numeric input by default It’s mostly better all around. Why We're Not Ready to Give Up the Classic Text Input While the Modern Text Input is sleek and evolving quickly, it’s not quite feature-complete yet. Here are a few frustrations: There is no " Clear button " (or " Enable spell check ") option. The AcceptsFocus  property isn’t available, so using SetFocus() can get wonky, especially when paired wit h TriggerOutput  = "WhileTyping" . Customizing tab navigation isn't an option. The FontSize  property (Size in the Classic Text Input) is too small when you first insert the control, prompting you to adjust it. The OnSelect  pr operty is missing, so if you need to do something when a user taps the field, you’ll need a workaround. Until these gaps are closed, the Classic Text Input still earns its spot in certain custom form scenarios. Wrap-Up As with other Modern controls, the Modern Text Input shows true promise, but it isn't quite what we're expecting, yet. They're stylish and clean and have a growing range of options. They can enhance the look and feel of your app, but some things they still can't do. There's still a place in our toolbox for the Classic Text Input.

  • Power Apps Modern Combo box

    If you've ever felt a bit overwhelmed by the Combo Box control in Power Apps, you're definitely not alone. It's one of the most powerful (and sometimes puzzling) components out there. But don't worry, in this guide, we’re diving into the modern Combo Box, and by the end, you’ll have a solid grip on how to make it work for you. Now if you are more of a visual learner than a reader, there is a full-length video Deep Dive for the Modern Power Apps Combo Box . Me I prefer seeing that reading, so hopefully the video also helps you. Getting Started: Enabling the Modern Combo Box Before you can use the modern Combo Box, you need to turn on the feature in Power Apps: Go to Settings  > Updates  > Modern Controls and Themes  > Toggle ON Insert a Combo Box from Insert  > Input  > Combo Box Populating the Combo Box By default, the Combo Box comes with sample items (Item 1, 2, 3), but that's not what we want. Connect it to a real data source like a SharePoint list, Dataverse table, or SQL. In the video, a list called "Mega" with 10,000+ items is used. One key limitation: the Combo Box only loads the first 800 items . That might sound like a lot, but if your list is bigger, you’ll need to filter or search more effectively. Filtering Items To narrow down the results, you can use the Filter() function. For example: Filter(Mega, AnimalType = "Cow") This helps make large data sources manageable within the 800-item cap. Search Functionality Modern Combo Boxes only search the first 800 items. For a more robust, traditional search, use the Search() function like this: Search(Mega, Self.SearchText, "Title") This makes your Combo Box smarter, especially with large data sets, but keep in mind delegation warnings. Default Selected Items Setting default values can be tricky. The DefaultSelectedItems property expects either a record or a table. To default to a specific item: LookUp(Mega, Title = "Item Title 22") Or use a custom JSON record, but be careful it must be an exact Record match: {Title: "Item Title 22"} If you are struggling with setting the DefaultSelectedItems use this video Power Apps Combo Box DefaultSelectedItems . The video is old but the content has not changed. Multiple Selections Turn on Allow Multiple Selections  to enable checkboxes in the Combo Box. This makes it easy for users to select more than one value. To pull out selected data, use: Concat(ComboBox1.SelectedItems, Title, ", ") This gives you a nice, comma-separated string of all selected titles. Working with People Search Want to select users from Office 365? Add the Office365Users  connector, then set the Combo Box items like this: Office365Users.SearchUserV2({searchTerm: Self.SearchText}).value Use DisplayName for the field shown in the Combo Box, and pull email addresses using: Concat(ComboBox2.SelectedItems, Mail, ";") Bonus: Rounded Corners and Styling Finally, a small but delightful update, modern controls now support border radius ! That means rounded corners are just a click away. Style away to match your app’s vibe. Wrapping Up The modern Combo Box in Power Apps brings a lot of new features and a bit of a learning curve. But once you get the hang of filtering, searching, and managing selected items, it becomes a flexible and user-friendly control. Don’t forget to explore delegation limits and always test with your actual data. Got questions or need help? Hit us up with the Contact button and tell us how we can help.

  • Workaround for Broken Power Apps Attachment Control

    Recently, a change in Microsoft Power Apps affected a common method for enabling file uploads. The attachment control, which users typically copied from a form into a standalone app, no longer functions correctly when used outside the form context. This disruption has affected many makers who relied on that approach since its emergence in 2019. If you've encountered this issue, you're not alone. Fortunately, there's a workaround that helps make it easier to keep file upload functionality in your app—without waiting for a product fix. Shane has documented this in his video: Power Apps Bug & Fix: Attachment Control. What Changed Previously, the process involved: Connecting your app to a SharePoint list. Inserting a Form  control connected to that list. Adding the Attachments  field to the form. Copying the Attachment  control from the form and pasting it elsewhere in your app. Now, when you try to copy and paste that control—even within the same form—it no longer functions properly. The paperclip icon that triggers the file picker disappears, and the control becomes unusable. The Workaround: Drag, Don’t Copy Here’s how to restore file upload functionality: Add a Form to your screen and connect it to a SharePoint list (any list with attachments enabled). Edit the fields in the form to include the Attachments  control. Instead of copying the control, click and drag the entire data card that contains the attachment control outside the form . You’ll see some formula errors. Clean those up by: Removing or correcting the Items property. Setting DisplayMode to Edit. Optionally adjusting styling (e.g., Color to Color.Black ). Once it works, delete the form. The dragged control will remain functional. Why This Works Dragging preserves internal bindings that are lost during copy-paste. This technique isn't documented, and Microsoft hasn't officially acknowledged it as supported behavior. However, it allows your app to continue supporting file uploads until an official fix is released. Known Bug Reference Microsoft has documented this issue as Bug 5096864 , noting that the control "is not designed to work outside of a form." This workaround sidesteps that limitation until the functionality is restored or officially restructured. Final Thoughts If you're building or maintaining apps that rely on file uploads, this drag-and-drop method  offers a workable path forward. We'll share this workaround with Microsoft to help drive resolution. In the meantime, you can keep your apps running smoothly using this approach. For a visual walkthrough, check out the linked video tutorial .

  • Make a PDF from Image files

    Ever felt the frustration of trying to convert various image types into a PDF without shelling out for a "Premium" action in Power Automate? You're not alone! But guess what? We've cracked the code. Dive into our innovative technique that leverages an HtmlText control to generate HTML, enabling Power Automate to seamlessly create PDF documents. And the best part? This method effortlessly incorporates images from a SharePoint list image column. Ready to revolutionize your workflow? Let's get started! SharePoint list with image columns First, you’ll need a SharePoint list with some image columns. We can insert some images into the list, either JPEG or PNG. Then we connect this list as a data source for our app. Screen with HtmlText and Image controls Next create a blank app with Power Apps. Add some Image controls to the screen (corresponding with the number of images you want to use) and an HtmlText control. We’re going to add some code (that refers to the image controls) that runs OnVisible  property of the screen. The image controls are tied to the SharePoint list images, either through a variable or a LookUp  based on the ID or another “key” column (our example is the ParentID column). How we harness JSON and extract base64 The first thing we do is get the JSON string of the image via the JSON  function, then we determine the image format (PNG or JPEG), then we set a formatting variable for string manipulation to extract the base64 string from the JSON string, finally we assign the base64 string to a variable that we can use in our HTML. That’s the key this technique! Screen OnVisible code Let’s break down the code in the screen OnVisible , line-by-line. Then we’ll put it all together once we’ve explained it. In this section, our examples show the code as though we’re pulling two images into the HtmlText control, but the steps below just show you how to do it for a single image. (You can repeat this technique for multiple images in your HtmlText control.) First, we use a With  function pointing towards an Image  control. You could simply insert the JSON  formula into your variable calculation for varImage1, but you’d have to do it 2x. The With  function is more performant, as it’s similar to defining a context variable. With({jsonImage1: JSON(Image1.Image, JSONFormat.IncludeBinaryData)}, Next we use a series of Context variables . Why? Simply because we don’t have to reset them (since they don’t reside in memory beyond the active screen). Since the calculation of subsequent variables depends on the previous variable calculations, we need to use the UpdateContext formula several times, in a sequence. Our first Context variable is for the image format . It looks for “.png” and “.jp” in the image text string within the JSON data. How can you view this text? Just insert a Text  or Label  control onto your screen, and make your Image1.Image the Text  property, and you can see the complete text string. Within that text string, you’ll be able to see the image file suffix, but you must search for it. So, in the formula, we use the Find  formula to look for the image format. The Find formula will either return blank or an integer, so we use a greater than operator to see if the value is greater than 0 to determine what type of image it is (PNG, JPEG or “unknown”). Then we use this value in the next context variable. Additionally, this variable also goes into the HtmlText control in the HTML text string. This is our “Format” variable: UpdateContext({varImage1Format: If(Find(".png", Step1Image.Image) > 0,"png", If(Find(".jp", Step1Image.Image) > 0,"jpeg","unknown"))}) Our next variable helps us modify our text string to extract the base64. PNG files have base64 code beginning with “iVBOR” whereas JPEG base64 code begins with “/9j/”, so we need to feed different values into our Mid  function when we’re extracting the base64 code from the JSON string of the image control. We could have used a single If  function, but we wanted to have a way to confirm that the item is a JPEG. We use this variable as input into our next variable that extracts base64. This is our “String manipulation” variable. UpdateContext({varImage1Code: If(varImage1Format = "png", 24, If(varImage1Format = "jpeg", 25, 24))}), In our next variable, we slice off everything we don’t need to create the base64 code that our HtmlText control can recognize as an image. This is our “base64” variable. UpdateContext({varImage1: Mid(jsonImage1, varImage1Code, Max(Len(jsonImage1) - varImage1Code, 0))}) That’s it for the OnVisible coding, here’s the complete block of code (including some remarks): With({jsonImage1: JSON(Image1.Image, JSONFormat.IncludeBinaryData)},             //Image1Format looks for .png or .jp(eg) in the text string to determine the format for the HTML                 UpdateContext({varImage1Format: If(Find(".png", Step1Image .Image) > 0,"png", If(Find(".jp", Step1Image .Image) > 0,"jpeg","unknown"))}),             //Image1Code bases the position for the Mid function to check: 24 for png and 25 for jpeg             UpdateContext({varImage1Code: If(varImage1Format = "png", 24, If(varImage1Format = "jpeg", 25, 24))}),             UpdateContext({varImage1: Mid(jsonImage1, varImage1Code, Max(Len(jsonImage1) - varImage1Code, 0))}) Code for the HtmlText control We inserted an HtmlText control on our screen. Since we’re just using the text from this control in our Power Automate flow, it’s not necessary to make it visible, but we did, just so we could ensure that the images render properly before initiating the flow to turn it into a PDF. To make the image format dynamic, we used our varImage1Format  variable. The base64 text string from the image is in varImage1 . This is how we added the code inside of an HtmlText control to display the image: "" In our example above, the image on the left with the cat is a JPEG and the image on the right with the tank is a PNG. Both render properly in the HtmlText control. (Your HTML can include text, tables, and dynamic content other than your images, but this post focuses on the image piece.) Now you have HTML text that you can submit to Power Automate to build your PDF. Let’s look at how to build your PDF flow. Create the PDF flow When you build the flow, if you’re not already in a solution, you should initialize the flow from Power Apps to link it to the app. Else, if you create it straight from Power Automate, you’ll need to add both app and flow into a solution so that you can add the flow to your app. Once you’ve created the flow and it’s tied to your app, you can then enter the flow from Power Automate to continue editing. Let’s go through the flow. The trigger is “When Power Apps calls a flow (V2)”. Your input must include the text input including the HtmlText from your HtmlText control. Then use a OneDrive (for business) “Create file” action. This action will create a temporary HTML file in OneDrive that you can use for the next action. For the “File Name” you can use something like test.HTML. For the “File Content” use the dynamic content for the HTML text input from Power Apps. Next, we use a OneDrive (for business) “Convert file” action. The “File” input is the Id dynamic output from the “Create file” action. Ensure you select PDF  (default) as the “Target type”. This step does not create the file; it merely reformats the HTML into PDF. You must save the code next. To save the PDF code, use a “Create file” SharePoint action. This action adds your new PDF to a document library so you can refer to it from your app. You can use dynamic content for the File Name or simply create a name with a suffix of “.pdf”. If you don’t have a unique file name, each subsequent time your flow runs it will fail, because the SharePoint “Create file” action must patch a unique File Name . In the formula below, using the concat  function, utcNow()  provides a unique prefix, and then we add ‘.pdf’ to it to correctly identify the file: concat(utcNow(),’.pdf’) Optionally, you can include a “Respond to a Power App or flow” step that includes a link to your new document. You can title a text output as “Link” and add a formula using a concat  function, similar to this: concat(‘[your SharePoint document library]’, outputs(‘Create_file’)?[‘body/Path]) This formula adds your document library “https” address such as: https://shanescows.sharepoint.com/sites/DoeHillDrive                 …to the dynamic content Path from your “Create file” action. You'll simply replace the part of the formula ([your SharePoint document library]) with your own document library. This PdfLink value will be output to Power Apps during the flow run. You can save (and publish if it’s in a solution) and close your flow. Finish the app Return to your app, select the (…) button from the left side rail, and then Power Automate. Make sure that the flow is in your app. Note the schema name under the title, because that’s what you’ll use to call the flow:   Next, we add two button controls to our screen, one for initiating the flow, and the other for using the link that returns from the flow. We’ll name one PDF and the other Link. Because we used the Respond to a Power App or flow  action in Power Automate, we can harvest that link data by adding a Set  function to the button calling the flow in the OnSelect  property of the PDF  button. Here’s an example: Set( varPdfLink, CreatePDFfromHtmlText.Run (HtmlText1.HtmlText).pdflink); With the link saved to the global variable called varPdfLink , you can now use that with a Launch  function in Power Apps that opens the new PDF document in another browser tab. You can add this code to the OnSelect property of your Link  button. Launch(varPdfLink) If you run your app, you will be able to use any JPEG and PNG images in your PDF document. You can continue to add HTML code to your HtmlText control to add data to your PDF, but now you understand how to add different image types to the PDF. Here’s how ours looks: Please let us know what you think! For more on this topic, don't forget to check out Shane's video on creating a PDF: Create a PDF from SharePoint Data using Power Apps and Power Automate flow for free

  • Our take on the January 2025 Power Apps Feature Update

    We’re following along with Microsoft as they’re releasing new features for Public Preview including the new Power Platform admin center, the new Power Apps Plan designer, the new Data Workspace functionality, and new SQL to Dataverse features. The Power Platform admin center  has been upgraded, and you can select the toggle at the top right of the home screen to see what it looks like. You’ll note the new by-task organization of it in clickable links on the left-side navigation rail. For example, if you want to manage your Environments, you select the Manage button. Also new in this interface are the new Monitor (which is still being rolled out) and Deployment hubs. Lastly, the home screen of the admin center allows you to customize your view by adding/removing cards as well as drag-and-drop functionality with the cards to arrange them just so.  The Power Apps plan designer  is a new way to enlist Copilot to help you in crafting solutions to your business problems. You can get to it by toggling on the new Power Apps experience from the top right of the home page. Now you can add natural language prompts to let Copilot know the specifics of your business problem. Copilot will provide an outline of your business problem, giving you some proposed apps, data tables, and flows as a solution. Copilot allows you to continue to add prompts through the design process to help you refine what’s going on. Shane has recently provided a video of how this works if you want to see it in practice. You will need to have a Dataverse equipped environment to experience this functionality, but it is a superb way to streamline the business problem process, getting from problem to solution in a very short time.  Power Apps plan designer showing the Doggie Daycare Manager The Data Workspace  is the new visual editor to see your tables created on a canvas and to view them together along with their relationships. It’s a great way to create, add, and modify new tables manually or with Copilot’s help. You get there from the Create new tables  choice from the Tables  tab. You can toggle which columns you want to show, add new columns, and create/manage table relationships. Microsoft is working to add this same functionality with existing tables, but for now, you can add existing tables to the Data Workspace in “read-only” mode. If you want to edit existing tables, you’ll still have to open that table in a separate tab. Overall, this is a really nice interface for interacting with your tables and their relationships. Data Workspace showing the tables from the Doggie Daycare Manager solution Microsoft gave SQL developers some love in January. They’ve included the ability to define SQL Server environment variables in your solution. As you create the environment variable, you can now select “SQL” as the connector and then enter the connection details in the “New environment details” parameter. New Environment dialogue showing SQL Server option under the Connector Also, connections to virtual tables now include PostgreSQL . It’s easier than ever to connect to your SQL data with Dataverse. Virtual table creation showing PostgreSQL option. We’ll certainly be trying out these new features this month!

  • Introduction to Power Pages – Part 2: Creating Pages and Navigation

    In this blog post, we’ll walk through the creation of your pages and navigation buttons that Haylee Adamson created in her demo Intro to Power Pages . If you missed the first blog that talks about “What is Power Pages?” you can review that here . Otherwise, we’re going to jump right into our step-by-step exercise to create a “Community Events” hub in Microsoft Power Pages! Exercise Steps 1.      Go to the website make.powerpages.microsoft.com . 2.      Select Start from blank 3.      Enter the name for your site and create a custom web address. Power Pages will check your custom name to make sure that it’s unique, then you can continue by selecting Done . 4.      You’ll see an animation as Power Pages begins building your new site. Once your site is done, you’ll land on a screen similar to the screen below. Notice that your Pages panel on the left shows a navigation section with the Home page selected. The center of the screen is your canvas for the current page, and there’s a Copilot panel on the right side.  5.      Hover over the areas of your page. The header section is editable, and the section below the header has a menu to “choose a component to add to this section”. To the right of List , there’s the option to see More  component options. 6.      Move your cursor up to the header and select the Edit site header  button that appears. 7.      The Edit site header  popup appears, with the Title + logo  tab highlighted. Change your Site title  to “Community Events Hub”. You can upload a Site logo  by selecting Upload image .  8.      In the Add an image  popup, you can choose Upload image  to pick a custom logo to add or pick a “Stock Image”, then select the image you want to display and select OK . You’ll notice how the logo and title immediately appear in your header. 9.      Select the Styling tab in your header popup next. As you hover over the Brand colors filled circles, notice that you can edit these colors to suit organizational preferences. Options for the Layout  tab are related to size, but there will be more in the future. 10.      Close the Edit site header  popup and notice the top right of your home page. This section shows navigation buttons (or a “hamburger” menu determined by the size of your screen – yup, Power Pages adaptable to any size platform!), and as we add more pages, you’ll see those navigation options appear. Let’s add another page to our app by selecting the blue + Page  button at the top of the Pages  panel on the left of your screen. 11.      In the Add a page  popup, input “Add Event” as your page name. Leave the Add page to main navigation box checked, and use the Start from blank  layout, and this will automatically add our new “Add Event” page to the header navigation. Select Add to create this new page. 12.      You should now see your new page titled “Add Event” in your Main navigation  section within the Pages  panel on the left side of the screen, and you should see it in your app’s header navigation at the top right of your header. Remember you can modify your main navigation by selecting the ellipsis to the right of any page in your website and selecting from the available options. For example, if you didn’t want a screen to be in your navigation, you could select the option Move to “Other pages” where it wouldn’t be visible. Other options are available to add comments, edit code, duplicate and delete the page.  13.   Return to your home page and select the section that’s already on your page. Select the section showing below the site header. Then select Layout  and then the 3 Column  option.  14.  Select the left “Add a component” ellipsis/ More button. Then select the Image  option. 15.  Once you do this, you’ll see the Add an image popup appear on your screen, where you can select an image to add. In the example below, we’ve used stock images (Haylee uses some Copilot assistance to create images that she inserts). Do the same with the other two Add a component section to show images roughly related to gardening, pool, and playground. 16.  Hover over the image on the left and select the + (Add a component) button immediately below the image to add a Text  component. 17.  Erase the “Enter text” and label the first image as “Community Garden”. Change the format from Paragraph to Heading1 and center the label using the controls for the component. 18.  Repeat this process for the other two images, labeling them “Community Pool” and “Community Parks”, respectively. TIP: you can triple click any Text component to select all of the text and then begin typing your new text to erase what was previously there. 19.  Add another Text  component under each header label by selecting the “plus” icon below your header components under the three photos. Copilot  can help with the wording, so try it out by using the following prompts and then select the Copilot  button, then select Rewrite , and then you can select Add to page/Replace text  to see Copilot replace your label text. a.      Community Garden: Welcome to our community garden b.      Community Pool: Welcome to our community pool c.      Community Parks: Welcome to our community parks 20.  Let’s add some buttons to the page. Hover over your screen and find/select the Add a section  button below the section with the images. Then select 2 Column . We’re going to add two buttons into our Home screen that will take us to different screens, so a 2 Column section will make it look right. 21.  In the new two column section select Button  from the one on the left. Input “Add Event” for the Button label  and select the option to Link to a page . Select the page “Add Event” from the Select a page  dropdown. Then select OK .  22.  Select the Align  option on your button component (it looks like a shishkabob), and select the Center align option (same picture). This will move your button to the top center of the section. 23.  Adjust the Design  of your button by selecting the paintbrush icon. This gives you a “no code” way to adjust your CSS properties for the component. Make the following adjustments (you can either type them in or use the sliders to adjust the properties): a.      Shadow – 10 px b.      Border – 6 px c.      Corner radius – 7 px d.      Width – 216 px (found on the Layout  tab of the Button design) e.      Height – 58 px ( Layout ) f.        Font size – 23 px ( Typography  tab) Close the Button design  popup. 24.  Duplicate your “Add Event” button by selecting the (…) ellipsis on the right of the component menu. Then select Duplicate . This will add another button immediately below the first. 25.  Drag and drop the new button to the right column of your new section so that you have one button in each column. 26.  Select the button in the right column and select Edit  to rename it from “Add Event” to “View Events”. Since we don’t have a “View Events” page in our app yet, leave it on “Add Event” as the Link to a page . Select OK . 27.  Go to the Pages  panel on the upper left of the screen and select the + Page  button to add another page. In the Add a page  popup add “View Events” as the page name. Then select Add . You will see your View Events  page appear in your navigation section and navigation bar in the app header. 28.  Return to your Home  page and select the View Events  button. Select Edit and change the page link to View Events , then select OK . Now you have buttons with links to both pages in your Community Events Hub. 29.  If you Preview your website now, you will be able to select either button to navigate to the appropriate page. You can also use the header navigation menu to go to the different pages, and you’ll see the page name appear in the url! That’s all we’ll cover during this blog post. Now you should have a good idea how to create pages , add image and text components , and create navigation buttons  for your app. In the next blog post we’ll add a form  and data to Power Pages. Remember that Dataverse  is where your Power Pages data resides. So, you can use your pre-defined Dataverse tables in Power Pages, much like your Lists in SharePoint! Thanks for joining us at PowerApps911 in learning about Power Pages! If you’d like to see a focused class on Power Pages you can sign up for our Power Pages Jumpstart  training.

  • Power Apps Modern vs Classic Controls Reference

    Covering Text Inputs, Number Inputs, Text Labels, and Buttons Modern Controls are all of the rage but as long-time builders we often find ourselves asking what is new and what is different. Below I have offered some overall thoughts and documented three of the most common controls in detail. Hopefully, this helps you quickly bridge the differences between the two. And yes, Input Controls have a lot of notes. They are drastically different, whereas labels and buttons are mostly visually different. If you want a more hands on look at these differences then be sure to check out my Youtube video Modern vs Classic Controls in Power Apps - Buttons, Text Inputs, and Text Labels Finally, if you are having a hard time with the different properties for these controls, you can download this guide with all of the properties mapped out using the fancy link below. It includes each Property name and description, what control it is applicable for, and if it was renamed from Classic to Modern what the new or old name was. Lots of little details to make your life easier. Example for the Inputs: Download the guide⬇️ General Notes of Differences for Modern and Classic Controls in Power Apps Below is a breakdown of just things to know going into using Modern Controls with Power Apps. Hopefully these little notes help you pull out your hair a bit less when you trip over things like OnSelect being gone for most controls. Styling : Modern Controls follow Fluent UI guidelines for styling, offering consistent themes and polished looks. At the expense of not being able to manually set a lot of the visual properties yourself. For example, properties like DisabledFill, HoverColor, and PressedBorderColor that were available in Classic Controls are currently not present in Modern Controls. This means you'll lose some of the fine-grained control over the appearance of your app in different interaction states. For example: I often would set the visual properties of disabled mode in a control to very specific colors to achieve a desired effect for one control in classic controls, this level of customization is no longer available. Font Sizing : Modern uses pixels while Classic uses points, often leading to inconsistent font sizes across controls. So basically, when you start adding Modern Controls be prepared for everything to be smaller, you will need to rethink what are your default font sizes and such. Themes : The Modern Controls use the new theme engine. It is kind of configurable but will add to your confusion in the short term. To view/configure what you can with themes look on the Left Rail and click … to find Themes. Then to manipulate per control click on the control and at the bottom of the Properties panel on the right you will see similar to below. Accessibility : Classic Controls include more traditional accessibility features such as Live and Role, while Modern Controls are progressively incorporating these features. One of the goals of Modern Controls is to be more accessible. OnSelect isn't as common : With Classic Controls just about every control had an OnSelect property, making them all "clickable". That is not the case with Modern Controls, if you want something to be clickable you are most likely going to need to use a Button, Icon, or Image control.  Reset property is gone : If you got used to using a variable to trigger mass resets, sorry that isn't possible. Back to Reset(ControlName)  being the only option. Avoid mixing and matching : Modern Controls and Classic Controls are so different, especially visually, it is basically impossible to combine them in the same app and have it look nice. So, commit to one or the other. Text and Number Input Control Differences Quick note. This one is a bit odd because the Classic Text Input has been replaced by two controls. Text Input and Number Input are separate controls that are similar but have nuance difference. Most of which is covered below.  Trigger Behavior : Classic uses DelayOutput; Modern replaces this with TriggerOutput offering options like FocusOut, Delayed, and Keypress. While this is a nice change, you will need to think about how your OnChange is triggered, each of those 3 options have their own quirks to meet specific scenarios and none exactly line up with how it worked in Classic Controls. Clear Button and Spell Check : Classic included a built-in clear button and the ability to enable Spell Check. Disabled vs. Enabled : With Classic Controls a Text Input in view mode looked exactly like a label, which made it easy to reuse the control for display-only purposes. Now a view mode Text Input looks exactly like an edit mode Text Input, which isn’t ideal and is confusing to users. You can't easily reuse the same control for editable and read-only scenarios without causing confusion. Which would change how I designed the look of a lot of apps over the year.  Number Input is Separate : In Classic, you often used a Text Input with formatting rules to handle numbers. In Modern, there's a dedicated Number Input control with its own properties like Min, Max, Step, and Precision. This makes numeric input more flexible, but also means managing a new set of behaviors and edge cases. Number Input : The control now has an up and down increment arrow you can use to adjust the value in the control. It is kind of hard to see. If you want to get rid of it set the Step property to 0. Not very obvious. Value vs. Text : Number Input uses a Value output property instead of Text. This can be helpful for calculations but may require some refactoring if you're used to string-based logic. This means to get the number out of a Modern Number Input Control you would use NumberInput1.Value where as with a Text Input you would use TextInput1.Text. Overall : Lots of change with Inputs plus the fact that number inputs are the same but different will probably cause you a bit of confusion for a while. But don’t worry, once it clicks, it will all make sense. Text Label Control Differences OnSelect : Worth repeating, it is gone, as that one really frustrated me. If you want to simulate an interactive label, one workaround is to overlay a transparent button on top of the label and use its OnSelect instead. Visual Everything:  The alignment, the size, the padding, everything is different. It is fine, just be ready to reconsider the look and feel as you add these new labels. If you are new to Power Apps then not a big deal, you will never know the difference.  Below they are both using default size and both are against the top of the screen. Font size and vertical align are easy to see differences, but there are plenty more. Overall : Functionally is very much the same, just visually different. Button Control Differences Icons : Modern Controls allow inline icons with Icon, IconRotation, IconStyle, and Layout; Classic does not. Hover and Pressed States : Classic includes HoverFill, PressedFill, DisabledFill, and more; these are currently missing in Modern. Overall : Good news, a button is basically still a button, just with different sizing and style.

  • Why Design Matters (Yes, even in Power Apps)

    Let’s be honest: most internal apps don’t exactly scream “award-winning user experience.” And maybe that’s fine - until it isn’t. When users don’t engage with your app or when support requests start piling up, it’s easy to point fingers at functionality. But more often than not, the real culprit is design - or the lack thereof.  The apps you build today will live longer, cost less, and work better if you get design right from the start. Design Drives Adoption We have all been in the place where we quit something and walk away because it feels overwhelming, and your users are no different. You can build the most functional Power App in the world, but if it feels clunky, cluttered, or confusing, users will avoid it. Design is not decoration, it’s communication. Your design should communicate to users where to look and what to do. Good User Experience (UX) Extends the Life of Your App Apps with poor UX age faster. They break under the weight of user frustration. They get rewritten, reworked, or worse - abandoned. On the flip side, a well-designed app becomes a reliable part of a team's workflow. People learn it faster, require less training, and adapt to changes more easily because the foundation is intuitive. People tend to invest in the success of things that are more attractive to them. They excuse small errors and are more likely to contribute to its success by providing feedback. The better the UX, the longer your app stays useful and relevant. Quality Design = Lower Long-Term Cost Quality user experience often gets missed in project budgets: Good UX might cost more upfront, but bad UX costs you every day after launch. Poor design slows adoption, increases support needs, and leads to avoidable rework. Designing for the user early reduces long-term friction, minimizes maintenance, and saves serious money – whether measured in hours, help desk tickets, or actual rebuilds. Good design isn’t an expense. It’s an investment. Show, Don’t Tell Telling you is one thing, but a picture is worth a thousand words. Take the example below: Don’t worry, we’re not using a real app for the “bad” example here. But I’d be lying if I said I haven’t seen designs this rough out in the wild. The consultant who helped me mock it up practically needed eye bleach, and rightly so. It’s cluttered, overwhelming, and hard to use. Both screens are meant to show color options for a templating app, designed to help users build Power Apps that follow a consistent brand style. And yet, one of them is clearly worse. Why? The colors are similar, and the core functionality is the same. Now take a look at the cleaner version. Instructions are still available, but they’re tucked behind clearly labeled buttons instead of being splashed across the screen. You’re not losing information. You’re gaining clarity. The original version is packed with controls meant to showcase how your color choices might look in action. But the updated screen achieves the same goal with a single large image that demonstrates gradients and contrast more effectively. Ask yourself: Which one would you rather use? Which one feels more approachable? Which one would your users be more likely to adopt and give feedback on? Here’s the real kicker. The well-designed app screen was built over two years ago, and it’s still in use today with very few changes. That’s the power of good design.   How to Level Up Your Design Game First of all, you don’t have to hire a graphic designer or become a creative professional to implement principles of good UX. The internet is packed  with resources teaching the basics of interface design, and if you want to improve the design of your Power Apps – or anything else you’re building – you can start here: Learn the principles.  Start with the basics of visual hierarchy, spacing, alignment, and contrast (they’re simple, but powerful). Check out https://lawsofux.com/  for a great series of resources that covers the basics (with advanced topics as well). Watch how people use your app.  User behavior is a better guide than your opinion. Create interfaces, then physically watch users interact with your app, either in person or via screenshare. You’ll learn a ton by watching mouse movement – are your controls placed intuitively, or is there a lot of searching around to find where to click? If your test users have to ask questions, consider that an opportunity to improve your design. Remember, every question you get from your test users is a possible support call down the road. Design in such a way that instructions are unnecessary. You don’t have to reinvent the wheel.  Study interfaces you enjoy using. Figure out why  they work. Study designs on sites like https://dribbble.com/  and try to replicate them in the Power Apps Studio. Check out the training projects on https://www.frontendmentor.io/ and complete the challenges in Power Apps. Don’t trust defaults.  The current generation of Modern Controls lacks a lot of customization options. And the default settings for classic Power Apps controls are, quite frankly, ugly. But classic controls still give you the most flexibility, and you can  make them look good.  Just get to know all your properties. Get professionally trained!   PowerApps911 offers hands-on training to help you raise your game. Check out our live Extreme Makeover, Power Apps Edition  training, offered throughout the year. Of course, the other option – if you’d rather skip the learning curve – hire us.  We offer: UI/UX design services  for Power Apps. Maybe you’ve got a brilliant app that is functional but lacks in the design department. We can handle the design load and help bring creativity to your great functionality. Ground-up app design .   We can handle it all, from start to finish, and you can get a strategically and creatively designed app that hits the ground running from day one. Workshops and trainings  to help your team get hands-on design skills that actually apply to what you’re building   Final Thought Design is often treated like frosting on a cake. In reality, it’s the flour. You can’t bake a good cake without it. If you care about usability, longevity, and return on investment, design can’t be an afterthought - it has to be built in from the beginning. And if you’re ready to do that, we’re here to help! 👉 Power Apps Makeover  – our hands-on course to level up your app design game! Our need help with something else? Just Contact Us !

  • How Nicola's Leading Our AI Journey (Excitement, Fear, and Everything In Between)

    Shane was looking for help brainstorming content the other day and said to me, “You seem to be good with the negative of Copilot.” And I thought, woah woah woah—I happen to be very excited about the possibilities of AI and Copilot! But then, if I’m being honest, he might have a point. Thinking that maybe some of our customers share a similar hesitation, I thought I would write about it. Am I a huge fan and excited for personal productivity? Absolutely yes! And I genuinely hope everyone is using AI for personal tasks. But do I start to feel nervous when I think about AI automated solutions for our internal processes and customer experience? Also yes. As business leaders, we constantly strive to make the right decisions. We’re focused on growing the business, providing opportunities for our employees, and one wrong decision could put that at risk. When I think about the possibilities AI offers for furthering our business, the ideas flow easily. But when it's time to actually execute, these are the things that slow me down: Consistency and Control  – If we build something that answers HR questions or addresses client inquiries, I need confidence that it gives the same answer each time to the same question. Trust can quickly erode if this consistency isn’t guaranteed. To tackle this, we're starting with processes already heavily documented internally—like our training materials and knowledge base. This helps train the tool accurately and minimize risk. Brand – At PowerApps911, we work hard to execute according to our values, and any tool we use has to embody that brand. We’re planning careful internal tests first, ensuring the solutions we implement reflect our values, and don’t inadvertently compromise what makes us unique. Fear in the Organization  – That’s right—even at PowerApps911, where Shane passionately talks about AI at least once a week, people still worry. We hear concerns like, “It only takes me a few seconds to do that; why automate?” or, “There are so many variables to consider in the setup—can we really trust AI with all those decisions?” or even, “Am I helping build my job replacement?” I genuinely understand the anxiety around job security. Just this week, I reiterated that our goal isn’t replacing jobs—it’s about removing repetitive tasks, allowing everyone to focus on more meaningful and rewarding work. Yet, despite these fears, the AI train has left the station, and I’m not going to allow our company to be left behind. We’re learning about the technology every day to better serve our customers (I think Shane spent at least 100 hours on Microsoft Copilot Studio in March!). But beyond learning, as CEO, it’s my responsibility to ensure we actively advance our service delivery and customer experience with AI. Here’s how we’re approaching AI in our organization: Encourage People to Use It  – This is the most obvious step, but also critical. Bi-Weekly Tech Deep Dives  – We already hold regular sessions, and now we’re adding sessions specifically focused on AI. This way, our internal AI enthusiasts can keep everyone else informed. Automate Tasks People Dislike  – We’re looking at processes within our organization that people dread. Let’s boost morale by automating those unloved tasks. People are usually more supportive if AI removes something they didn't enjoy doing in the first place 😊. Improve Weak Processes  – Next, we’re targeting processes we don’t currently execute well. It’s hard to resist improvements if the AI-driven solution clearly makes things better. Internal Testing Before Customer Rollout  – For customer-facing solutions, we build and test internally first. Our consultants thoroughly vet solutions to ensure the responses align with our standards. For one solution, we are adding a review step, requiring consultant approval before any response goes out. Human oversight remains crucial to ensuring quality and reducing fear. Transparency with Customers  – Our customers have questions and concerns too. They want efficiency but also reassurance about quality and control. We'll be transparent about what’s automated and where human oversight is essential. Change as significant as AI is tough, but as I said—the AI train has left the station, and there’s no turning back. If we don’t leverage AI to improve our business operations, a competitor will. They'll deliver similar products better, cheaper, and faster. If you're hesitating about AI, start small. Choose just one repetitive, unloved task in your business and test the waters. Your future self (and your employees!) will thank you. Curious about how AI could fit into your business, but not sure where to start? Let’s figure it out together. Our team can help you explore where AI makes the most sense—whether it’s improving internal processes, enhancing customer experiences, or tackling that one workflow nobody loves. If you're ready to take the first step (or even just have the conversation), let’s talk about a project . We’ll meet you where you are.

  • Filtering SharePoint Data with oData Queries in Power Automate

    When working with SharePoint data in Power Automate, filtering your dataset efficiently is key to building optimized workflows. One of the most powerful ways to filter SharePoint data is by using oData filter queries  in the Get Items  action. This post will walk you through different examples of filtering various column types  and using logical operators  to refine your results. If you want to see all of the concepts from this blog post in action then check out the full length video where we go hand on with these and other examples of oData filtering. You can find the YouTube step-by-step video here: Filter SharePoint Data in Power Automate with oData Understanding oData Queries oData (Open Data Protocol) is a standard query language that enables filtering and querying data efficiently from multiple data sources, including SharePoint, Dataverse, and SQL Server. When used in Power Automate, it allows you to retrieve specific records without pulling unnecessary data, improving performance and efficiency. For the examples in this post, we will be using the Power Automate Cloud Flow action "Get Items"  to filter SharePoint list data. However, it’s important to note that oData queries are widely applicable across various platforms, including Microsoft Dataverse, SQL Server, and even third-party services that support the oData standard. Learning how to construct and apply these queries will benefit you in multiple automation and data retrieval scenarios. An example of the Get Items action with an oData Filter Query for the Created by field in SharePoint Filtering Different SharePoint Column Types Each SharePoint column type has its unique characteristics and filtering them requires different approaches. Below are practical examples of how to filter single-line text, choice, lookup, number, and date columns  using oData. 1️⃣ Filtering a Single Line Text Column For a text-based column , you use the eq (equals) operator. The column name is case-sensitive and must match exactly as it appears in SharePoint. Example: Title eq 'Project X' This retrieves all SharePoint list items where the Title column is Project X . 2️⃣ Filtering a Choice Column Choice columns require the same syntax as text columns. Ensure you use single quotes around the value. Example: Department eq 'Sales' This filters all items where the Department  choice column is set to "Sales." 3️⃣ Filtering a Multi-Choice Column Multi-choice columns can contain multiple values, so filtering them requires an exact match. Example: Skills eq 'Power BI' This filters records where the Skills  column contains exactly "Power BI." For filtering multiple selections: Skills eq 'Power BI' or Skills eq 'Excel' This retrieves items where Skills  include either Power BI  or Excel. Pro Tip:  If you're unsure of a column’s internal name, check the List Settings  in SharePoint or inspect the raw JSON output from a Get Items  action. 4️⃣ Filtering a Lookup Column Lookup columns reference values from another list. The default way to filter is using the ID  of the lookup record. Example: DeptLookUp eq 3 This retrieves all records where the Department lookup field  has an ID of 3. If you prefer filtering by the title  of the lookup field: DeptLookUp/Title eq 'Marketing' This pulls items where the related department’s Title  is "Marketing." 5️⃣ Filtering by Number Values Number fields support operators such as eq, gt, lt, and le. Example: Age gt 30 This retrieves all items where the Age  column is greater than 30. To filter within a range: Age gt 30 and Age lt 50 This gets records where the age is between 31 and 49. 6️⃣ Filtering by Date Values Dates in SharePoint require a special format: YYYY-MM-DDThh:mm:ss. Example: HireDate ge '2020-01-01T00:00:00' This retrieves employees hired on or after January 1, 2020. To find records within a year: HireDate ge '2022-01-01T00:00:00' and HireDate le '2022-12-31T23:59:59' This filters records where HireDate  falls within 2022. 7️⃣ Filtering by Created By (Author) Field The "Created By" field in SharePoint is internally referred to as Author. To filter based on this field, you need to use /Email or /Title depending on whether you want to match an email or a display name. Example: Author/Email eq 'user@example.com' This retrieves all records created by user@example.com . If filtering by display name: Author/Title eq 'John Doe' This pulls items where the Created By  field matches "John Doe." Be mindful that display names are not always unique. Using Logical Operators: and, or, Parentheses oData allows for complex filtering by combining multiple conditions using and, or, and parentheses. Make sure you use them all lower case. Combining Filters with AND Department eq 'HR' and Age gt 25 This retrieves employees from the HR department who are older than 25. Combining Filters with OR Skills eq 'Power Automate' or Skills eq 'SharePoint' This retrieves records where employees have either Power Automate  or SharePoint  skills. Grouping Filters with Parentheses (Department eq 'IT' or Department eq 'Finance') and Age lt 40 This retrieves all employees from IT or Finance  departments who are younger than 40. Conclusion oData filtering in Power Automate is a powerful way to query SharePoint data efficiently. Understanding how different column types work and applying the correct operators ensures that your workflows run faster and return the most relevant data. If you need help with this, remember we have support services where someone will hop on a screenshare with you for as little as 30 minutes to help. Just hist the Contact button and let us know how we can help.

  • Example App: Better Incident Reporting with Power Apps

    How about we all stop tracking Incidents in these ridiculous oversized Excel spreadsheets? They are clunky, hard to use, and share too much info with everyone. I can’t tell you how many customers have shown me their current solution and there is a whole lot of PII for anyone to steal. 😢 Today let me show an example of an Incident Reporting app based off of some customer apps and discussions we have had. Nothing too elaborate but hopefully gets your mind going on what is possible when you build your own custom solution using Power Apps. With solutions like this we focus on a few things: • Ease of use, anyone should be able to pick up the app and use it, no training required • Well structured and secured data, what could does it do to collect the data if you can’t keep it safe and generate reports on it later • The ability to capture photos and witness in a structured, related manner • Follow our business needs, too often when using off the shelf solutions the process follows the software, here we make the software follow the business process Okay. That is enough of the setup, let’s see it. And speaking of seeing it, if you want to see the app in action then check out the video Power Apps Advanced Example: Modern Incident Reporting . The video shows the working demo and some of the code behind the scenes. Incident Reporting Apps Walkthrough Below is a break down of all of the screens and some key details. Remember with Power Apps you can make the app anything you want, so this is meant to inspire you, not dictate to you how it all works. Mobile App Welcome Screen Often Incidents happen away from your desk (unless you are clumsy like me🤕) so we often build these apps as Mobile apps. That way they can be opened on any modern phone or tablet and get to work. The Warehouse, the breakroom, the job site, or even your desk, the app is always ready to go. Creating a New Incident By making it quick and simple to log incidents—even in high-stress situations—this app helps ensure more complete data capture, which leads to better reporting and faster resolution of safety hazards. After clicking New the user is taken to one screen that will prompt them for the information they need to capture. All fields are optional in this example. The goal often with these apps is to encourage them to get as much information as quickly as possible. When reporting on a spill it isn’t critical but this same app will be used to report a traffic accident or other possible stressful events. Getting as many details as possible is the key. Some customers choose also to have different logic when they choose high severity. So while only the safety coordinator is notified when there are trip hazards, the entire executive tier is notified when there is an injury requiring medical attention or worse. The great part about Power Apps is you can easily add that custom logic based on your business. One other nice thing about this screen. When you go to enter Location that is usually simple so you just have a small line, but when you enter Description you actually click the + and you are taken to a full screen for getting the description entered. This encourages maximum detail. Adding Witnesses with Proper Relationships With Power Apps connected to Dataverse, sensitive data like personal information can be secured with role-based permissions. This means only authorized personnel can access PII—unlike Excel files that often get emailed around without restrictions. Sometimes there are zero witnesses of the mystery spill in the breakroom; sometimes there are 25 of Timmy falling off the table with a lampshade on his head at the company holiday party. 🤣 Either way, the app needs to be flexible unlike that Excel solution that just has a bunch of columns. Here they can add as many witnesses as available. Each one will be stored as its own record in a separate table and then related back to the incident. Your typical parent child data model. Faster and more flexible for reporting. Awesome. Oh yeah, and unlike that Excel solution we can actually secure the child data, like PII. Do you know how often we see that type of data leaked in the XLSX file? 😲 Remember, if you need help with building this Incident Reporting Apps, or any other ideas you have we are happy to help. Contact A picture is worth 1000 words Like witnesses sometimes you need 1 picture and sometimes you need a dozen. So once again there is a flexible, many to one relationship for photos. Also, while this screen just grabs the image, keep in mind that adding metadata or notes about the image would be very straightforward. Sometimes 1000 words doesn’t cut it so letting the user add notes can be helpful. You could even add the ability to add annotations but now I am just showing off. Submitting the Incident Report Now that they have captured all of the information it is time to Submit it. This will save all of the data and establish all of the relationships so you can easily report on it later. But it doesn’t have to end there. On Submit you could add logic to do a multitude of things: • Send an email to the safety team with a link directly to this incident (deep linking) • Generate a PDF of the incident for saving or submitting to insurance • Have notifications or alerts go based on the priority or severity of the event • Start an approval or assignment process to get incident taken care of Once again, the great part about Power Apps is that you can make the software do what the business process dictates, not the other way around. View Existing By breaking things up into two apps you build a best of class solution for each app, instead of a big crazy app for everyone. This approach not only keeps the reporting app simple and user-friendly but also ensures that the management app can offer more advanced functionality tailored to supervisors and administrators. In the demo app there is a simple screen for finding and viewing existing Incident Reports. Often with this screen you would limit the incidents to the ones submitted by the logged in user or for their area of responsibility. You will notice that this app does not have edit capabilities. That was a design decision for the demo. Typically you will have 2 apps. One app for easily submitting the Incident Report and then another for responding to and managing the incident. The management app is often a desktop app because you do that work at your desk, not in the field. By breaking things up into two apps you build a best of class solution for each app, instead of a big crazy app for everyone. Remember when we started, one of our goals was to make our reporting app as easy to use as possible without training. Adding a bunch of editing and other functionality they don’t need just clutters things up. Closing thoughts Incident reporting apps are very common in the businesses we talk to. By building a straight forward Power Apps app to manage the process they get better data and better outcomes based on their business needs, not what the 3rd party app can do. If you need help with this or any Power Apps project let us know. Click that Contact button and we will be happy to give you a hands-on demo of this app or discuss any of the thousands of business solutions we have built for customers that range from a one woman shop in Alabama to multiple companies across the globe who are on the top of the Fortune list.

bottom of page