Posts

Power Platform - Give yourself System Administrator Rights in the Default Environment

Image
 What How to give a Power Platform Administrator the System Administrator rights so that you have full control over your default environment. Why By default, no one has access to create a new table/entity in the Dataverse in the default environment.  In our instance, we are extending the capabilities of Microsoft Planners Premium Plan Metadata. How The normal methods of going into the PP Admin Centre and giving yourself 'System Administrator' rights is disabled.  The only way to give yourself full admin access is via the 'Membership' button found here on the homepage of the Environment Administration for the default environment.

Using GenAI to Clean Up Your Power App Naming Conventions

Image
What Providing you, a Power App developer, with the steps to quickly apply theming and naming conventions to all fields within your app, by utilising any GenAI tool. Why After a swift session of adding labels and text boxes and such to your app, and nicely theming one, but then having to apply all the values to other fields, your app probably looks something like this.   At this point, if you are like me, your next steps are: clean up field names re-order tree-view from top to bottom ensure theming matches throughout Depending on the complexity of the app, doing a good job of this could take a whole day. How Add all your fields to your app Theme one perfectly 'View Code' on the Screen and Copy the YAML to Notepad   Open up your preferred GenAI tool - for this exercise I'm using  https://claude.ai/   Enter the following Prompt, before pasting in the code you copied from step 3: I've just built a Power App, but need your help with the following: 1. Naming fields approp...

Power Apps - Check Group Membership For Groups With > 1,000 Members

Image
What There are occasions when it is useful to check inside a Canvas App whether the logged-in user is a member of a specific Security Group. This allows you to implement hide/show functionality for areas of the application that you may only want users/administrators to see. Why The standard method I've used in the past to implement this 'group membership' check is to call the following Connector/Function: Office365Groups.ListGroupMembers() Using this connector, you would first get a list of All the members of a specific security group, then you would do a Filter on that collection to check if the logged in user is one of the Members. However!  That connector only works when group membership is less than 1,000 people, if your group has more than 1,000 members, then there's a chance the app will come a cropper for some users. So below we're going to show you how to do the same check by using MS Graph API calls that all users have access to. How  Using a Graph API cal...

Power Automate - Duplicating Calendars across multiple accounts

Image
I am constantly working across multiple clients with multiple accounts and calendars.  One time consumer is that each of the clients can't see my calendar, so we double book and discuss back and forth when each person is free. To avoid this time loss, I've whipped up a simple workflow that copies all my calendar invites from my main account to my other accounts. Making sure to keep them 'Private' so I don't accidentally open up all my discussions across multiple companies!

Microsoft Teams, Bose QC 35 ii Headphones & a separate microphone

Image
Issue: Headphones would not play sound when I had a different microphone selected in Teams:   How to fix:  Disable this property on your headphones. Thanks to this post: https://www.reddit.com/r/techsupport/comments/r4xehv/comment/j9k99wh/?utm_source=share&utm_medium=web2x&context=3

How to Copy/Duplicate a Table and Columns in a Dataverse Environment

Image
What If you need to do either of these things, then this article is for you: Create a copy of a table in the same environment as the original table Create a copy of a table but want a different prefix against custom column names Why In most circumstances, if you need to duplicate a dataverse table, I would suggest to bundle it inside a solution, and migrate the solution to another environment.   However, in the scenario where you need the duplicate table to be inside the same environment, here's a quick method that requires no manual creation of columns! How Short answer : Install  XRMToolBox , inside XRMToolBox, install and utilise the Clone Field Definitions Plugin  from the Tool Library. Pre-Tasks In order to clone a table with a new PREFIX value for the columns you first need to do the following: Create a new PUBLISHER with the new prefix you would like Create a new TABLE where you will be cloning all the fields. Tasks Download & Install  XRMToolBox On t...

Free Responsive Power App Template w/ Side Navigation

Image
I wanted a simple template for building out responsive canvas apps with a side navigation so here it is, free to use for everyone: Find here:   https://github.com/BR-E20/Power-Platform-Solutions Solution Name: ResponsiveAppTemplate_1_0_0_1.zip  Large/Extra Large screens Medium Screens Small Screens / Phones

SVG Icons for Power Apps - Find any icon you'll ever need

Image
Reference Material How to put SVG code in an image object:  https://www.matthewdevaney.com/svg-images-in-power-apps/#How-Do-I-Add-SVG-Icons-To-Power-Apps Figma - Microsoft Office Icons: https://www.figma.com/community/file/1109502320071552607 Figma - 1600 free icons: https://www.figma.com/community/file/886554014393250663/Free-Icon-Pack-1600%2B-icons Figma - Adobe Icons: https://www.figma.com/community/file/834829738797323395/Adobe-Icons   Steps Step 1: Search figma for icons (some examples above) Step 2: Copy icon as SVG Step 3: Paste SVG code in notepad and Replace all " with ' Step 4: Paste into image object in Canvas app "data:image/svg+xml;utf8, "&EncodeUrl(" SVG CODE YOU ADJUSTED IN NOTEPAD ")

Power Platform: Managing Environment Variables in 'Managed Solutions'

Image
What Environment Variables are a great way to manage your solutions as they pass through DEV/TEST/PROD environments.  They save having to manually update flows/apps during each change and test iteration. However there is a gotcha to understand when you're planning your next migration or app update. More on Environment Variables | Microsoft Learn Why The two issues I faced using Environment Variables were due to the ' Current Value '. Issue #1 : If you don't want the value you used in DEV to push through to TEST/PROD, you need to remove the 'Current Value' from your solution BEFORE exporting it. If this is not done, and you're migrating as a  managed  solution, the 'Current Value' will flow through to your TEST environment, and cannot be changed because the solution is locked down. When a single sentence in an MS Learn article can cause so much pain... Issue #2 : If you're like me and you realised this AFTER you'd already imported into another...

Power Automate: Dynamically retrieve SharePoint Online Document Library 'Drive ID'

Image
Thought I'd add a fancy AI-generated blog header from Microsoft Designer while we're here ! Problem Had a Power Automate Flow that would grab a document from a document library and PDF it.   Needed to make the 'Document Library' field dynamic as the workflow was moving between DEV/TEST/PROD environments inside a Managed Solution  Putting the Name of the document library in that field was not working. How What you need to input into that field, is what's called the 'Drive ID' of the document library.  Which is not immediately available without making a HTTP Call.  So do this to get the drive ID of the specific library you're after: Code for each step Filter Array FROM value:  body('Send_an_HTTP_request_to_SharePoint_-_Get_Library_Metadata')['body']['value'] Filter Array Advanced Code : equals(item()?['name'], 'NAME OF DOCUMENT LIBRARY') Document Library Field Code : first(body('Filter_array_-_Get_DOCX_DriveID...

Useful Power Automate Expressions and Tips

Image
Wanted to provide a few Power Automate tips and tricks when using expressions and also when using Dataverse Connections. Replace semi-colons with commas  Useful when working with Choice Fields replace(outputs('Get_a_row_from_Dataverse Table')?['body/ChoiceField'],';',',')   If field is empty, show NA Useful when populating an email/document with values and you don't want the fields to have blank values. if(empty(outputs('Get_a_row_from_Dataverse Table')?['body/ChoiceField']),'N/A',outputs('body/ChoiceField'])   If a boolean value is true, show YES Useful for making the wording inside emails/documents make more sense to a human! if(outputs('Get_a_row_from_Dataverse Table')?['body/BooleanField'],'Yes','No')   If a boolean is true different method for certain scenarios if(equals(outputs('Get_a_row_from_Dataverse Table')?['body/BooleanField'],true),'Ye...

Keep up to date on the latest Power Platform Updates

Image
Want a morning news feed focussed on Power Platform updates, without getting bogged down with all the various other updates Microsoft send out? Wait no more.  Presenting, the MS Teams channel with Power Updates. How? All you need is: RSS URLs to each of Microsoft's Power Platform Blogs (provided below) A MS Teams Channel to post to 5 Flows (I promise, it's easier than it sounds) Details Solution Build a solution to store your flows together.  You need one flow for each RSS flow. Flow x 5 Each Flow only has two steps! Steps expanded: The RSS Feed URL's: Power Apps: https://powerapps.microsoft.com/en-us/blog/feed/ Flow: https://flow.microsoft.com/en-us/blog/feed/ Power BI: https://powerbi.microsoft.com/en-us/blog/feed/ Power Pages: https://powerpages.microsoft.com/en-us/blog/feed/ Power Virtual Agents: https://powervirtualagents.microsoft.com/en-us/blog/feed/ Adaptive Card code The hardest part is the Adaptive Card code, you can build a customised card yourself here:  https...

PowerApps - Hide Buttons & Objects based on Office 365 Group Membership

Image
This post shows how you can hide a button inside a PowerApp unless you are a member of a specific O365 Group Why A lot of PowerApps we build these days have two audiences: The person filling out a form The team managing the process The person filling out the form really only needs to do one thing.  Fill out a form, and trust it's been sent to the right people. The team managing the process may have a review & approval process that they don't want regular staff to see.  They may have Power BI reports or other screens that should be kept private. I am going to show you how you can hide these buttons & screens so that they are only accessible if you are a member of an Office 365 Group. How 1. Create Office 365 Group & get ID First we need an Office 365 Group that we are a member of, and we need to retrieve it's ID.  Here's another post on how to get the ID:  How to Quickly find the GUID of a O365 Group 2. We are going to create 2 buttons...

Microsoft Flow - Convert AND Format DateTime from SharePoint for Australia

Image
Using DateTime fields from SharePoint can be a royal PITA.  Here's the simplest way I've found to do a quick conversion from UTC time to AUS time. What Using Flow, when you pull dates from a SharePoint list, even if they look right in SharePoint, they come out wrong in Flow. Why SharePoint Lists store DateTime values in UTC format behind the scenes in the database.  This means even if you have Regional Settings set up in SharePoint to show the correct DateTime in the list, when you pull the data out using other applications, it spits out in UTC. We want to fix that. How The expression I use to quickly convert the timezone AND format it to the correct dd/mm/yyyy format is ConvertTimeZone() . This function expects the following information: ConvertTimeZone(DateTimeString, SourceTimeZone, DestinationTimeZone, Format) Here's an example I've used in an Email Action in Flow: convertTimeZone(triggerBody() ?[ 'DateTimeFromSharePoint' ], 'UTC'...

Office 365 Groups - Quickly find the GUID of a O365 Group

Image
Looking for the GUID for a Office 365 Group and finding it slightly painful with PowerShell? Here's my trick for quickly finding it. I use Microsoft's Graph Explorer:  https://developer.microsoft.com/en-us/graph/graph-explorer Navigate to the Graph Explorer & click the Sign-In button in left-navigation Click the 'Show More Examples' link in the left-navigation Select 'Groups' from the right-hand popout Now you should be able to click ' All Groups in my organization ' on the left hand nav.  (You may need to add the permission ' Directory.Read.All ' to your account. Use Ctrl+F in the response pane to quickly find the group and grab it's ID

Microsoft Flow - Create a Teams Message from an RSS Feed

Image
This is a nice simple Flow that I love!  If you work with a lot of different software and want to keep up to date on the latest changes without having to save all those pesky favourites to various RSS feeds/blogs, this is for you. The great thing about this is, when you start posting it to Teams, now everyone can see when there is an update!  It's only 3 steps, here's how: Create a Blank Flow Add the Trigger ' RSS - When a feed item is published ' Add the ' Data Operations - Compose ' action to create a nicely formatted message to send to teams Add the ' Teams - Post a Message ' action, select your team & channel, and put the Compose Output into the Message box I use this flow to keep up to date on all the latest Microsoft PowerApps news, see the screenshot below for my flow setup.

PowerApps - Building a Expanding Gallery with a Expanding Text Box

Image
I recently built a questionnaire PowerApp for a customer.  They had a bunch of questions where the expected answers could be anything from 50-500 words. The problem was when you put too many words into a text box, it gets scroll bars. eww. I'm not against scrollbars for a whole screen, but for text boxes, yeah no. So here's what we did! Added a 'Blank Flexible Height' Gallery to the PowerApp Connected it to my Collection of questions Added a label to display the question Added a text box to collect the answers Set the following text box properties: Mode: Multiline Height:  40 * RoundUp((Len(TextInput1.Text)+0.01) / 90,0) What this does 40 - how tall the text box is each time you meet the character limit for one line 90 - How many characters it takes to move the 40px multiplier up  roundup - ensures the returned number is only ever 1 rounded number.  This means the text box grows in chunks, instead of growing with each individual character type...