Category Archives: PowerApps

PowerApps–Links to Apps and Screens

Last week at SharePoint Fest DC (#SPFestDC) I had a question in one of my sessions that I didn’t know the answer to at the time and wanted to follow up on:
“Can you link to a specific screen on a PowerApp?”

Doing a little search I quickly found the answer HERE in the General Discussion Community Boards.

Background: Link Basics

There are a number of ways to get access to a PowerApp via a URL link. They all by default will land the user on the default start screen for the app.

From SharePoint, PowerApps apps created from and linked to a list are displayed in the Views dropdown.
image

These links take you to an app ‘launch screen’ for PowerApps. Where you need to click again to get to the app.
image

Clicking on ‘Open’ launches the PowerApp in the browser window on a new tab.

Note: ONLY apps created from the SharePoint interface will show up in the views drop down. If you create other apps starting from the PowerApps interface – either from blank, or from data – they will NOT show up in the views drop down for the list even if they use the list as the data source for the app.

From PowerApps, when clicking on the app ‘info’ icon you access the app detail page and can get access to a URL directly to your app.
image
Using the 3rd icon… the ’i’.

PowerAppDetailsPage

So, the link looks something like this:
https://web.powerapps.com/apps/[GUID]

This link opens the PowerApps app directly in the browser – so something you could add to a SharePoint page if you wanted users to have more direct access to the app from anywhere.
Note: If you provide a direct link consider who has access to the app (Sharing) and the data (SharePoint list, or other data source). Providing a link to someone that doesn’t have the access they need could be irritating for users.

Link to Screen

The concept seems simple.

  1. Add a parameter to the app URL
  2. Add logic in the app to grab the parameter value and determine which screen to navigate to

Using the web.powerapps.com link shown above I added a new menu item to my SharePoint menu:
image
This links directly to the app and the default screen.

Then added the parameter to the string for a second link:
image
This links to the specific screen (after the formula below is also added)

In the PowerApp, set the OnStart formula to something like the following:

Set(startScreen,Param(“screenid”));If(startScreen=”2″, Navigate(BrowseRankingScreen,ScreenTransition.None),Navigate(BrowseScreen1,ScreenTransition.None))

This is essentially two lines of ‘code’:

  1. Set(startScreen,Param(“screenid”));
    Param grabs the parameter passed in by the URL string and sets it to the ‘startScreen’ variable within the PowerApp
  2. If(startScreen=”2″, Navigate(BrowseRankingScreen,ScreenTransition.None),Navigate(BrowseScreen1,ScreenTransition.None))
    This references the ‘startScreen’ parameter to determine which screen should be displayed. This particular example is ‘one or the other’ – defaulting to the normal start screen if a parameter is not passed in. You could use a variation of the formula to essentially do a ‘switch’ or multiple ‘ifs’ if you wanted options for a bunch of different start screens.

Once the pieces are all in place, you have the option of linking directly to a specific page in a PowerApp app from SharePoint or anywhere else an HTML/URL link is allowed.

Notes:

  • Be sure that any screen you are choosing to start from will work when directly navigating to it. Depending on how the app was built the screen may normally require data or settings from other screens to work correctly – as when a record selection has been made before coming to a detail screen.
  • There were references to the parameter only working with and/or forcing the parameter name to lower case. I have not verified if this is still the case.
  • There were also reports of caching issues so you may need to try a few times to get the links working properly. Kind of irritating, but it eventually worked.
  • Be aware of the parameter type/value being used. In the example above we used: ?screenid=2 which actually passed in a *string* value of “2”. This required the formula to use the string version as well: startScreen=”2” (correct) instead of startScreen=2 (incorrect). Easy mistake to make and the difference between your formula working or not. If you choose to pass in a non-numeric string it might make readability better down the road: ?screen=thisscreen. 

References

PowerApps and SharePoint–Top X Wish List

Someone told me that it’s a good idea to always have a ‘top X’ things you’d fix, add, or change in a product. I first posted my PowerApps and SharePoint wish list about a year ago.
Top X Things Needed to Make PowerApps Awesome for SharePoint 

Since last time

  • Embedded forms have been introduced.
  • SharePoint Online now supports customizing SharePoint list forms by using PowerApps. It’s a pretty awesome improvement. Still a ‘step one’, but a pretty huge step.
  • The other two things I mentioned are still on the list and reframed a bit below.

The New List

  1. Full fidelity for complex field types – The more I use PowerApps, the more I want to be able to use the SharePoint column types that we’re using in many of our lists. Namely Option columns and Lookup columns. At the moment there are stumbling blocks in PowerApps when using these fields and things like GroupBy. PowerApps just doesn’t recognize the data in the way we need it to… yet.
    True, there are work-arounds for some use-cases, but the fewer of these we need to deal with going forward, the better. Because this actually hampers some development I’ve moved it to the top of my list.
  2. PowerApps Web Part – In order for users to have a good experience when in SharePoint and using PowerApps, it’s got to be smooth. Right now it’s still very ‘jerky’ when in SharePoint and opening an app… “hold on while we load up this other thing…”.
    As I stated in the original post, this is critical for SharePoint ‘view’ replacements.
    Yes, we have iframes as a work around. That’s ‘OK’ but just now how smoothly integrated it should be in my opinion.
  3. When creating an app from the SharePoint interface give us layout options rather than defaulting to the phone layout. Definitely realize this was a ‘first step’ and are grateful for it, but time to take the next step. This will also be a big deal once a PowerApps web part (see #1) is ready.
    Workaround: Yes, you can do this when starting from scratch in PowerApps, but you lose out on the gains of using the wizard.
  4. From SharePoint: Create an app from a SharePoint view.
  5. From PowerApps: Create an app from a SharePoint view. Seems like these would be the same thing, but because it’s actually the integration of two products there’s work that needs to be done on both sides for this to work. When choosing a data source it currently gets you down to the list level – ‘just’ need to extend one more level down to selecting a view. (I say ‘just’ but fully realize there’s a LOT of work behind the scenes to make this happen – keep it up engineers!!).

Other items

More things in no particular order:

  1. Keep improving PowerApps forms for SharePoint. Wizards, better UX, or whatever it takes to make this both easier for power users (non-dev). Great start – really, I don’t want to sound ungrateful – it’s awesome. Just keep improving on it. 
    1. Improve forms UX for (non-dev) power users.
    2. Make forms available for anonymous and external users. This works for SharePoint, but not the PowerApps forms quite yet (I assume this is at least in part because PowerApps itself is not available to non-tenant users).
  2. I don’t have a good name for this one, but essentially a ‘code view’ and search.
    Ex. When creating an app from SharePoint it creates a nice 3 screen app with a search baked in. If you delete the Search box, a number of other controls break because they have references to the Search control. It would be nice to have visibility within the PowerApps Studio to where formulas reference a control so makers can update references.
  3. PowerApps forms available in the SharePoint mobile app
  4. Responsive (Canvas) PowerApps. Sounds like the model-driven apps will be responsive. When will we get the same responsive options in SharePoint forms and canvas apps?

The list will continue to evolve…

PowerApps + SharePoint Drop Down Thoughts

This probably falls somewhere under app design, governance, and tips and tricks in the cross-over space between SharePoint and PowerApps.

When creating a list in SharePoint and needing a field with options in it, we need to decide between the relatively static ‘choice’ field with the options baked in to the control, and creating a Lookup control that pulls its options from another list. They both have their place. Choice fields tend to be a bit simpler while Lookups come with a little more overhead, but are good from a data perspective with consistency.

With the introduction of PowerApps and creating new design surfaces for your list data the Lookup option extends that consistency a bit further and may make you choose Lookups even more. When it comes to CRUD forms, both the Choice field and Lookup fields work great (way to go PowerApps and SharePoint teams!). Building other interfaces, however, may encourage SharePoint users to lean more on Lookups.

The Scenario

A default app created by the ‘Create an app’ option from SharePoint gives you a 3-page app that starts with a gallery view filtered by a Search control. I’d like to change the filtering of the page to be a drop down of a Status field. Two options we can use to accomplish this are to create a drop down with static options (like a the SharePoint Choice field) or to create a drop down connected to the same SharePoint list as the Lookup field.

image image

Option #1 – Static options

The initial reason I considered this was because I didn’t actually want to give (PowerApps) users *all* of the options that are available in a (SharePoint list) choice field. Using a static options control allowed me to just display the options I wanted them to see. This is easily implemented using the method covered in my last post – Simple Drop Down Options – and using values that exactly match your list field values.

One possible upside to this approach is that you could use different text or drop down options that might make sense to users but *don’t* match your list values and then use formulas to match your drop down control values to your list values. For example in the above image I have a number attached to each option in my dropdown which some folks might prefer to leave off: “Paid” instead of “5 – Paid”.

The downside of this approach is I now have one more place where I’m required to maintain the list of values. If I update the Choice field in my SharePoint list I might also need to update the drop down control in PowerApps.

Option #2 – Lookup field options

This seems like how the drop down control was intended to be used. Rather than having to manually add values you can simply connect the control to an existing SharePoint list and have the exact same values as the SharePoint list column.

1. Add an additional data source to your PowerApp
image

2. Add the Drop Down control and set the Items value. By default it’s already set to a sample data set.
3. Change the Items property to the new data source and field to display and boom. Done.
image

4. Switch to the Advanced properties for the drop down control and set a default value for it.

5. Finally, change the gallery control to use the new drop down as a filter instead of the Search box (key change is highlighted).

From: SortByColumns(Filter(‘Sponsors 2018 April’, StartsWith(Company, TextSearchBox1_1.Text)), “Company”, If(SortDescending1, Descending, Ascending))

To: SortByColumns(Filter(‘Sponsors 2018 April’, (Dropdown1.Selected.Value = Status.Value)), “Company”, If(SortDescending1, Descending, Ascending))

NOTE: When using this approach It is important to understand how Delegation works with PowerApps and SharePoint in order to ensure complete and correct data is being surfaced in PowerApps. See references below for more information.

The most notable upside to this approach is that both the PowerApps drop down control and the SharePoint list column are pulling their options from the same data source and changes to that one list will update both the SharePoint list options AND the PowerApp.

Finally, as was mentioned in Option 1 – if you don’t want to make all the options available in the drop down control you can still accomplish this here by filtering the list like this:
Items = Filter(StatusOpts, StartsWith(Title,”2″) || StartsWith(Title,”3″) || StartsWith(Title,”4″) || StartsWith(Title,”5″))

Conclusion

The added benefits of using a separate list in SharePoint as a lookup source (Option #2 above) for SharePoint list data *and* PowerApps controls seems the better option for longer-term management.

References

PowerApps – Simple Drop Down Options

I’ll just file this under ‘recommended documentation updates’.
(Which I submitted on the corresponding docs.microsoft.com page)

Playing around with some UX in PowerApps I wanted to add a drop down control with simple, static values in it and couldn’t find an example of how to do it on the Drop down control in PowerApps page where I’d expect to find it. What we’re talking about is the Items property and formula. After poking around a bit I found the example I needed in the Examples section of the List Box control page:

image

Yields the following:

image

Simple.

References

Spring and More, Conferences Galore!

As SharePoint and Office 365 continue to evolve, the SharePoint community seems to be as strong as ever. There are a bunch of conferences coming up over the next few months. Here are a few notable ones:

March 2-3 – North American Collaboration Summit – Branson, MO
Better hurry up if you want to make this one. There are a ton of great speakers in town for this one as it’s just before the MVP Summit in Redmond. So catch these folks while you can. It is a great value for your time and a nice little escape from Winter for a few days.
FYI – It *is* drivable from the Twin Cities – we’ve done it a few times. Smile
Discount Code: COLLABSUMMIT50

March 26-30 – SharePoint Fest – Washington DC
A quality SharePoint, Office 365, Azure, and Microsoft Teams event offered several times a year between DC, Seattle (August), and Chicago (December). These folks do a great job. They’ve been doing this ‘series’ for a few years and they just seem to get better. They’ve recently switched to a longer 5-day format that includes 2 days of workshops and 3 days of sessions. Be sure to check them out. I’ll be doing a workshop and 3 sessions at the DC event.
Discount Code: PrestonDC100

April 7 – SharePoint Saturday Omaha – Omaha, NE

April 14th – SharePoint Saturday Twin Cities – Minneapolis, MN
Back for our Spring event with registration just opening up today.
FREE

May 5 – SharePoint Saturday Chicago Suburbs – Chicago, IL

May 21-23 – SharePoint Conference North America – Las Vegas, NV
Note: This is NOT a Microsoft-run event like previous ‘SPC’ events, but it IS Microsoft sponsored, backed, and endorsed. There will be a LOT of product group folks attending and speaking in addition to plenty of community-recognized experts, MVPs, etc.
Discount Code: https://t.co/K9n43i1UOr

And of course there continue to be SharePoint Saturday (SPS) events throughout the US and the world. Please remember, not all SPS events are listed on the SPSEvents site – Including OURS – for a variety of reasons. So keep up to date with your local and regional groups so you don’t miss out on a great event!

So much information, so little time. Hope to cross paths with you at some of these!

SharePoint [Me] Filter in PowerApps

SharePoint has a couple of built-in filters for column values: [Today] and [Me]. These allow users to filter views by dynamic data. For example you can create a view called AssignedToMe and set a filter like so:

image

Using this approach site admins don’t need to create views specific to each user, but can use the [Me] filter on a single view that applies to each individual user. As a user visits the view, they see only the records that are specific to them.

How does one do this in PowerApps when filtering data? Good question. This came up during our Minnesota SharePoint User Group (MNSPUG) meeting today and good old Brian Caauwe knew the answer: rather than using [Me] we use the User function in PowerApps.

On a gallery or data table object, our Items property might have a formula something like this:

Items = Filter(‘IT Request’, AssignedTo.DisplayName=User().FullName)

Note: When bringing fields over from SharePoint, PowerApps translates the CreatedBy and ModifiedBy fields to something a little different. That might be a little confusing when getting started.

  • CreatedBy –> Author
  • ModifiedBy –> Editor

Good questions from the attendees today and good catch by Brian with the User() answer. Smile 

References

PowerApps: Rules for Conditional Formatting

Well done PowerApps team!! Just days before Ignite they rolled out Rules for Conditional Formatting in PowerApps. You could technically get the same functionality with building out formulas, but the new (experimental) rules bypass this and are MUCH more end-user friendly.

image 

Check out the blog post.

AND take a look at the supporting documentation that’s already released:
Create a rule in PowerApps

image

For those of us coming from a SharePoint background this is creeping closer to functionality that was available back in the days of SharePoint Designer. As soon as a true web part is available to embed a PowerApp in a SharePoint page (hopefully the new “modern” pages) users will be able to replace SharePoint views with robust apps that include conditional formatting and other goodies not currently available in SharePoint alone. 

Exciting stuff and more to come!!

SharePoint Fest – Chicago

Heading to SPFest Chicago in December? I’ll be presenting a few sessions on PowerApps.

PWR104 – PowerApps for SharePoint Users
PWR202 – From SharePoint to PowerApps: Evolution of the ‘Intake Form’ Solution
(Check out the sessions here)

There’s going to be a LOT of great speakers, sponsors, and content. Fresh out of Ignite there will be a lot to talk about.

Interested in attending? Here’s a discount code (click for registration):
SPFestChi17

Hope to see you there!!

Microsoft Ignite 2017 !!

UPDATE: They’ve managed to fix our session overlap – new location and time shown below!
UPDATE: Added links to the Tech Community Discussions for each session. Chime in! 

In a relatively late development, I’ll be attending and speaking at Ignite in Orlando this year! I wasn’t planning on either, so this is exciting. Working on both SharePoint and PowerApps, I’ve got one theater session and will be co-presenting with Cathy Dew on a full breakout session. Links and details below.

Microsoft Ignite in Orlando. Sept. 25 – 29th.

Evolution of the Intake Request Solution from SharePoint to PowerApps
OCCC South – Expo Theater #4
Wednesday @ 1:05 – 1:25
Tech Community Discussion <- Talk to us! 

w/Cathy Dew:
Create Custom forms and digital experiences in SharePoint using Microsoft PowerApps
OCCC W307
Thursday @12:30 – 1:45
Tech Community Discussion <- Talk to us! 

Yes, if you’re looking at the times the two sessions actually overlap right now (fixed!). We’re working on that. Smile with tongue out Worst case I leave Cathy’s session a little before we’re done and RUN to the other building. Let’s hope it doesn’t come to that. Either way we’ll make it work.

SUPER excited to be able to attend and contribute. Hope to see you there!

JS Link – No More HTML in Calculated Field Change

Didn’t see that coming.

More than a few times I’ve had folks bring up solutions using calculated fields to do some of the same things we do with Client-side rendering (CSR) and JS Link in SharePoint. That was fine at the time. Just another way to get to the solution using creative out of the box capabilities – until now.

Microsoft implemented a change yesterday (June 13, 2017) that HTML or script elements in calculated fields would be turned off. Apparently this was an ‘undocumented use’ of the feature. The system is now escaping special characters and replacing the column with a blank in the list view.

Now What?

The short answers – in no particular order:

  1. Client-side rendering via JS Link property of web parts. This only works for Classic mode. If you are using Classic mode, this is likely the ‘best’ short term answer to broken interfaces until a longer-term solution is implemented
  2. Third party products
  3. SPFx Extensions or customization
  4. PowerApps

CSR and JS Link: There are multiple ways to implement JS Link, some via the browser (how I use JS Link) and via deployed coded solutions (Dev only). As mentioned in other responses JS Link does NOT work in the modern experience. It will only work in the Classic mode (as long as it is around). There have been NO dates announced for getting rid of Classic mode at this time. If you choose this direction it’s worth noting that if you’re comfortable writing script in the calculated field you’ll likely be comfortable writing the code needed to get CSR to work. I’ve got plenty of examples in the link included here.

Third party products. I’ve seen folks mention something called Skybow but I’ve never seen or used it. Only mentioning because it was mentioned by someone in the community I trust.

SPFx Extensions and customizations: This is the ‘approved’ development path for deployed solutions. If you are a developer and/or are creating solutions that are used across a broader scope this is likely the path you should go down.

PowerApps: This is likely the long-term replacement for solutions you used HTML or other scripting in your calculated field for (hand slap from English teacher). Embedded integration with SharePoint isn’t there yet (well, it kind of is…), but has been announced. You can start building the views/solutions you need, but they won’t be ‘really’ embedded in SharePoint yet – web parts and/or other tools are coming soon (they’ve been announced).

Note: Much of the attention to PowerApps has been in the area of forms, but views will be a part of the capabilities as well. They’ve already made improvements with introduction of controls like the Data Table control. Check out my posts on PowerApps for SharePoint users, specifically things like ‘List View’ Layouts.

Update

Migration Note: Do not forget to take this into consideration now as something to look at when migrating from an environment where special characters (HTML and scripting) work into an environment (O365, etc.) where they do not. You’ll need a plan to replace or update your field customizations.

Summary

Unfortunately this seems like a pretty sudden change. I certainly had no idea it was coming. For folks that were using this approach there’s a lot of scrambling going on right now dealing with blank columns that weren’t blank a few days ago. Depending on how complex the scripting was, some fixes might be as easy as stripping the HTML and script out and displaying a simple value. More complex solutions are going to take some effort to redo, either with a new approach, new code, or 3rd party software to get the business functionality back.

For simple HTML replacement, JS Link could be an easy switch. If you’ve never used it before check out the Hello World post and then the KPI post. Those will cover a lot and introduce you to the JS Link concept if you need to dig deeper for more complex solutions.

Good luck!

References