Blog

  • Increase your team’s productivity with PowerApps

    Increase your team’s productivity with PowerApps

    Ever see the popular Time Management analogy “Jar of Time” which depicts rocks, pebbles and sand being placed into a Jar, representing how you should manage your time to get the important things done first?

    This analogy can provide some surprising revelations about the value of mobilization your applications!

    In the analogy, you manage your time best by first putting in your large events: family, job, sleep, etc.  Next you sprinkle in the pebbles (calls, meetings), peas (emails & such) and finally there’s all that sand – those numerous little moments or small tasks and distractions which when you add them all up could comprise a significant portion of your day.

    Those little moments are your “mobile moments”. The question is, how can we reduce the time spent on these moments or smaller mundane tasks?

    Microsoft PowerApps: Mobilization = Empowerment

    Microsoft PowerApps can be a surprisingly effective way to optimize of all those “mobile” moments – empowering you with just enough function – and TONS of CONVENIENCE – to swiftly & conveniently handle lots of nagging small tasks that otherwise leave you spending countless evenings (and weekends) “catching up”.

    If employees had the ability to complete those myriad brief tasks on their phones from anywhere and at any time, otherwise wasted moments become empowered moments – giving them back time in their workdays for the larger tasks!

    Traditional mobile apps that extend the availability of large enterprise-wide systems have historically been costly and time-consuming to build. This has forced many organizations to only focus on revenue-generating mobile applications, leaving all the time-saving applications on the backburner. With last year’s release of Microsoft PowerApps, however, organizations now can develop mobile apps simply and cost-effectively. They no longer must choose between revenue-generating and time-saving initiatives.

    “PowerApps mobilize organizations by transforming what were wasted moments throughout the day into empowered moments where work actually gets done!”

    PowerApps can be utilized to swiftly build mobile apps designed for all departments, including Management, HR, Sales & Marketing, Production, Operations, QA, Finance, R&D and IT. Here are some sample use cases where these mobile apps can help.

    • Management – Quickly process global CapEx requests and approvals for processes running even on other continents from their mobile devices, providing more flexibility for time with family and more mission critical activities
    • HR – Time-saving apps for on-boarding or empowering employees with self-service apps for adding dependents, major life changes (Marriage), requesting PTO, or adjusting payroll information.
    • Sales & Marketing – Time-saving apps for quickly & accurately recording leads, contacts, opportunities in your CRM system, and approving estimates and SOWs from anywhere.
    • Production & Operations – Mobile functionality to quickly report and resolving production issues, even when managers are away from the office.
    • Corporate Communications – Provide employees with important corporate-level messages delivered as “push notifications” right to their phones – just like Twitter, Facebook and other popular social media apps with ease.

    Wherever and whenever mobilizing your workforce can save you time (and money), Microsoft PowerApps can be your key to swiftly & affordably building (and maintaining) those apps.

    Microsoft PowerApps function like a normal smartphone app, enabling users to receive notifications when they have a task pushed through to them. When they open the app, they can attend to the task as requested, or prioritize it for later. PowerApps are intuitive & easy -to-use, so your employees can begin leveraging them immediately with little or no training.

    The technology offers additional functionality by integrating with more than 100 commonly-used business applications, including OneDrive, Dropbox, WordPress, Google Drive, various social media platforms and other systems, to enable employees to accomplish tasks on their mobile device.

    Further, because PowerApps mobilize smaller tasks, the apps aren’t time consuming to develop or manage.

    By empowering employees to quickly attend to some of the more mundane tasks with a click of a button when they have a spare moment- say on their train commute to the office; they are better able to prioritize their day. This productivity increase can lead to more engaged employees at the office as well as more productive, lean business operations.

  • Conditional formatting in a PowerApps gallery

    Conditional formatting in a PowerApps gallery

    Just like in a SharePoint list, you can format the display of list of items in a Power Apps gallery.

    In this post, we’ll look at a couple of examples that we’ve configure, after reading a post by Laura Rodgers I’ll show you a few examples to give you ideas of how you can set up formatting in your own Power Apps. In my example, my list is a custom SharePoint list, full of tasks. If you’re not familiar with the concept of a gallery, here’s Microsoft’s documentation.

    Here are the basic steps first:

    1. Decide which control to format.
    2. Decide which property of the control to format.
    3. Go to that property, and write an IF function, or a SWITCH.

    Concept 1: Text Color

    In this example, I’ve got a label control that displays the status of each task, and the status in SharePoint is a choice column. The goal is to display different statuses in different colors. Click on the status label in the first row of the gallery, and at the top of the screen, select the Color property, so that you can type in the function box.

    There are several different ways to indicate colors in PowerApps, but in this example I’m just typing the color names. If the status (a SharePoint choice column) is completed, show green, otherwise black.

    If(ThisItem.Status.Value=”Completed”, Green, Black)

    If you have multiple statuses and therefore need to set up multiple colors, the most efficient formula to use, is the SWITCH, which is similar to IF. In this below example, if it’s completed show green, if in progress, purple, and if not started show orange, otherwise if none of those are the case, the color will be black.

    Concept 2: Bold Font

    In this example, the goal is to display the text in a bold font, based on a condition. I’ll use the condition of the currently logged in user. If the task is assigned to the current user, the user’s name will be displayed in a bold font weight.

    Click to select the label in the first row, that shows the “Assigned To” person’s name (a SharePoint person column). Select the FontWeight property.

    If(ThisItem.’Assigned To’).Email = User().Email, FontWeight.Bold, FontWeight.Normal)

    Concept 3: Switch Icons

    In this next example, we’ll work with the priority column. I’d like to display a different icon for each of the 3 different priority levels.

    With your cursor in the first row of the gallery, go to the Insert tab, click Icons, and choose an icon. You can switch this icon to something else, and see a list of icons over in the properties panel on the right. Decide which icons you would like to use for each of the three statuses. There is a property called Icon on the icon, which tells you its name.

    In this formula, since I have a few different priorities (a SharePoint choice column), I’ll use the switch function.

    Concept 4: Fill Color

    Most every type of control in a Power App, has a Fill property, for the fill color. In this example, I’ll insert a circle into my gallery, and I want it to show as a different color depending on the priority. I’ll change the color of the icon control to white, and move the circle so that it shows behind the icon. Here you can see the Switch function is useful again. If it’s high priority, show as red, if normal, orange, and otherwise blue.

    Concept 5: The row background color

    In this example, if the status (a SharePoint choice column) is equal to “In progress” show as yellow, otherwise white. To set the row’s background color, select the whole gallery, and go to the property called TemplateFill.

    If(ThisItem.Status.Value=”In Progress”, LightYellow, White)

    Concept 5: Disable a button

    You can change the DisplayMode of any control, based on a condition. When you disable a button, by default it will show as grey, so that the button is still there, but clearly not clickable. In this example, I’ll use a button control, and I’ll disable it if the task has been completed. Select the button, go to the DisplayMode property, and here’s the formula:

    Concept 6: Font Color if Overdue

    This one is the same as the first concept with the text color, but I’m just showing a specific example of displaying a date as red if the task is overdue. Two different conditions. The due date has passed, and the task has not been completed. Select the date label in the gallery, and go to the color property:

    I recorded an hour long video of all of this, on my live Power Hour a couple of weeks ago, here it is. There are a few extras in here, like when I show how to click a button to open a task form in front of the gallery, and when I show how to set up the gallery to display with that purple line in between rows.

  • Finding your feet with Power Platform environments – Part 01

    Finding your feet with Power Platform environments – Part 01

    Introduction

    In this series, we’ll look at Power Platform environments. We’ll have a look at what they are, what they do, how to create them and how to administer them.

    What is a Power Platform environment?

    A Power Automate environment is a container that can is used to separate applications and flows based on pre-determined criteria, e.g., security requirements, or target audiences.

    A common example is the use of one environment for development of flows (with limited access) and another for production environments (with less restricted access for all users)

    What types of environment are there?

    There are three types of environment in the available:

    • Production
    • Sandbox
    • Trial.

    Production environments are suited for stable workloads where you have predictable usage.

    Sandbox environments are for building proof-of-concept applications and flows that might need to be reset without recreating the entire environment.

    Trial environments will expire after 30 days. These environments are best suited for evaluating technologies.

    You can more information about the types of environments here.

    How do I create an environment?

    1. Go to https://admin.powerplatform.microsoft.com and sign in
    2. Select Environments from the left -hand navigation
    3. Select + New

      New environment
    4. A fly-out window will appear in the right-hand side of the window
    5. In fly-out form, give your environment a meaningful name
    6. Select the Trial type environment
    7. Select the geographical region for the environment
    8. Choose whether or not to create database for you environment.
      Note: If you only intend to use simple data sources, e.g., Excel or SharePoint, you don’t need a database. However, if you don’t create one you won’t be able to users features such as the Common Data Service, AI Builder or UI flows.

      new environment configures
    9. Provide the Language of your choice and Currency. For the purposes of this exercise, do not enable Dynamics 365 apps or sample apps and data. Select Save to create your environment.
    10. After a couple minutes, your environment should be provisioned and you should see the following status message displayed in the Admin center. You might need to select Refresh for the State field to update.status message

    In the next post, we’ll look at the basics of managing your new environment.

  • Power Platform Centre of Excellence

    Power Platform Centre of Excellence

    The Power Platform Center of Excellence (COE) Starter Kit is a set of apps, flows, a custom connector, and a Power BI dashboard that allows organizations to govern their Power Platform environments. The tool is freely available for download on GitHub .

    The Starter Kit is a great tool for organizations to increase the visibility of what their makers are doing in their tenant. Naturally, this tool immediately applies to two personas: Cyber Security analysts and Organizational Change Management (OCM) interests. Makers that are building applications and services that introduce risk to the organization should be monitored, but makers who are automating workloads within sanctioned systems and services should be empowered and encouraged to expand on their efforts.

    The Starter Kit does have some prerequisites, including:

    • A global tenant admin, Power Platform Service admin, or Dynamics 365 service admin role is required to access the tenant resources.
    • A Power Apps premium license for accessing Common Data Service.
    • An environment with Common Data Service because the Starter Kit solution will need to store metadata about the apps and flows that are detected within an environment.
    • Power BI Desktop to view the reports and visualizations that highlight app and flow use within the tenant.

    Within the Starter Kit, administrators will discover the tools and features that are discussed in the following sections.

    DLP Strategy

    By using the DLP Editor app, an administrator can explore existing DLP policies and evaluate the impact of moving a connector from one data group to another. If a change to a data group has an impact on an existing app, that will be highlighted in the Affected Power Apps list. Then, an administrator can send an email, through an in-app experience, to the owner of that application and warn them of the upcoming change.

    This current, in-product DLP editor experience doesn’t provide this type of what-if analysis, so we recommend that you use the DLP Strategy app that comes with the COE Starter Kit when making DLP changes. Using the DLP Strategy app will also help you understand the impact to existing apps when DLP changes are made and help you reduce the chance of unknowingly breaking someone’s app.

    COE DLP editor

    Catalog tenant resources, visualize data in Power BI

    While Admin Analytics, which is found in the Power Platform Admin center, provides some insight into the use of Power Apps and Power Automate, it does so within the context of an environment. This parameter makes developing a holistic picture of usage difficult. However, using the tools that are provided in the COE Starter Kit brings all these insights together by using Common Data Service, a model-driven Power App, and a Power BI dashboard. These assets, plus the inclusion of flows that will sync data from Office 365 Security and Compliance logs and through the Power Platform management connectors into Common Data Service entities, provide the greatest level of visibility for administrators.

    The Power BI dashboard connects to Starter Kit Common Data Service entities and contains tabs that provide the following reports:

    • Overview – Includes the total number of apps and flows that have been created, including a breakdown based on the maker’s location and the number of apps/flows that they have created.
    • Environments – Highlights the number of environments that have been created and includes the type of environment (Default, Production, Sandbox, Trial), and then identifies the creators of the environments and when the environment was created.
    • Apps – Provides insights into the usage of apps, including the number of sessions and users that the app has been shared with. This report also breaks down usage by department by pivoting data based on the department that has been specified inside of a user’s Office 365 profile.
    • App detail – Examines the specifics of the app, including the connection type and when the app was last published.
    • Flows – Displays a flow creation trend that will break down when flows were created. This report will also pivot data based on the user’s department and includes a breakdown of the flows that were created by environment.
    • Custom Connectors – Lists all the custom connectors that exist within a tenant. This report also lists the users that created the connectors and then trends the month that they were created in.
    • Makers – Identifies all the makers within the environment and identifies how many apps and flows they have built. A slicer exists that allows a consumer of this report to filter based on the maker’s department.
    • Connections – Displays the number of connections that have been established, by connector. This report provides great insight into the popularity of specific connectors within your tenant.Center Of Excellence PBI

    App Audit

    The main purpose of the Sample App Audit process is to demonstrate how an admin could identify overshared or often used resources and gather further information, like business justification and business impact of an outage, for those apps. Having a platform that provides democratized access to technology is only useful if people don’t create many redundant or low-value applications. Situations might also occur where people create temporary applications for proof-of-concept purposes. These apps can clutter an environment if they are not cleaned up. Within the COE Starter Kit, app makers can be prompted to attest their application to ensure that it addresses business justification requirements. If the application doesn’t address these requirements, makers can have their application removed from the environment.

    COE development compliance center
    COE development compliance center

    App Catalog

    The App Catalog application acts as a catalog that helps with discoverability of apps. Users can explore featured apps and browse apps by category. The app catalog can be a great entry point to launch apps for end users and makers can explore to see if an application already exists before they create another app that provides similar functionality. An Admin decides which apps are featured in the App Catalog by completing the App Audit process. After an app has been approved by the App Audit process, these apps can be featured in the app catalog.

    Set Owner

    Administrating access to applications can be done by the Owner of the application. However, circumstances might occur where you want an administrator to provide access. By using the Set Owner app, you can allow for this situation by selecting an app, adding users, and then indicating whether they should be able to view the app or edit the app.

    COE email

    Welcome email to new makers

    Power Apps and Power Automate can be discovered virally within an organization’s tenant through the Office 365 portal. Makers might be confused about whether they are allowed to use these tools or not.

    Detecting when a maker has created their first app or flow and sending them some useful information to accelerate their journey will immediately imply that these tools are the ones that they are permitted to use. Now, they will have a list of resources that can ease their transition into using these tools.

    Set app owner
  • Creating a Breakout Room in Microsoft Teams

    Creating a Breakout Room in Microsoft Teams

    Breakout rooms are functionality that Microsoft has announced will be add to Teams by the end of 2020.

    What is a Breakout Room?

    Breakout Rooms and Breakout sessions allow members of large meeting to be broken into smaller groups. A great use-case for would be a training session (where you could divide the the audience in into smaller teams to work on an exercise)

    Breakout Rooms could also be used for planning workshops, requirements gathering, org-wide training, etc.

    Creating a Breakout Room

    1. Create your team

    If you are reading this, we’ll make the assumption that you know how to create a team

    2. Add a channel for each Microsoft Teams Breakout Room (once again, we assume that you know how to create a channel)

    Give each channel a relevant name to correspond to your Breakout groups. This could be subject-related or simply numbered so that you can let your attendees know which Breakout group they need to be joining. 

    At this point, you can choose to allow all the members of your main Teams team access to every channel / Breakout group, or you can choose the “Private –  Accessible only to a specific group of people with the team“. It depends on how much you want to control your audience’s ability to join each Breakout room and your particular use-case as to which option works best for you. Sometimes locking it down in this way can help remove the confusion of the audience knowing which Breakout meeting they are supposed to join as they will only be able to see the one they can access.

    You should then have your Team with the correct number of Channels to match how many breakout groups you need; in this example, we have 3.

    Step 3:  Start your Main meeting from the Team

    The main meeting can be started from the General channel of the Team, in the normal way.

    This could either be a scheduled call or a Meet now call. Both can be initiated by selecting the camera icon below the new conversation box:

    Start the meeting, from this point onwards, even when you start going into the Breakout sessions via the Channels, do not close the meeting until the entire session is over.

    If you navigate back to the Team by clicking on ‘Teams’ in the left-hand panel, you will see a camera icon next to the General tab and the meeting in the Conversation feed, indicating the main meeting is underway.

    At this stage, you could also start the Breakout channel meetings so you are ready for the Breakout sessions to start, or you can wait until they are needed during your session. 

    Step 4: Creating each Breakout Room meeting

    Once you are ready to open the breakout rooms, navigate to each of the channels in turn, by clicking ‘Teams’ on the right hand panel, selecting your team and then selecting the chanel. Using the ‘Meet Now’ Option in each channels conversation feed, start a meeting for each one. Remember to keep the main meeting open as you do this (don’t press the red button to close the meetings now until your whole session is over.)

    Each time you open a new meeting, you will need to navigate back to the main Team and select the next channel to open the next one. 

    Finally, as you navigate back to the Team you will notice that each channel now has a camera icon next to it, and that you have a list of meetings in the top left showing that some are on hold and you are in one of them.

    If you now select the play button next to the “General” meeting and select the meeting preview to go full screen, you will be back in the main General meeting and are now ready to go. 

    You will also notice that from this main meeting, you can see each of your other meetings on hold. You can visit each one as and when you want to, simply by clicking the triangle play button. You can drop in and out as often as you wish.

    Step 5: Breakout work and back to Main Meeting

    Now instruct your students or attendees to go and join the meeting in their relevant channel (allocated breakout session) in this team. To do this they can navigate to the channel via the left-hand panel by clicking ‘Teams’, select the Team, click on the Breakout room / Teams Channel you have allocated or instructed them to go to. Then they should be able to join the meeting by clicking ‘Join’ button in the conversation feed:

    As the Breakout sessions and group collaboration progress in each of the Channel meeting rooms, you as the person running the session can jump between each meeting to help out and check on progress simply by clicking the triangle play button on each meeting bar in turn.

    Once the Breakout sessions are complete, you can ask your attendees to leave their Breakout meetings by clicking the red hangup button in the meeting and to rejoin the main meeting in the General Channel. It’s best to Instruct them all that if they lose the meeting they can easily get back to it by going to the General Channel and clicking on ‘Join meeting’.

    Here is a great you tube video from a well known Microsoft expert called Kevin Stratvert, demonstrating how to to do this, I hope this helps:https://www.youtube.com/embed/d_iD5PLgr08?rel=0&modestbranding=0&controls=1&showinfo=1&fs=1&wmode=transparent

    There we have it, Breakout rooms in a Teams Meeting using the standard functionality.

    Microsoft are working on more Breakout room-specific functionality, although it is not clear yet on when that will be available.  Take a look at this user voice  – https://microsoftteams.uservoice.com/forums/555103-public/suggestions/35000044-introduce-breakout-room-functionality

    Hopefully, we will soon be able to update this post with a more structured way of achieving this, in the meantime, I hope this can help you.

  • Create a PnP template from a Microsoft Team

    Create a PnP template from a Microsoft Team

    What if you could extract Microsoft Teams team similar to SharePoint sites? Well, with the September 2020 release of the PnP Sites core nuget package it is now possible to extract a Microsoft Teams team as a PnP template.

    This is super awesome great news for folks who want use a templated experience to provision teams in the tenant or even across tenants.

    With this release, we will be able to export a Microsoft Teams team and its associated artefacts such as its settings (like discovery settings, guest settings, fun settings, members settings and messaging settings), team owners and members, team channels with their tabs configuration, apps installed in the particular team and even the team messages.

    So, how do you do that ? You can use your favourite PnP PowerShell or use the PnP Site core nuget package for C# implementation.

    To extract a Team using PnP PowerShell, you need to know the SharePoint URL of the Team.

    You can find that out if you go to your Teams > General channel > Files tab and then click Open in SharePoint. The URL would be something like (https://your-tenant.sharepoint.com/sites/HRTeam).

    Once you know the URL of the site, you should create a JSON file as below:https://d-35078493753717980787.ampproject.net/2009112034002/frame.html

    In the above JSON, if you set includeMessages attribute to true, it will also extract Teams messages but will slow down the extraction if there are a lot of messages. This doesn’t work in app-only scenarios.

    Also, you can set the includeGroupId attribute to true if you want to re-use the GroupId somewhere else in the provisioning process or store it for other purposes.

    After creating the JSON file, open PnP PowerShell and execute the following commands. You need to be a very privileged user (mostly a Global admin) to execute these commands.
    https://d-35078493753717980787.ampproject.net/2009112034002/frame.html


    In the above commands, we are using a fantastic PnP PowerShell capability to create an Azure AD app with App-only permissions. This will also create a certificate and upload it in the app for you to use later on to connect to SharePoint and Graph.

    To do similar thing in CSOM C#, you can do that as below:
    https://d-35078493753717980787.ampproject.net/2009112034002/frame.html

    Using this approach, you can extract a Microsoft Teams team and save it as a template which you can then edit and modify as per your requirement.

    Now that you have extracted the template, modify it if you want to change some stuff in the template. You can then apply it using the Apply-PnPTenantTemplate command or the equivalent in CSOM C# which is tenant.ApplyTenantTemplate() method. You can read more about if you want to in my blog here.

    End result if all goes well, will be a Teams PnP Template somewhat similar as mentioned below:

    PS:

    1) You need to use the latest version ( September 2020 or later) of PnP PowerShell and PnP Sites core to extract MS Teams team as template.

    2) There seems to be some issue with the engine with regards to extracting some teams settings but you can modify them after extraction manually.

    3) There is also another attribute, includeAllTeams ,in the schema which if you specify to true will extract all the Teams in the tenant. This is a very time consuming process, so be careful before setting that. By default, it is false.

    4) If you want to extract multiple teams, then just add those team’s SharePoint URLs in the teamSiteUrls attribute separated by comma as below:

    "teamSiteUrls": ["https://<tenant>.sharepoint.com/sites/HRTeam","https://<tenant>.sharepoint.com/sites/ITTeam","https://<tenant>.sharepoint.com/sites/PRTeam"],

    This will extract the multiple teams in the same template.

    5) IMHO, this a great way to extract teams and store the templates so that we can provision them subsequently in a standard manner as per organization’s policies and standards. Also, helpful to store them in repository for maintainance and versioning purposes.

    6) Also, quite handy if you already have a webjob , azure functions which are triggered from SPFx or Flow or PowerApps for SharePoint sites provisioning which you can then extend it for teams with some changes. In these scenarios, be careful about the credentials, would suggest that you store them securely in Key Vault or encrypted database.

    7) In case daemon applications which won’t have popups for admin consent. you would need to use certificate authentication. For that, you can use Initialize-PnPPowerShellAuthentication command to create and upload the certificate. If you already have an Azure AD app with necessary permissions and certificates, you can use the Certificate and Thumbprint parameters in Connect-PnPOnline command.

    8) Now you might be wondering, how can I combine this with my SharePoint site collection which also has its own customizations like lists, content types etc. ?

    Well you can extract the SharePoint site collection separately using the Get-PnPProvisioningTemplate and then create a combined template by using the PnP Sequence elements. You can read more about this in this excellent blog written by Paolo Pialorsi . This will provision the Microsoft Teams and SharePoint site collection at once with all your customizations in place.

    9) Also, if you using App-only authentication to apply the teams template, you will not be able to post messages as that capability is not available AFAIK via Graph API which is used by the provisioning engine.

    PPS:

    This capability is extremely useful for creating Teams in a templated manner. But it is also a major concern as well now because admins will be able to extract and read teams messages (think Snowden, WikiLeaks etc.), so be very very careful with who has access to this capability. Very important to store these in a secure manner in your version control system.

    References –

    1) Initialize-PnPPowerShellAuthentication

    2) Get-PnPTenantTemplate

    Links –

    1. PnP PowerShell –PnP September 2020 Release

    2. PnP Sites Core nuget packge – SharePointPnPCoreOnline

    3. PnP Schema – Configuring the PnP Provisioning Engine

  • Some best practice tips for Power Automate

    Some best practice tips for Power Automate

    Best practices for Production flows

    Over the years, we’ve introduced a number of features for ALM (administration & lifecycle management) for flows in Power Automate. But, as they say, the shoemaker’s children always go barefoot. Our team has a number of flows that we rely on internally for day-to-day operations, but they were scattered about with little central management or oversight. It took some changes from our own Power Platform admins (yes, we have admins too!) to encourage us to get our house in order. Here’s what we learned in the process.

    Use a production environment

    That doesn’t mean stop using Preview! The Preview region is a great place to try new features and hone your skills. But once a team flow reaches a level where people are relying on it, we recommend exporting and importing it into a production environment in order to benefit from the added robustness.

    Add redundant owners

    If you have a flow which is used by your entire team, you don’t want people calling you up while you’re on vacation if it breaks. Make sure you add a couple co-owners so that they can update the flow in your absence. Who you add depends on how the flow is used. Probably at least your direct manager who can act as your proxy. Maybe your manager’s manager if all of their reports are relying on it. If your group is large enough and/or if you have a lot of team flows, you may consider creating a Security Group of 2-3 people who are willing to set aside a small amount of time to keep an eye on all the team flows. Don’t add your entire org as a co-owner though; that just invites more people to mess up the flow.

    Also keep in mind that the access applies to not just the flows themselves but to the connections they use. For example, if your flow sends mail from a shared mailbox, make sure that the co-owners have access to that mailbox in case they need to recreate the connection while you’re gone.

    Use solutions

    Solutions are a great way to organize flows so that they don’t end up in a big long list. You’ll need to start by adding (or asking your admin to add) a Common Data Service database to your environment. After that’s done, you can go to the Solutions tab to create a new solution for your team, or you can create multiple solutions if you have a lot of flows that you’d like to further organize. There are a number of other benefits too, such as native storage for your data, child flows to reuse functionality, and solution export as backup. There are also some known limitations to solutions though, so this may not apply to all of your flows.

    Mark it as prod

    Solutions are the recommended way to organize flows. But sometimes your flow can’t go in a solution, or sometimes your solution will get crowded with other drafts and proofs of concept. Either way, we recommend prefixing the names of your production flows with “[PROD]” so that co-owners know to leave it be unless it has issues.

    Use shared senders

    Sending messages from Power Automate as yourself is fine for smaller cases, but as the process gets more formalized we recommend changing it to a shared sender. This helps the recipients know that it was sent via automation rather than as personal nag. It has the added benefit that people won’t try to bug you directly in response to something that’s meant to be purely informational. For the Microsoft Teams connector, we have a few “Post as the Flow bot” actions that are well suited to this. Outlook has “Send an email from a shared mailbox”, though you’ll need to bring your own mailbox. This advice also applies to updating tickets, creating records, etc., but the specifics will vary by connector.

    Add a signature

    When using automation to send emails and post messages, you want people to know where it’s coming from. This may seem somewhat contradictory to the last one, but it’s really complementary. The shared mailbox helps the recipient identify that the message is not coming from you directly. But there are cases where the automation might break or start triggering too quickly, in which case you should be easily reachable to correct the problem. This is especially important if the automation works with people outside your org or external systems where the recipient may not be aware of your flow. People may even want to contact you to suggest ways to make your flow even better! We use a signature like “Sent with Power Automate. Contact <your email> with questions.” You may also find it helpful to link to the specific flow so that you can find it quickly if someone forwards you the email.

    Opt-in to notifications

    Notifications are one of the most popular uses of Power Automate. Maybe you want to get an email when someone uploads a new file to SharePoint or posts a new response in Microsoft Forms. Maybe you want to get a weekly status report of work items in Azure DevOps or charts in Power BI. One of most common types of internal flows was daily or weekly reports of SLAs, errors, and usage metrics from Azure Data Explorer, sent to individuals and teams. These types of flows are great for a number of scenarios. But keep in mind that not everyone is as excited to get yet another email as you are. These often quickly end up as Outlook filters, and suddenly you’re using up flow runs emailing no one. Before adding a distribution list to an automated email, we recommend making sure that the information is either need-to-know, or that the distribution list allows users to individually remove (and add) themselves. If you find yourself checking these metrics on an ad hoc basis rather than as they come in, the data may be better off in a dashboard (e.g. Power BI or Azure DevOps) so that it’s available on demand.

    In closing

    ALM is a problem that every organization has to deal with, even our own. So hopefully these tips help you more effectively manage your team flows. Any other suggestions from our Power Users out there? Any remaining questions or pain points? Let us know in the comments!

  • Use Power Automate to deploy a SharePoint site and lists

    Use Power Automate to deploy a SharePoint site and lists

    Back in the day, you could save a SharePoint site as a template (or solution) and deploy it elsewhere. Nowadays, it’s not quite so easy.

    In this post, we’ll show you how to use Power Automate to make a REST API call and create a site and add a new list. This a great way for admins to manage request for new sites.

    The master list

    First of all, create list in a team site. This list will be used to trigger the flow and create the site and list.

    The flow

    Next, create a flow from the Automate button. The trigger will be ‘Complete a custom action for the selected item’

    Then initialise a variable, like so

    Next, we’ll make an API call to SharePoint and create our new site

    Here’s the header and body code for you to copy:

    {
      "Accept": "application/json;odata=verbose",
      "Content-Type": "application/json;odata=verbose;charset=utf-8"
    }
    {
    "request": {
      "__metadata": { "type": "Microsoft.SharePoint.Portal.SPSiteCreationRequest"},
    "WebTemplate": "STS#3",
    "Title": "@{body('Get_item')['Title']}",
    "Url": "@{variables('SiteURL')}",
    "Description": "@{outputs('Get_item')?['body/Description']}",
    "Classification": "",
    "SiteDesignId": "00000000-0000-0000-0000-000000000000",
    "Lcid": 1033,
    "ShareByEmailEnabled": false,
    "WebTemplateExtensionId": "00000000-0000-0000-0000-000000000000",
    "Owner": "i:0#.f|membership|you@yourdomain.com",
    "HubSiteId": "00000000-0000-0000-0000-000000000000"
    }
    }
    
    #Be sure to change the email address for "Owner"

    Creating the list

    The first step is to create the list. This can be done by inserting a SharePoint HTTP Request Action in your Flow and setting it up like so:

    Figure 1 – Create List Action in Power Automate

    You’ll want to update the Title and Description properties and fill those in with the name and description of your list. The “BaseTemplate” property is what determines the type of list you’re creating. 100 is a blank list and 101 is a document library.

    Creating Fields in the List

    Once you create the list you need to add additional SharePoint HTTP Actions to create each field that you need to add in the list. That action will look like this:

    Figure 2 – Create Field Action in Power Automate

    In the URI input you’ll want to make sure you replace the “getbytitle(‘Name of your list’) with the name of the list you want to add your field to. The body of the action will vary based on the type of field you want to create. For quick reference, I have provided a table with the most common column types and the associated body code needed for the Power Automate action below:

    Column TypePower Automate Code
    Single Line of Text{
    ‘__metadata’: {‘type’:’SP.FieldText’, ‘addToDefaultView’: ‘true’ },
    ‘FieldTypeKind’: 2,
    ‘Title’: ‘Name of Single Line of Text Field’
    }
    Multi Line of Text{
    ‘__metadata’: {‘type’:’SP.Field’, ‘addToDefaultView’: ‘true’ },
    ‘FieldTypeKind’: 3,
    ‘Title’: ‘Name of Multi Line of Text Field’
    }
    DateTime{
    ‘__metadata’: {‘type’:’SP.FieldDateTime’, ‘addToDefaultView’: ‘true’ },
    ‘FieldTypeKind’: 4,
    ‘Title’: ‘Name of DateTime Field’,
    ‘DisplayFormat’: 0
    }
    Boolean (Yes/No){
    ‘__metadata’: {‘type’:’SP.Field’, ‘addToDefaultView’: ‘true’ },
    ‘FieldTypeKind’: 8,
    ‘Title’: ‘Name of Yes No Field’
    }
    Choice{ ‘__metadata’:
    { ‘type’: ‘SP.FieldChoice’, ‘addToDefaultView’: ‘true’ },
    ‘Title’: ‘Name of Choice Field’,
    ‘FieldTypeKind’: 6,
    ‘Required’: ‘true’,
    ‘Choices’: { ‘results’: [‘Choice 1’, ‘Choice 2’, ‘Choice 3’ ] }
    }
    Hyperlink{
    ‘__metadata’: {‘type’:’SP.Field’, ‘addToDefaultView’: ‘true’ },
    ‘FieldTypeKind’: 11,
    ‘Title’: ‘Name of Hyperlink Field’
    }
    Number{
    ‘__metadata’: {‘type’:’SP.FieldNumber’},
    ‘FieldTypeKind’: 1,
    ‘Title’: ‘Name of Number Field’
    }
    Person/Group{
    ‘__metadata’: {‘type’:’SP.Field’, ‘addToDefaultView’: ‘true’ },
    ‘FieldTypeKind’: 20,
    ‘Title’: ‘Name of Person or Group Field’
    }

    Figure 3 – SharePoint REST API Column Types

    Add the Columns to the Default View

    This next step is optional. If you want to make sure that the fields you just created show up in the default view of the list then you need to perform a couple more actions in your Flow. First, you’ll need an initialize variable action which will store an array of all of the column names you want to add like so:

    Figure 4 – Configure the Column Names Variable

    Once you have that, you need an Apply to Each action and within that you’ll make one final SharePoint HTTP action which will take those columns and add them to the default view like so:

    Figure 5 – Add the Columns to the View
  • Employee recruitment and on-boarding with Office 365 and Power Platform – Pt 1

    Employee recruitment and on-boarding with Office 365 and Power Platform – Pt 1

    In the series of posts, we are going to look at how you can utilise the suite of Office 365 and Power Platform products to automate the recruitment and onboarding of new employees. We will use (among other things) SharePoint Online, Microsoft Teams, PowerApps, Power Automate, Word, Outlook and Power BI.

    We’ll also apply some JSON to format columns and create adaptive cards

    The scenario

    In this scenario, we will start with a request to recruit a new employee, which will then go through an approval process and trigger a series of actions within Power Automate flows.

    During this series, we’ll also create a Microsoft Team to store all details of applications and supporting documents (resumes, cover letters, etc.)

    Request to recruit

    To begin with, we’ll create a SharePoint team site (mine is called People Culture Team). In this site, we’ll create list (mine is called Recruitment Requests). My list has the following columns:

    NameType of column
    TitleSingle line of text
    Type of requestChoice
    (choices are ‘backfill’ & ‘new position’
    Position TitleSingle line of text
    New Position JustificationMultiple lines of text
    Previous Incumbent NameSingle line of text
    Previous Incumbent Reason For LeavingChoice
    (choices are ‘Internal Transfer’ & ‘Termination (including resignation’
    Covered By BudgetYes/No
    Request LocationChoice (for this example, you only need to have two or three choice. In real-life/larger company, you may prefer a lookup column)
    Reports ToPerson or Group
    Reports To PositionSingle line of text
    Employment TypeChoice (My choices are ‘Full-time’, ‘Part-time’, ‘Casual’ & ‘Fixed-term contract’
    Recruitment MethodChoice (My choices are ‘External’ & ‘Internal’)
    Commencement DateDate and time (Date only)
    Position Description AttachedYes/No
    Base SalaryCurrency
    SuperCurrency (might not apply to any readers outside of Australia)
    Mobile AllowanceCurrency
    Laptop AllowanceCurrency
    Link To RequestSingle line of text (we will use JSON to format this column in a later post)
    P&C ApproverPerson or group
    P&C OutcomeSingle line of text
    P&C CommentsMultiple lines of text
    SLT ApproverPerson or group
    SLT OutcomeSingle line of text
    SLT CommentsMultiple lines of text
    GM ApproverPerson or group
    GM OutcomeSingle line of text
    GM CommentsMultiple lines of text

    If you don’t want to manually create this list, here’s a flow I created for you. You just need to change the URL to one that sits inside your tenant, e.g. https://yourtenant.sharepoint.com/sites/peoplecultureteam, and run the flow.