【Power Apps】アプリの起動を速くする!Concurrent関数で複数の処理を同時に実行する方法

OnStartやOnVisibleプロパティを使用してSPOリストのデータをコレクションに入れたり、変数にレコードやテーブルを代入したりすることがあるかと思います。

通常、数式を並べて書くと「直列処理(1つ終わったら次へ)」となり、前の処理が終わるまで次の処理が始まりません。そのため、データ量が多いと待ち時間が積み重なってしまいます。

Concurrent関数を使うと、これを「並列処理(まとめて一気に)」に切り替えることができ、全体の待ち時間を大幅に短縮できます。

3つのデータ取得にそれぞれ1秒かかる場合、普通に書くと3秒かかりますが、Concurrentなら最短1秒(一番長い処理の時間)で終わります!

Concurrent関数

このような時にConcurrent関数を使用して、一度に処理を実行させます。

Apps
Concurrent(
    // 変数へメールアドレスを代入
    Set(
        _UserProfile,
        Office365Users.GetUserProfileV2(User().Email)
    ),
    // コレクションにデータを代入
    ClearCollect(
        colProjectList,
        Filter(
            ProjectData,
            ProjectStatus.Value="作業中"
        )
    )
)

Concurrent関数の中では、「お互いに依存する処理」は書けません。
例えば、「変数Aに値を入れる処理」と「変数Aを使って計算する処理」を同時に入れると、計算時に変数Aが空っぽでエラーになる可能性があります。それぞれが独立した処理である場合に使いましょう。

Concurrent関数を使用することで、変数への代入とコレクションへの値の代入を同時にできるため、アプリの立ち上がりが1つ1つ行うより早くすることができます。

※Microsoft Learnでは、OnStartプロパティに重い処理を書くと、アプリのロードが完了する前にエラーが発生したり、デバッグが困難になったりする可能性があると指摘されています。

現在は、アプリの「最初の画面」の OnVisible に記述するか、Appオブジェクトの StartScreen プロパティを活用して、画面遷移と処理を切り分けるのが推奨される構成です。

参考 Power Apps の App オブジェクトMicrosoft Learn

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA