The Front-End

Introduction

I prefer using PowerApps over SharePoint list forms or Microsoft Forms because it looks cleaner, you can enforce data types, use lookup columns, hide/show/require fields based on a condition, and provide a mobile app to managers to access their forms on the go. I prefer to use a single consolidated Power App titled "Manager Forms" for my users so they have a one stop shop, this isn't required but I find it helps users submit the right forms when the context of the other forms are laid out in front of them.

The Power App

Screens

There are as many screens as there are forms + 2 on my PowerApp. The 2 extra screens are the Main screen and the Success screen. The Main screen is the main menu that links you to other forms. The Success screen is a confirmation that your form was submitted successfully, resets the present form for a new submission, and loops back to the main screen. The rest of the screens are PowerApp forms that output to their corresponding SharePoint lists.

Form Elements

The basic form elements are text, multiline text, true false, and date input fields that do not have any validation except potentially being a required field.

There are also choice selectors, people pickers for selecting Office 365 user objects, and lookup choice selectors for referencing data in other SharePoint lists all with options for multiple selection. The input and multiple selection options for lookup and choice selectors are controlled from the associated SharePoint list. People picker input options are populated via the Office 365 user directory with non-guest accounts, the number of users selected is controlled from the SharePoint list column settings.

Custom Names, Visibility, Required Fields, and Title Columns

To alter any advanced form element properties you will first need to unlock it which can be done by clicking on the datacard and then clicking "Unlock to change properties"

You may want some form elements to have a display name that doesn't match the name of the SharePoint list column. This can be overwritten with a custom value using the “DisplayName” property.

Some form elements may only be visible if certain conditions based on other fields are met, like the ADP ID element only showing if a job title that uses ADP cards is selected. This same method can be used to set a field as required, this can be useful for scenarios like if the job title has needs an ADP card require the user to enter an ADP card number to let HR know to activate it in ADP and let IT know to give it access in our door access system.

The visibility property of an element will be set via a true false element elsewhere in the form or via a lookup. Here is an example formula of looking up if a job title requires an ADP card

“Lookup('Job Titles',Title=JobTitleDataCardValue.Selected.Value,'ADP ID')”

The lookup statement starts by declaring what list to reference, then what condition to return a value on, in this case where Title is equal to JobTitleDataCard.Value, and then returning the value of ADP ID for that object.

SharePoint has a default field “Title” that is a single line of text. The name of the column can be changed from Title to something else, however the name is not updated in the backend making it harder to reference in a Power App or script. I set the output of a form to automatically concatenate values based on the input of other fields:

“Concatenate(FirstNameDataCard.Text," ",LastNameDataCard.Text," ", Text(StartDate.SelectedDate))”

In this case the title field is a combination of a new hire’s first name, last name, and their start date. I usually hide this column from the PowerApp as it should be automatically set except in lists like 'Job Titles' where the job title is the identifying value for that entry in the list.

Permissions

Permissions are controlled on the Power App from the PowerApps share menu, I grant my fellow IT folk edit access and a group of hiring managers user access (we have a MS Teams team for hiring managers and I just use that group, you may need to make an azure ad group to grant access) .