Skip to main content

An intro to conditional validation and formatting in PowerApps (using SharePoint as a data source)


The Problem

What if we need to create a form that changes it's behaviour based on the answer entered by the user.

For example, we need to build a leave request form that:
  • Shows the comment field if applying for a sick leave, but hides the comment field if applying for a annual leave
  • Requires the requestor to write a comment if their sick leave is more than 1 day, but is optional if sick for just 1 day. 
The default form interface for custom lists in SharePoint Online can be used for basic scenarios, but doesn't provide an easy way to add business logic described above (unless you want to write some javascript)

In the past InfoPath would have been the tool of choice for many, however this tool is now in maintenance mode and whilst it will still be supported for a wee while there will be no improvements or enhancements to the platform.

The Solution

This is where PowerApps come in. PowerApps is now the platform that is recommended by Microsoft as a way for business users to create business forms/applications on top of SharePoint (or other data sources).

PowerApps provides us with the ability to define business rules against controls in the form by using formulas not too dissimilar to excel formulas.

The Steps

The steps in this blog are also shown in the video below

The steps below shows a sample scenario of a leave request form
  1. In SharePoint Online, create a custom list called Leave Request
  2. Setup the following columns in the custom list
    1. Leave Type (Choice)
    2. Number of days (Number)
    3. Description (Multiple lines of text)
  3. Create a new PowerApp to automatically generate a default app
  4. Click on the editable form page
  5. Click on the description control, and select advanced options on the right hand panel
  6. Unlock the advanced properties
  7. Click on the Leave Type control and note the value in the Update property.

    We will use this value in our formula to look at the value of the leave type selected by the user.
  8. Click on the Description control again and set the formula in the visible property to If(DataCardValue6.Selected.Value = "Sick Leave",true)
    This will  display the Description control if the Leave Type is equal to Sick Leave.

  9. Click on the Number of days control and note the value in the Update property.

    We will use this value in our formula to look at the number of days entered by the user
  10. Click on the Description control again and set the formula of the required property to If(Value(DataCardValue7.Text) > 1,true)

    This will make the the Description control mandatory if  the number of days entered is more than 1.

Testing the app

Click the play button on the top right to test out your app. You should see the following results
  • Select Annual Leave and see the description control disappear
  • Select Sick Leave and see the description control appear
  • Enter 1 into the Number of days and see that the description control is optional
  • Enter 2 into the Number of days and see that the description control is mandatory

Next Steps

  • Have you created business forms using PowerApps? Please share your experience below.
  • Check out the formula reference from the PowerApps site for more information on writing formulas

Popular posts from this blog

Access Web App | Filter a view by current user login (deprecated)

Update (April 1 2017): Microsoft has released an update that willl stop the creation of new apps starting June 2017, and shut down any remaining apps by April 2018. See more here

The problem One of the things I needed to do lately was see if a view within Access Web Apps can be configured to filter data that is related to the logged in user. e.g. as a user I want to be able to view a list of projects where I had been assigned as the project owner.

In SharePoint, this would have been quite easy to achieve as we can create a view and set the filter to {column name} is equal to [me].

Unfortunately Access Web Apps does not quite work this way:

No people picker control in Access Web Apps - this means we need to store and manage our own list of user data within a table in your Access Web App Database (or find a way to link a table with SharePoint's user profile or hidden user information list).Access Web Apps is a relational database - this means the approach to filtering a table view is…

Nintex Workflow | parsing JSON responses from json-only web requests

Update 03/08/16:
Logic Apps has gone GA, and has undergone a major v2 change since this post was written. For the most part, the core actions remain the same but just renamed or work a little differently e.g. http listener (now known as "When an http request is received" + "Received") and conditions (now triggered via the add a condition" button instead of being configured inside the http action.)

It is worth noting that the BizTalk JSON Encoder API app can no longer be found in the marketplace. This is now a native function in Logic Apps. Though, I'll try to refresh this post with the how to do it in the version of Logic Apps that GA'd, I'm not sure when I will have to do it, so if you can't wait, I suggest looking at the xml function can be found here.

Update 07/08/16:
Steps for new Logic App UI that has GA have been added into the solution section below.
The problem
One of the things I have been working on lately in the Nintex Workflow world,…