Power Apps アプリで使う定義値はApp.OnStartではなくApp.Formulasで宣言する|起動時間高速化

これまでアプリで使用する定義値はApp.OnStartプロパティ内でグローバル変数として定義してきたが、今回新しく機能「App.Formulas」が追加されたので試してみた。

2023/12/07追記:いつの間にかGAされていたので、記事内の「プレビュー」の文字を削除しました。

スポンサーリンク

これまで定義値の宣言はApp.OnStart内でSet関数を使用して宣言していた

これまでアプリ全体で使用する定義値の宣言は、このようにApp.OnStartでグローバル変数を宣言していた。

もちろん機能的には何の問題もないんだけど、

  • アプリ起動時に設定するから値によっては起動時間が遅くなる
  • App.OnStartプロパティの式のボリュームが増えて読みにくい
  • 宣言した定義値を書き換えできてしまう

といった問題があった。

そこで今回追加されたのが「App.Formulas」プロパティで、このApp.Formulas内でアプリで使う定義値を宣言することができる

App.Formulasプロパティでの定義値の宣言

App.Formulasプロパティには、このように定義値を宣言することができて、
宣言した値はこんな感じで通常の変数のように使うことができる。

App.Formulasの利点

公式によるとSetで作成したグローバル変数に比べ、App.Formulasで宣言した値はこんな利点がある。

  • 数式の値は常に利用可能
  • 数式の値は常に最新
  • 数式の定義は不変
  • 数式の計算を遅延させることができる
  • 数式は名前マネージャーで管理され、自動で再計算される

数式の値は常に利用可能

App.Formulasで宣言される値は、循環参照を作らない限りタイミングを考えずに使用することができる

このように宣言した値をApp.OnStartで使うこともできるし、
App.OnStartScreenで使うこともできる。
※ちなみにApp.Formulas内でも定義値を順不同で宣言/使用することができる

数式の値は常に最新

App.Formulasでデータソースから取得した値を定義値にしたとき、その定義値はデータソースを更新すれば自動で更新される(Setみたいに再代入する必要がない)

例えばSPOリストにこんな値があって、
ここから取得した値を定義する。
で、SPOリストの方を更新したあとに、
アプリ側でデータソースを更新すると、
App.Formulasで宣言した定義値は自動で更新される。

DataverseやSPOリストにアプリのユーザーごとの設定を保存するときなどに役に立つかもしれない。

数式の定義は不変

Setで宣言した定義値は書き換えることがでるけど、App.Formulasで定義された値は書き換えることができない

これでアプリの保守や回収を別の開発者に引き継いだときに、間違って定義値を書き換えてしまったことによるデグレを防ぐことができる。

数式の計算を遅延させることができる

App.Formulasで宣言した値は、その値が必要になったタイミングで計算されるため起動時間の短縮にもつながる

例えばトップ画面では使用しない定義値でもApp.OnStart内のSet関数で宣言してしまうと、アプリ開始時にその定義値を計算/設定してしまう。

対してApp.Formulasで定義値を宣言すると、その宣言値が必要になったタイミング(例えばその値を使用する画面に遷移した後)で計算/設定するため、アプリ起動時の負荷がかなり軽減される。

数式は名前マネージャーで管理され、自動で再計算される

最後のこれだけよくわからなかったんだけど、ひとまず原文。

Named formulas is an Excel concept. Power Fx leverages Excel concepts where possible since so many people know Excel well. Named formulas are the equivalent of named cells and named formulas in Excel, managed with the Name Manager. They recalc automatically like a spreadsheet, just like control properties do.
要は自動で計算されるということなので、例えばこんな感じでアプリのコントロールの値を使用する定義値を宣言してあげれば、
コントロールの値が変わるたびに定義値もきちんと更新されるよ、ってことが言いたいのかなと。

(今のところ思い浮かばないけれど)これはこれでどこかで使い道があるのかな。

ということで新しく追加されたApp.Formulasプロパティはかなり便利な機能なので、積極的に使用していきたい。

関連記事

コメント

タイトルとURLをコピーしました