cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
stapes
Post Prodigy
Post Prodigy

How to avoid a Kluge?

The App start code on one of my Apps is now 777 lines of Formatted code. Way too big to handle in the PowerApps studio editor. I usually cut & paste into a Notepad++ file, where I can get a better view. It allows me to format it as I like.

Is there any way I can put this bulky code somewhere else & just call it - like a function?

11 REPLIES 11
RandyHayes
Super User III
Super User III

@stapes 

My general rule is that, if your Formula spans more than one scroll worth of the formula editor, it is too long and needs to be refactored.  

While OnStart formulas are nice for putting a lot of "startup" things in to the app, they should be appropriate to starting up.  Anything beyond that should be separated out into its own control - this is similar to the "function" concept you refer to.  Although, as PowerApps is a NO code platform, it has no real concept of user functions, you can simulate this with clear and comprehensive controls that perform what is needed.  This concept works well and it resolves (for me) the principle of never repeating a formula.

 

So, direct answer to your question - no there are no user functions in PowerApps like you would have in an actual development environment (as it's not), but you can easily simulate this concept.  

Beyond that....refactor your Formula!

 

I hope this is helpful for you.

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up. Solved your problem? - Click on Accept as Solution. Others seeking the same answers will be happy you did.
Check out my PowerApps Videos too!

@RandyHayes I beg to differ. The App Start in this app needs to do a lot of things. Some of the PowerApps syntax is very clunky. It sets a load of Global variables. There is no multiple set command. It gets loads of Lookup data for drop down boxes.  That involves several flow runs. It stores & retreives data from the devices cache.

 

RandyHayes
Super User III
Super User III

@stapes 

Yep, understood and the red flags in your statement are "a load of global variables" and "loads of lookup data for dropdown boxes".

All of that should be in its respective controls.  You should have limited variables in your app (this is even warned about in the docs):

RandyHayes_0-1613160340376.png

Once you get rid of overused variables, your formula will get shorter and shorter.

Your Items properties on your dropdown boxes should have the formulas necessary to get their values.

PowerApps is not a development platform, so trying to "initialize" a bunch of variables like you do in a dev environment is not needed.

There are only a handful of things that need such a purpose in the OnStart.

I've written hundreds of app and very complex and complicated apps and the rule I first mentioned has become relevant from experience - if your formula spans more than a single scroll down, then it is too complex and needs to be refactored.  Also from experience, once you stop using variables and collections for everything and embrace the concept behind PowerApps, your app will become much simpler to design and will work much better.

 

Examples:

ClearCollect(colMyDropdownItems, Filter(someData, someCriteria))

can become (demonstrating eliminating the app overhead of a collection):

Set(myDropdownItems, Filter(someData, someCriteria))

which can become:

<intentionally left blank>

 

Blank because, instead we just move this to the Items property of the dropdown: 

Filter(someData, someCriteria)

 

AND, since I observe that factor of only writing a formula once, I might say to myself...hey, I need that set of results on another dropdown.  No problem, this is where a dynamic app variable comes into play.  And once you start putting in dynamic app variables (which are datacards in your app), then you have moved even more out of your app OnStart.

dataCardDropdownItems.Update property:

{
    DropdownItems_1: Filter(someData, someCrtieria),
    DropdownItems_2: Filter(someOtherData, someOtherCrtieria),
    DropdownItems_3: Filter(someMoreData, someMoreCrtieria)
}

Then your Items property for a dropdown might be : dataCardDropdownItems.Update.DropdownItems_2

 

As another example...very common is this type of thing in an OnStart:

Set(varUserName, User().FullName);
Set(varUserEmail, User().Email);
Set(varUserManager, Office365Users.ManagerV2(User().Email).displayName);
Set(varUserManagerEmail, Office365Users.ManagerV2(User().Email).mail);

This can be refactored to:

Set(varUser, User());
Set(varUserManager, Office365Users.ManagerV2(User().Email));

And can be pulled out of the OnStart completely and be placed in a dynamic variable.

aDataCard.Update property:

With({_user:User()},
    With({_o365Manager: Office365Users.ManagerV2(User().Email)},

{
    User: _user,
    UserName: _user.FullName,
    UserEmail: _user.Email,
    UserManager: _o365Manager,
    UserManagerName: _o365Manager.displayName ,
    UserManagerEmail: _o365Manager.mail
}
)
)

 

The possibilities are endless and very little is needed in the OnStart.

 

I don't know your specific scenario with your OnStart, but I could almost guarantee that I could chop it down using the above concepts. 

 

But still...you asked about functions, and my response was that there is no such thing as a user function in PowerApps at this time, so, the things that I mention are ALL applicable to help reduce the size and complexity of formulas as you mentioned you had.

 

Anyway...I'm rambling.  I have a video on this that is not yet published, but I wish it was done so you could see this in action as it drastically changes the way you do things in PowerApps to be more of "the PowerApps way".

 

And this post now is almost as long as your OnStart...Lol 😁

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up. Solved your problem? - Click on Accept as Solution. Others seeking the same answers will be happy you did.
Check out my PowerApps Videos too!

I have never used Datacards because I am using SQL, not Sharepoint. All the documentation seems to be about Sharepoint.

stapes
Post Prodigy
Post Prodigy

@RandyHayes "PowerApps is not a development platform" - I find this statement very alarming, having spend the last 12 months or so developing applications with it. 

RandyHayes
Super User III
Super User III

@stapes 

Datacards are controls, they are not specific to the datasource.  When you create a canvas, for example, it has a datacard.  That is a control.

 

Alarming as it might sound - you have been designing app.  Since PowerApps is based on the concept of Excel, would you say that you "developed" a spreadsheet?  Perhaps. Would one say that because they put a formula in a cell in a spreadsheet that they "developed" it?   And if you would say that about a spreadsheet, then you can say that about PowerApps.  

A development platform provides compilation of code and developer tools and debugging, etc.  PowerApps has a designer.  Debugging is minimal at best and there is nothing compiled.  Everything in PowerApps is just a JSON file with objects and their properties.  The App Player is the only interpreter that can "play" the app. 

There are a lot of semantics that are overlooked here as well as other areas.  For example, some say writing scripts is developing.  I apply the same criteria as above to that and say it is not developing, it is scripting.

I only make this differentiation because we actually DO development in real development platforms.

 

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up. Solved your problem? - Click on Accept as Solution. Others seeking the same answers will be happy you did.
Check out my PowerApps Videos too!

We have done things in this app to minimize database calls, because connectivity is not always brilliant in all parts of our business. This includes caching data on the users devices, and grabbing most of the data needed for the operation at the beginning, so that people can go about their business unimpeded. It is supported by SQL Stored Procedures rather than directly addressing SQL Tables, and a number of ASP.NET Applications, created using said development platforms. I will not quibble semantics about designing, scripting or developing. It's all in a day's work. I take on board what you say about reducing the need for variables & collections.

 

RandyHayes
Super User III
Super User III

@stapes 

Yep, it's all a bunch of semantics in most cases.  I only point out the distinction based on the fact that in one case we're writing code and compiling and executing, in another case were designing formulas and playing them in an interpretive player.  

Anyway, your app reminds me of one that we put out about a year ago - people were going to be working connected and disconnected and they wanted everything to work (including data) in both scenarios.  We used SQL on the backend.   We used a collection for areas where we wanted to add or remove rows and variables for any other situation where data tables were somewhat static or only needed changes/updates.  The app never touched the tables in SQL.  They got their data from views and the app "packaged" and queued any actions that needed to be persisted into a collection.  The app automatically "watched" the collection and on a certain schedule would push the packages to PowerAutomate (if connected).  PowerAutomate would then open and parse the actions and send to a stored proc to do all the DB work. The app also persisted the queue on the device in case there was an app crash or device failure.  Most everything else was based on dynamic variables (control variables) and that made it super-simple to design.  It was fun! 

Some day I will post a video on the process.

 

Happy PowerApping!

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up. Solved your problem? - Click on Accept as Solution. Others seeking the same answers will be happy you did.
Check out my PowerApps Videos too!

I would like to see that!

Helpful resources

Announcements
PA User Group

Welcome to the User Group Public Preview

Check out new user group experience and if you are a leader please create your group

Power Apps Community Call

Monthly Power Apps Community Call

Did you miss the call?? Check out the Power Apps Community Call here!

secondImage

Experience what’s next for Power Apps

See the latest Power Apps innovations, updates, and demos from the Microsoft Business Applications Launch Event.

Power Platform ISV STudio

Power Platform ISV Studio

ISV Studio is the go-to Power Platform destination for ISV’s to monitor & manage applications post-AppSource publish.

Top Solution Authors
Top Kudoed Authors
Users online (38,168)