
Search Content
168 results found with an empty search
- 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.
- 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.
- Deep Dive in using Dataverse Lookup Columns
Dataverse lookup columns are essential for managing relationships between tables in Power Apps. Whether you're building a Canvas App or integrating with Power Automate, understanding how lookups work can help you create more efficient and scalable applications. This post will walk you through everything you need to know about using lookup columns in Dataverse. If you're more of a visual learner, you can check out everything covered here (and more) in the YouTube video: Deep Dive in Using Dataverse Lookup Columns What Are Dataverse Lookup Columns? A lookup column in Dataverse creates a relationship between two tables. Instead of storing plain text or numbers, it stores a reference to a record in another table. This is useful when you need to maintain data integrity and avoid duplication. For example, in an Employees table, you might want to link each employee to a Region . Instead of storing region names as plain text, you can create a lookup column that connects to a Regions table. This ensures consistency and allows you to easily pull in related information such as a region code, manager, or goal. Tip: When creating the table, you'll look up against (like Regions in this example), take extra care when choosing your Primary Column . This text column will be the default in lookups and is often the only column you can display. Creating a Lookup Column in Dataverse To set up a lookup column: Navigate to Tables in Dataverse and open the table where you want to add the lookup. For our example, this is the Employees table. Click Add Column and choose Lookup as the data type. Select the related table (the Regions table in this example). Save the column and verify that the relationship has been created. Using Lookup Columns in a Canvas App Once you've created the lookup, you can use it inside a Power Apps Canvas App. Here are a few common scenarios: 1. Displaying Lookup Data in a Gallery If you add a Gallery control to show employees, you can display related region names using: ThisItem.WorkRegion.RegionName ThisItem.WorkRegion is the full record of the item you're looking up. This means that instead of just .RegionName , you could reference .RegionManager , .Goal , or any other column from the record. This is called a polymorphic lookup and is a great feature of Dataverse lookup columns. 2. Filtering by Lookup Column To filter employees by a specific region: Filter(Employees, WorkRegion.RegionCode = "EU") Since the lookup column stores an entire record, you must specify the field you want to filter on (for example, RegionCode ). 3. Saving Data with a Form If you use a Form Control , the lookup column will automatically show a dropdown with related records, making it easy to select values. Nothing special to do here. 4. Patching a Lookup Field If you prefer using Patch instead of forms, you need to provide a record when updating a lookup column: Patch(Employees, Defaults(Employees), { FirstName: "John", WorkRegion: LookUp(Regions, RegionName = "North America") }) In that example, we used RegionName as the text to look up. Often, you'll want to use something you know will always be unique (like the GUID primary ID column). It doesn't matter, as long as LookUp returns a matching record. Using Lookup Columns in Power Automate When working with lookup columns in Power Automate , you might need to use OData queries to filter or retrieve data. The lookup column’s system name often follows this format: _cr662workregion_value eq 'GUID' For example, to filter employees by region in a List Rows action: _cr662workregion_value eq '2a6ddb65-cfeb-ef11-be21-6045bdedb9f2' In the video, we went into detail about how to find these exact values for your tables. If you're struggling, check out the video for a walkthrough. You can also expand related data using the `$expand` parameter. Relationship Behaviors and Cascading Actions Dataverse lets you define how relationships behave when a parent record is deleted. The most common options include: Referential: Deleting a parent does not affect child records. Restrict Delete: Prevents deletion if related child records exist. Cascade Delete: Deleting a parent removes all related child records. Wrapping Up Dataverse lookup columns are a powerful tool for creating structured relationships between tables. Whether you're displaying data in Power Apps, filtering records, or integrating with Power Automate, understanding how lookups work will help you build more robust applications. If you have any questions or want to learn more, click the Contact button—we're happy to help! We have consulting and training options to assist you with this or any other challenges you might have.
- Introducing the SharePoint Copilot Agent: Your Site’s New Best Friend
Have you ever felt like navigating SharePoint is a bit like wandering through a massive library without a librarian? You're pretty sure the information you need is somewhere on the shelves, but finding it feels like a treasure hunt without a map. Well, guess what? Microsoft just handed us the map—and it's called the SharePoint Copilot Agent ! A few important notes and limitations you should be aware of before getting started. To use the SharePoint Copilot Agent features you will need a Microsoft 365 Copilot license. Currently, SharePoint Copilot Agents only work with files up to 3 mb. SharePoint lists are not currently supported with Agents. How to use the existing SharePoint Copilot Agent. From your SharePoint site, in the upper right corner, you will see a Copilot icon. Click on the Copilot icon, and you will see a flyout with a Chatbot specific to your SharePoint site, with a few default choices. The chat bot can search through all of your Documents and pages in your SharePoint site. Below is an image to the supported document types. Now, from the open chatbot window we can ask a question like, Are we off for Christmas You will see we are then presented with a response as well as a reference as to where it got this information. Which was an internal document on this SharePoint site. Now, what happens if you have documents with conflicting information? Well let’s see. So, we are now going to ask a question like, Can I bring my dog to office? In this case, we know we have 2 documents on our site for pet policy. One is in our Customer Docs folder and the other is in our Documents (Company Documents) Library. Since we want to know what our company’s policy on pets, we are going to navigate to the Documents Library. From the Document library we can now click on the Copilot Agent Site , and from the dropdown select our Documents agent 1 which we created specifically for this library. Now if we ask if the same question again, Can I bring my dog to office? We will get a completely different response because we are only looking for this information in this specific document library. Now It's time to create your first SharePoint Copilot Agent! In our example, we will be navigating to our Customer Docs Library. At the top, click on Create an agent . You will get a new agent pop up, that is ready to go right away. But we want to make a few changes and refine the scope a little. Click Edit . In the Edit agent pop up, feel free to change the Name, Image, and Description. Then, click on Sources . With Sources, you have the ability to add additional sites if you want. Or you could select specific files you want to include so the chatbot knows to search those as well. In this case we only want it to search this specific Document Library, so we won’t be making any changes here. Now click on Behavior . From Behavior, you can set a custom Welcome message. Letting users know what is going on. You can set your own Starter Prompts. These are basically suggestions for what the ChatBot can do. These will help your users get started using the chatbot. You can also set instructions for the agent. This will tell the agent how to interact when using the chatbot. We like to keep things fun around here so we changed our instructions a little, see screen shot below. (You don’t have to do that, you could also leave the default instructions if you wanted.) Then just click Save and then close the Agent window. Great job! You just created your first SharePoint Copilot Agent! You will notice the Agent is now selected and we can start prompting to test it out. So, let’s ask it the same question we asked earlier to kick things off, Can I bring my pet to work? (You will see the response in the screenshot, and it is only looking in this document library for the answer.) You will also notice we can view the Reference document where it got this information from, it’s never a bad idea to verify. Now if we ask, Could I ask my manager for more information? Something important to note here is that your Copilot Agent has access to the Microsoft Graph. So, it pulled in Shane’s managers name, Nicola, which is really nice. Another cool feature of the SharePoint Copilot Agent is the ability to select a specific file and ask questions just for the selected file. So, in our example we will select a file and then ask the chatbot, Summarize this file please . And just like that, it summarized our document! Ok, switching gears for just a second. We are going to head back over to our Documents library to show off another cool feature of SharePoint Copilot Agents. Let’s say you have 2 similar excel files in your document library and need to compare them. With your SharePoint copilot agent, this is no problem! In this example, we have 2 Payroll files and want to compare them so it will find the differences, we can simply ask, Compare these files please . We will then see, it gives us the key difference between the 2 files, saving us time from having to do it manually. We also previously mentioned you could create SharePoint Copilot agents for Sites and Libraries. But you can also quickly and easily create an agent for a specific folder or file as well. If you select a file in your document library and click the ellipses , from the flyout you will see Create an agent . This agent will be specific to the file selected. Switching back to our Customer Docs Library, notice you will now see a Customer Docs Chatbot.agent file. If you click on that file, it will open the Chatbot in a full window for you. So how do users access these SharePoint Copilot Agents? Are they just instantly available for users after it’s created? Great questions! In the upper right, click on the dropdown next to the agent. 27. You will see 2 different sections, you have Approved for this site and Recommended for you . The Approved Agents have been shared and are accessible to all of your users with Copilot license. Whereas the Recommended one, is only available to Shane since it has not been shared yet. To make our Customer Docs Chatbot available to everyone, we can click on the ellipses next to the chatbot. From the dropdown, select Set as Approved and then it would be globally accessible. You may notice there is also a Share button. By using the Share button, you could select specific users or groups who you would like to share this Agent with. There is a third option for sharing your Chatbot, and that is you can share it to Teams and use it in Teams. (We did not have this option show up for us for whatever reason, but just know it is possible and should be available) – NOT SURE WE WANT TO INCLUDE THIS. As a final note on sharing and security, if a file(s) are not shared with users for security reasons, the chatbot will not use those documents in it’s response. This is important to know. Hopefully this was helpful in getting you started with SharePoint Copilot Agents. And helps get you thinking about how you could use SharePoint agents to help you and your team work more efficiently. Shane also has a video that goes along with these steps, you can watch here . Wrapping It Up: Time to Level Up Your SharePoint Game The SharePoint Copilot Agent is more than just a chatbot; it's like having a personal assistant who's always on call, ready to help you navigate the maze of information with ease. What would you ask your Copilot Agent first? Drop your ideas in the comments below—we'd love to hear how you plan to make the most of this game-changing tool!
- 6 Apps & Flows That Run Our Business
At PowerApps911, we rely on efficient and cost-effective business tools, just like you. Instead of settling for generic, subscription-based apps that only partially meet our needs, we’ve embraced the Power Platform to create tailored solutions that address our specific challenges. Why Build Custom Solutions Instead of Buying SaaS? Traditional software often requires businesses to adapt their processes to fit the tool—a frustrating and inefficient experience. But with the Power Platform, we’ve flipped this dynamic. Now, we can design solutions that align perfectly with our workflows, empowering us to operate more effectively. The Advantages of Custom Solutions: Tailored Fit: Each app is built to match our exact processes, ensuring seamless integration with our operations. Rapid Development: Thanks to low-code tools, we can build functional apps in days rather than months. Empowerment: Business experts can create these solutions directly, reducing reliance on traditional developers. Below, I share six examples of how we’ve solved real business problems using Power Apps and Power Automate. These solutions are tailored for our needs but can serve as inspiration for how specific and effective your own tools can become. Are these solutions a perfect fit for your business? Not exactly—they’re tailor-made for ours. However, they showcase the adaptability and customization potential of the Power Platform, inspiring you to imagine just how precisely you can address your own unique challenges. Also, keep in mind even though we have built 1,000s of apps and flows for customers we rarely build our own tools with that much focus. Many of them are on iteration 50 or more as we are constantly improving and tweaking it. Another beauty of the platform, the tools and the apps are at their best when things are very agile. Oh yeah, and if you want to see any of these business solutions in action then check out the video 6 Apps & flows that run our business - Power Automate & Power Apps Examples Applicant Tracking System Managing hundreds of job applications annually can be overwhelming, especially for a team of 30. To address this, we use a custom Applicant Tracking System (ATS) built with Microsoft Forms, Power Automate, and SharePoint. Process Overview: Applicants submit their information via a Microsoft Form embedded on our careers page. Power Automate processes the form responses, applies filters for priority applications, and stores the data in a SharePoint list. Key Feature: Automated Teams notifications allow reviewers to evaluate key responses quickly and collaboratively make hiring decisions. Enhancements: Custom Power Apps forms on SharePoint streamline the data review and rejection process. Weekly Meeting Scheduler For our Power Platform University program, we host weekly classes for rotating groups of students. Managing these meetings was once a time-consuming task until we automated the process. Solution Details: I fill out the app with the subject and body and hit Send. It triggers a flow that gets the current list of students from the Training API. It then generates a Teams meeting and sends each student a proper Teams invite. Time Saved: Previously, it took 30 minutes to prepare these invites manually. Now, it’s done in under a minute. Bonus Feature: Custom logic ensures recurring schedules (e.g., Thursdays at 3 PM) are automatically accounted for. Help Request Manager Customer inquiries are central to our business, and we handle thousands of them annually. Our Help Request Manager flow ensures no request goes unnoticed. If you have ever filled out our Contact Us form, you have been in this process. Core Functionality: A Cognito Form collects customer requests, which Power Automate then routes to the designated team member for the day. The flow then facilitates all of the back and forth via Teams with the consultant and emails to the requestor. It might be the most complicated flow I know of. Adaptive Cards in Teams: Responses are managed directly within Teams, eliminating email clutter for the PowerApps911 team. Additional Benefits: The flow automatically updates SharePoint with inquiry statuses and tracks correspondence. Also, if the requestor says yes, they can automatically add themselves to our mailing list. I decided a picture of the whole flow was most interesting. 🤣 To say it does a lot is an understatement. Office Hours Scheduling One of the best features of being a paid Training student is the monthly live office hour sessions where you can get your own questions answered. The problem was not enough people were attending. So, we gave them an option to get a real meeting invite, none of that ICS garbage. How It Works: Students select their preferred session (AM/PM), triggering a flow that adds them to a hidden list of attendees in a Teams meeting. Key Advantage: Students receive calendar invites directly, enhancing attendance and reducing friction. I almost forgot, this solution has a full build video here . Do you want to get your questions answered? Sign up for one of our paid training options with Office Hours and you can attend and get your answers! Custom CRM System Our custom-built CRM, powered by Dataverse and integrated with QuickBooks, is at the heart of our operations. It’s a sophisticated model-driven app that simplifies customer and project management. Highlights: Tracks client details, projects, time sheets, and billing information. Seamless integration with QuickBooks through a Dataverse plugin. Biggest Win: Automating time entry approvals and syncing data with QuickBooks saves over 10 hours of manual work weekly. Troubleshooting with Blank Apps Troubleshooting large apps or flows can be challenging, so we rely on creating “blank apps” to replicate issues in an isolated environment. Fail Fast Philosophy: By recreating the problem in a controlled app, we can quickly identify whether the issue lies in our code or the platform itself. Key Takeaway: This approach reduces debugging time and prevents unintended disruptions in live apps. Final Thoughts Building apps and flows isn’t just about solving problems; it’s about empowering teams and enhancing user experiences. Each of these solutions has not only made our operations smoother but also inspired us to push the boundaries of what’s possible with the Power Platform. If you need help with solving some of your business problems with your own custom solutions, then hit that contact button and let us know. We can help you with anything from a 30-minute bug fix to a 30-year partnership. Training, mentoring, architectural double checking, and more. We are experts and happy to share that expertise with you.
- 2024 Power Platform Functionality Highlights
As we wrap up the year, we know everyone is already in holiday mode, so instead of diving into complex new stuff, we’re taking a moment to reflect on the exciting functionality updates across the Power Platform in 2024. This year has been filled with innovation that continues to empower makers and users alike. Let’s dive into the highlights, broken down by product, to give you a quick recap before the new year. Power Apps The Power Apps Studio saw updates this year with the addition of Copilot , new Modern controls , and an updated interface for makers : Copilot: Made the formula bar more intuitive, automatically suggesting formula inputs as you type. You can even add remarks to your formula code, and Copilot will interpret these as coding suggestions. Modern Controls: Many modern controls are now production-ready, offering robust theming and customization options. These sleek controls, like combo boxes, date pickers, and the new data table (still in preview), make creating polished apps easier than ever. Enhanced Interface: The updated interface introduced hover menus for controls like galleries and combo boxes, providing quick access to settings without extra clicks. Tree view icons now better represent control types, while the Data and Media panels simplify resource management with smart removal buttons for unused assets. Power Automate Power Automate delivered notable updates in 2024, focusing on usability and integration: Modern Designer: Bugs have been ironed out, and Copilot now provides intuitive suggestions while designing and testing flows. Power Automate Desktop: Seamless integration between desktop and cloud flows is now possible, with Power FX support for desktop flows and improved functionality for the recorder tool. Tweaking automations has never been easier. Copilot for Automations: Copilot has improved significantly, turning natural language into functional automations. If you haven’t used it yet, now is the time to explore this game-changing feature. Power Pages 2024 Power Pages updates focus on enhancing the way makers create and connect their web experiences: Copilot for Pages and Forms: Easily create pages and forms using Copilot, which leverages natural language and the summarization API for actionable insights. Add insights to your lists and forms with Copilot integration with the summarization API. Improved Data Connectivity: A new setup wizard simplifies the creation of virtual tables in Dataverse and linking to external data sources, making integrations more accessible than ever. Power Fx Integration: While still in preview, Power Fx began rolling out in Power Pages, giving makers more flexibility to customize logic directly within their sites. Enhanced Data Model: All new sites now include an enhanced data model by default, setting a strong foundation for scalable and efficient data management. Power BI Power BI delivered some powerful updates in 2024, focused on enhancing collaboration, visual storytelling, and data-driven decision-making: Copilot Integration: Introduced natural language queries, AI-generated report summaries, and automated data cleaning to streamline workflows and enhance usability. DAX Enhancements: Released the general availability of DAX Query View, support for live connections, and new INFO functions for improved metadata insights. Feature Updates: Added visual calculations, dynamic format strings for measures, and enhancements to card and slicer visuals, offering greater flexibility and interactivity in reporting. Improved User Experience: Features like Dark Mode, advanced geospatial mapping with the Path Layer, and small multiples in card visuals further enhanced Power BI's analytical capabilities and ease of use. Shane releases new videos on his YouTube Channel , and those videos, plus exclusive extras (app downloads, code snippets), are available ad-free on our training site for just $15 per month (you can include office hours for $20 per month)!
- E-Signatures with docusign and Power Platform
Seriously, does anyone enjoy getting a document, printing it out, signing it with a pen, scanning, and then sending it back to the requestor? Anyone??? I didn't think so. Thankfully the ability to esign documents is pretty common these days and accepted in most scenarios. So today let's look at an end to end scenario using Power Apps, Power Automate, and docusign. And don't worry, while this is a getting started scenario we are going to do way more than hello world. We are going to: - Build a Power Apps app that creates a PDF dynamically from our data - Add Signature blocks to the PDF with some HTML fun - Send the HTML to Power Automate to generate the PDF - Then use docusign actions to create an envelope and send it for signature - Once the document is signed have another flow upload it to SharePoint Now the blog post isn't going to be the 100 pages long it needs to be to teach you all of this. Below we have some more details but if you want to learn how to build all of this then you will need to check out my YouTube video: Docusign for Power Apps and Power Automate Power Apps to filter your data and create HTML While giving you a PDF and saying here look Mom we got it signed would have been easy, that isn't real. The whole magic of Power Apps is you can build what you want. You could build your app to filter out invoices, generate a SOW, PO, or a contract for signature, or maybe to send internal HR documents that need a signature. By using the App you can build a nice interface to generate the unique content you need to send for signature. In the video we show filtering employee data but it doesn't matter, all that matters is you get well formed HTML with signature blocks hidden in it. Power Automate to create a PDF The process of creating the PDF is the same as always with Power Automate. Create an HTML file in OneDrive for Business, convert that to PDF with the built in action, and then save the new PDF file. The good news is you don't have to change any of that when using docusign. When you generate the HTML in Power Apps you add HTML tags like below: Name: \\n1\\\\ Date: \\d1\\\\ Signature: \\s1\\\\ These tags will be replaced with docusign parts in the later actions. docusign Actions In docusign now you are going to use a lot of actions. To make the process as flexible as possible they have every step in its own action. So you will need to create an envelope, add recipients, add tabs, and finally send the envelope. No one step is hard, you just need to work through them logically and make sure you get everything you want. For example, in my HTML above I showed 3 blocks I wanted: Name, Date, and Signature. So I need to add three tabs for a recipient on an envelope. I am sure yours will be different. Saving the Signed Document Back to SharePoint Alright, they have signed your PDF now you probably want to capture that file. In my case I wanted to put it in SharePoint. Turns out that is a pretty simple flow since there is a Power Automate cloud flow trigger for When an envelope status changes. Then you just get the document and save it to SharePoint. Boom! Practical Applications Think about HR departments needing approvals for hiring, project managers needing sign-offs for deliverables, or finance teams requiring authorization on budget documents. This kind of automated approval workflow can drastically reduce administrative load, eliminate bottlenecks, and keep projects moving forward smoothly. For example, in the scenario from the video, the system was used to collect managerial sign-off on employee lists filtered by department. The Power App allows users to dynamically adjust which data they want approved, and the entire process—from document creation to manager signature—is completed in a fully digital space, with every step tracked automatically. Closing Thoughts The combination of Power Apps, Power Automate, and DocuSign provides a powerful toolkit for businesses looking to streamline approval workflows. Not only does it save time, but it also provides the reliability and traceability that manual processes often lack. By reducing the need for human touchpoints, it minimizes the chances for errors and keeps everything moving smoothly—something every organization can benefit from. If you're interested in setting up something similar for your team, consider starting with a simple process that you can automate end-to-end. With tools like these, small changes can lead to big improvements in productivity and employee satisfaction. And of course, if you need help with this or anything Power related hit the Contact Us button. We have options from a 30 minute call to help you get unstuck to a 30-month project to help you automate EVERYTHING. Just let us know how we can help.
.png)
.png)
.png)
.png)











