Is there a way to write custom functions that can be called from within the formulas?
Solved! Go to Solution.
Yes, but it's not a simple process today. The main process to add a custom function is to create a custom API, where the function would be executed in the server, and in your app you'd add a connection to that API.
Depending on your scenario, there may be an alternative to that. For example, I was working on a PoC app that contained an analog clock. To display the pointers (or in my case, circles), I needed to calculate the sine and cosine of the angle depending on the current time. Those functions (Sin/Cos) are not available yet, I created a collection in the screen's OnVisible handler with the pre-calculated values for the functions:
ClearCollect(Angles, { Angle: 0, Sin: 0.000, Cos: 1.000 }, { Angle: 1, Sin: 0.017, Cos: 1.000 }, { Angle: 2, Sin: 0.035, Cos: 0.999 }, { Angle: 3, Sin: 0.052, Cos: 0.999 }, { Angle: 4, Sin: 0.070, Cos: 0.998 }, { Angle: 5, Sin: 0.087, Cos: 0.996 }, { Angle: 6, Sin: 0.105, Cos: 0.995 }, { Angle: 7, Sin: 0.122, Cos: 0.993 }, { Angle: 8, Sin: 0.139, Cos: 0.990 }, ...
And when you're ready to use the values, you can use the Last/FirstN combination to get the required value, like in the example below (which I used in a timer's OnTimerEnd property):
UpdateContext({ rx: Circle1.Width / 2, ry: Circle1.Height / 2 }); UpdateContext({ cx: Circle1.X + rx, cy: Circle1.Y + ry }); UpdateContext({ now: Now() }); UpdateContext({ h: Mod(Hour(now), 12), m: Minute(now), s: Second(now) }); UpdateContext({ sp: s * 6, mp: m * 6 + RoundDown(s / 12, 0), hp: h * 30 + RoundDown(m / 12, 0) }); UpdateContext({ sa: Last(FirstN(Angles, sp + 1)), ma: Last(FirstN(Angles, mp + 1)), ha: Last(FirstN(Angles, hp + 1)) }); UpdateContext({ sx: cx + sa.Sin * rx - 10, sy: cy - sa.Cos * ry - 10, mx: cx + ma.Sin * rx - 15, my: cy - ma.Cos * ry - 15, hx: cx + ha.Sin * rx - 15, hy: cy - ha.Cos * ry - 15 })
Again, this is a workaround for a specific scenario, which may not apply to your case. Please create a new issue in the PowerApps Ideas board (or vote up if it already exists), if you feel that this is a scenario that is important to you.
Yes, but it's not a simple process today. The main process to add a custom function is to create a custom API, where the function would be executed in the server, and in your app you'd add a connection to that API.
Depending on your scenario, there may be an alternative to that. For example, I was working on a PoC app that contained an analog clock. To display the pointers (or in my case, circles), I needed to calculate the sine and cosine of the angle depending on the current time. Those functions (Sin/Cos) are not available yet, I created a collection in the screen's OnVisible handler with the pre-calculated values for the functions:
ClearCollect(Angles, { Angle: 0, Sin: 0.000, Cos: 1.000 }, { Angle: 1, Sin: 0.017, Cos: 1.000 }, { Angle: 2, Sin: 0.035, Cos: 0.999 }, { Angle: 3, Sin: 0.052, Cos: 0.999 }, { Angle: 4, Sin: 0.070, Cos: 0.998 }, { Angle: 5, Sin: 0.087, Cos: 0.996 }, { Angle: 6, Sin: 0.105, Cos: 0.995 }, { Angle: 7, Sin: 0.122, Cos: 0.993 }, { Angle: 8, Sin: 0.139, Cos: 0.990 }, ...
And when you're ready to use the values, you can use the Last/FirstN combination to get the required value, like in the example below (which I used in a timer's OnTimerEnd property):
UpdateContext({ rx: Circle1.Width / 2, ry: Circle1.Height / 2 }); UpdateContext({ cx: Circle1.X + rx, cy: Circle1.Y + ry }); UpdateContext({ now: Now() }); UpdateContext({ h: Mod(Hour(now), 12), m: Minute(now), s: Second(now) }); UpdateContext({ sp: s * 6, mp: m * 6 + RoundDown(s / 12, 0), hp: h * 30 + RoundDown(m / 12, 0) }); UpdateContext({ sa: Last(FirstN(Angles, sp + 1)), ma: Last(FirstN(Angles, mp + 1)), ha: Last(FirstN(Angles, hp + 1)) }); UpdateContext({ sx: cx + sa.Sin * rx - 10, sy: cy - sa.Cos * ry - 10, mx: cx + ma.Sin * rx - 15, my: cy - ma.Cos * ry - 15, hx: cx + ha.Sin * rx - 15, hy: cy - ha.Cos * ry - 15 })
Again, this is a workaround for a specific scenario, which may not apply to your case. Please create a new issue in the PowerApps Ideas board (or vote up if it already exists), if you feel that this is a scenario that is important to you.
Very helpful. Thanks. I appreciate the clear answer.
The first Microsoft-sponsored Power Platform Conference is coming in September. 100+ speakers, 150+ sessions, and what's new and next for Power Platform.
This training provides practical hands-on experience in creating Power Apps solutions in a full-day of instructor-led App creation workshop.
User | Count |
---|---|
190 | |
53 | |
51 | |
35 | |
33 |
User | Count |
---|---|
268 | |
91 | |
80 | |
68 | |
67 |