Power Appstipsコンポーネント保守運用

【Power Apps】ユーザー定義関数(App.Formulas)とコンポーネント

Power Apps

ロジックのカプセル化で保守性とコードの可読性を向上させましょう。

変数・コントロールの出力値との使い分け

以前書いた記事で作成した表の再掲です。

変数名使用範囲(スコープ)動的・静的用途
コントロールアプリ全体動的基本的な値の参照方法
ユーザー定義関数(Formulas)アプリ全体動的ユーザー定義関数
コンポーネントアプリ全体動的ユーザー定義関数+共通部品
With関数プロパティ内静的使用範囲がプロパティ内の変数
グローバル変数アプリ全体静的使用範囲がアプリ全体の変数
コンテキスト変数画面内静的使用範囲が画面内のみの変数
コレクションアプリ全体静的テーブル型の変数
https://powerplatformnikki.com/variabletypes/

App.OnStartで定義していた定数の代替

ユーザー定義関数は変数との使い分けとして動的であるかどうか(常に値が最新でよいか)の他に、App.OnStartで定義していた定数の代替手段として利用できます。

ユーザー定義関数は動的なので定数を設定できないかというとそんなことはないです。

これまでApp.OnStartで定義していたユーザー情報やアプリの色などの定数を、App.Formulasで設定することができます。

コルネさんの記事によると実行速度も向上するらしいです。

複数の箇所で利用したり、複雑な数式はユーザー定義関数を使用する

コントロールの出力値とは複数の箇所で利用したり、複雑な数式であるかで使い分けるといいと思います。

複数箇所での利用という観点では、他画面のコントロールを参照するとパフォーマンスが落ちる場合があります。ケースにもよりますが、ユーザー定義関数の使用を検討しましょう。

ヒントとベスト プラクティスを使用して、キャンバス アプリのパフォーマンスを向上させる - Power Apps | Microsoft Learn

また複雑な数式という観点では、ユーザー定義関数に複雑な数式を書いておいてそれを参照することで、数式の可読性が向上します。

引数ありのユーザー定義関数は現時点(2024/5/6)では試験段階の機能

現時点ではユーザー定義関数・コンポーネントどちらの機能も引数ありの関数作成機能が試験段階の機能であるためご注意ください。

拡張コンポーネントの有効化手順

有効化したいアプリの設定をクリックします。

近日公開の機能を選択して、拡張コンポーネントのプロパティをオンにします。

ユーザー定義関数(UDF)の有効化手順

ユーザー定義関数は以下の手順で有効化します。

まずは新しい分析エンジンを有効化します。

その後ユーザー定義関数を有効にします。

ユーザー定義関数(App.Formulas) 

Appオブジェクトにあるアプリ全体で再利用できる式を定義できるプロパティです。

こちらは変数ではなく数式(関数)なので、使用するたびに最新化されます。そのため、値に要求される情報鮮度によって変数とFormulasを使い分ける必要があります。

ただし変数のように一覧化したり現在の値を確認することが現時点ではできないので、むやみに作ると管理が難しくなってしまいます。

また、現在の値はFormulasプロパティではプレビューで確認することができません。

一時的に値を確認するときはボタンのOnSelectが便利です

(プレビュー機能) ユーザー定義関数(UDF)

前述の通り現時点(2024/5/6)では試験段階の機能となっています。

通常Formulasでは一行目のように引数なしの数式しか作成できませんが、この機能を有効化することで二行目のように入力と出力をもつ関数を作成できます。

引数なし(GA済み)と引数あり(試験段階)の数式は共存可

関数を作成するための構文は以下。通常のFormulasと同様文末の;を忘れないようにしましょう。

<関数名>(<引数名>:<引数の型>):<関数の型> = <数式>;
IsWeekDay(date:Date):Boolean = Not(Weekday(date) in [1, 7]);

引数ありの数式を作成できるようになることで、コントロールの出力値を入力することなどが可能になるためより汎用性の高い数式が作成できるようになります。

If(
    IsWeekDay(DatePickerCanvas1.SelectedDate),
    "平日です",
    "休日です"
)

コンポーネント

コンポーネントについては以下の記事をご覧ください。

コンポーネントとユーザー定義関数の使い分け

アプリ個別でロジックをカプセル化したい場合はユーザー定義関数

(イメージ)右下の黒丸のようにアプリ個別の複雑な要件にはユーザー定義関数

アプリ個別の特殊な要件やデータソースに依存しているようなロジックのカプセル化にはユーザー定義関数が向いています。

逆に組織単位で共通部品として持っておくべきような汎用的なロジックは、管理のしやすさという面でもコンポーネントの方が向いています。

コントロール単位で再利用したい場合はコンポーネント

ユーザー定義関数はロジックのみでコントロールなどの画面要素を持ちません。

そのためコントロールのまとまりとして再利用が必要な(カプセル化したい)場合はコンポーネントを利用します。

データ型

入力・出力で扱えるデータ型が異なりますが、現時点ではコンポーネントの方が使えるデータ型が多いです。

ユーザー定義関数
コンポーネント(入力)

参考

コメント

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