web
You’re offline. This is a read only version of the page.
close
Skip to main content

Announcements

News and Announcements icon
Community site session details

Community site session details

Session Id :
Power Platform Community / Forums / Power Apps / How to avoid a Kluge?
Power Apps
Unanswered

How to avoid a Kluge?

(0) ShareShare
ReportReport
Posted on by 894

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?

Categories:
I have the same question (0)
  • RandyHayes Profile Picture
    76,299 Super User 2024 Season 1 on at

    @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.

  • stapes Profile Picture
    894 on at

    @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 Profile Picture
    76,299 Super User 2024 Season 1 on at

    @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 😁

  • stapes Profile Picture
    894 on at

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

  • stapes Profile Picture
    894 on at

    @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 Profile Picture
    76,299 Super User 2024 Season 1 on at

    @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.

     

  • stapes Profile Picture
    894 on at

    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 Profile Picture
    76,299 Super User 2024 Season 1 on at

    @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!

  • stapes Profile Picture
    894 on at

    I would like to see that!

  • stapes Profile Picture
    894 on at

    One question: What do you mean by "views" in the previous post? I guess it's not SQL Views.

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Season of Sharing Community Challenge Winners!

Congratulations to our community stars!

Kudos to our 2025 Community Spotlight Honorees

Expanding mentorship, skilling, and AI innovation

Congratulations to the June Top 10 Community Leaders!

These are the community rock stars!

Leaderboard > Power Apps

#1
WarrenBelz Profile Picture

WarrenBelz 342 Most Valuable Professional

#2
11manish Profile Picture

11manish 234

#3
Valantis Profile Picture

Valantis 187

Last 30 days Overall leaderboard