このページでは基本編で紹介できなかった便利な関数を紹介します。
With
With関数は一時変数を宣言する関数で、UpdateContext関数で宣言する変数より、短いスコープで使用可能な変数を宣言することができます。
以下の例では呼び出したPower Automateの戻り値を
// Power Automateからはbool型のプロパティ「result」を持つオブジェクトが戻ってくるものとする
With({ret:PowerAutomateフロー名.Run()},
If(ret.result = true,
Notify("フローは成功しました。"),
Notify("フローは失敗しました。")
)
)
Power Automateからの戻り値を画面全体で使用する場合はUpdateContext関数で宣言した変数に格納すべきですが、呼び出した直後のメッセージ表示にのみ使用するような場合は、スコープが短いWith関数を使う方が望ましいです。
Concurrent
Concurrent関数は引数として渡した複数の処理を、並列実行する関数です。
// 数式1 ~ 数式Nを並列で実行
Concurrent(数式1, 数式2, ...数式N)
以下の例ではApp.OnStartなどでグローバル変数の宣言を並列で行い。処理時間の短縮を図る例です。
Concurrent(
Set(glbTextColor, Color.Red),
Set(glbBackgroundColor, Color.Blue)
)
Concurrent関数はアプリのパフォーマンスが上がる関数なので、積極的に使用していきましょう。
※Power Appsを実行するデバイスによってはパフォーマンスが向上しないこともあります。
DateAdd / DateDiff
DateAdd
DateAdd関数は、日付/時刻値に値を加える関数です。
戻り値として計算後の日付/時刻値を返します。
DateAdd( DateTime, Addition [, Units ] )
// DateTime : 加算対象の日付/時刻値
// Addtion : 加算する数値
// Units : 加算する数値の単位列挙値
加算する数値の単位列挙値には以下があります。
- TimeUnit.Milliseconds
- TimeUnit.Seconds
- TimeUnit.Minutes
- TimeUnit.Hours
- TimeUnit.Days(指定しない場合はこの値)
- TimeUnit.Months
- TimeUnit.Quarters
- TimeUnit.Years
以下使用例です。
// 明日の日付を求める式
DateAdd(Today(), 1, TimeUnit.Days)
// 現在の時刻から30分前を求める式
DateAdd(Now(), -30, TimeUnit.Minutes)
DateDiff
DateDiff関数は日付/時刻値の差分を取る関数です。
戻り値として第3引数で指定した単位の差分数値を返します。
DateDiff( StartDateTime, EndDateTime [, Units ] )
// StartDateTime:開始日時
// EndDateTime:終了日時
// Units:減算後の値の単位の列挙値
以下使用例です。
// 2000年1月1日から現在時刻までの経過した日数を返す
DateDiff( Now(), DateValue("1/1/2000"), TimeUnit.Days)
// 本日の0時0分より経過した時間を負の数値で返す( Now() > Today() )
DateDiff( Now(), Today(), TimeUnit.Minutes )
Launch、Param
Launch
Launch関数は引数で指定したURLのWebページ、またはキャンバスアプリを起動する関数です。
また、起動する際にパラメータを渡すこともでき、他のキャンバスアプリ起動時にパラメータを渡し、App.OnStartプロパティで起動画面を操作する、などの使い方をされます。
Launch( Address [, ParameterName1, ParameterValue1, ... ] )
// Address: 起動する Web ページのアドレスまたはアプリ ID。
// ParameterName(s):(任意)パラメーターとして渡す値の名称
// ParameterValue(s):(任意)パラメータとして渡す値
※パラメーターとして「LaunchTarget」を渡すこともできますが、あまり使用しません。(以下参照)
使い方
// bing検索ページを開きます
Launch( "https://bing.com" )
// パラメータ名「Navigate」に値「Second Screen」を設定し、他のキャンバスアプリを起動します
Launch( "/providers/Microsoft.PowerApps/apps/YOUR-APP-ID",{ Navigate: "Second Screen"})
Param
Param関数ははURLクエリパラメータで渡された値を取得する関数です。
Param( ParameterName )
// ParameterName : アプリに渡されたパラメーターの名前。
例えば以下の関数でキャンバスアプリが起動された際、
Launch( "/providers/Microsoft.PowerApps/apps/YOUR-APP-ID",{ Navigate: "Second Screen"})
Param関数をApp.StartScreenプロパティで以下のように使用することで、起動画面をホーム画面からScreen2に切り替えることができます。
If(Param("Navigate") = "Second Screen", Screen2, HomeScreen)
CountRows
CountRows関数はテーブル型の値やデータソースの行数を取得できる関数です。
CountRows( Table )
// 行数を取得するテーブル
ただし、CountRowsは委任が機能しないため、データソースに使用する場合は注意が必要です。
プレビューの機能として委任を機能させる設定はありますが、その際もいくつか制限があるため、データソースに対してCountRows関数を使用する場合は、以下の内容を理解した上で使用することをおすすめします。
AddColumns / DropColumns / ShowColumns / RenameColumns
Power Appsではテーブル型の値やデータソースを扱うことが多く、必要に応じこれらの関数を使用してテーブルの形を整形し、アプリ上でテーブルを表示/操作します。
AddColumns
AddColumns関数はテーブル型の値に列を追加する関数です。
AddColumns( Table, ColumnName1, Formula1 [, ColumnName2, Formula2, ... ] )
// Table : 操作の対象となるテーブル
// ColumnName(s) : 追加する列の名前
// Formula(s) : 各レコードについて評価する数式
DropColumns
DropColumns関数はテーブル型の値の指定の列を削除する関数です。
DropColumns( Table, ColumnName1 [, ColumnName2, ... ] )
// Table : 操作の対象となるテーブル
// ColumnName(s) : 削除する列の名前
ShowColumns
ShowColumns関数は指定した列以外の列を削除する関数です。
ShowColumns( Table, ColumnName1 [, ColumnName2, ... ] )
// Table : 操作の対象となるテーブル
// ColumnName(s) : 表示する(削除しない)列の名前
RenameColumns
RenameColumns( Table, OldColumnName1, NewColumnName1 [, OldColumnName2, NewColumnName2, ... ] )
// Table : 操作の対象となるテーブル
// OldColumnName : 変更前の列名
// NewColumnName : 変更後の列名
各関数の使用例
AddColumnsの使用例
DropColumnsの使用例
ShowColumnsの使用例
RenameColumnsの使用例
Patch
Patch関数はデータソースのレコードを追加/更新する際に使用する関数です。
Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, … ])
// DataSource :追加/更新するレコードのデータのソース
// BaseRecord : 更新するレコード。追加の場合はDefaults関数を使用
// ChangeRecord(s) : 追加/更新するレコードのプロパティと値を指定
フォームを使用せずにレコードの追加や更新ができるため、
- ユーザーの入力以外からデータソースのレコードを追加/更新する際
- フォームコントロールではデザイナーから指定された画面デザインに対応できない場合
などに使用します。
使用例
// 列「Flavor」が「Chocolate」のレコードの列「Quantity」を「400」に更新する
Patch( IceCream,LookUp( IceCream, Flavor = "Chocolate" ), { Quantity: 400 } )
// 列「Flavor」が「Strawberry」、列「Quantity」が「100」のレコードを追加する
Patch( IceCream, Defaults( IceCream ), { Flavor: "Strawberry", Quantity: 100 } )
レコードの一括登録
Patch関数を使用すると、複数のレコードを一括で登録することも可能です。
詳細は以下の参考サイトをご参照ください。
Remove / RemoveIf
Remove
Remove関数はデータソースまたはコレクションのレコードを削除する関数です。
削除対象としてレコードを複数、またはテーブルとして一括で指定することが可能です。
// 削除対象を複数渡す
Remove( DataSource, Record1 [, Record2, ... ] [, RemoveFlags.All ] )
// DataSource : 削除対象のデータソースまたはコレクション
// Record(s) : 削除するレコード
// RemoveFlags.All : (任意)同じレコードが複数存在した際に、それらをすべて削除する場合はRemoveFlags.Allを指定する
// 削除対象をテーブルで渡す
Remove( DataSource, Table [, RemoveFlags.All ] )
// DataSource : 削除対象のデータソースまたはコレクション
// Table : 削除するレコードが1つ以上含まれたテーブル
// RemoveFlags.All : (任意)同じレコードが複数存在した際に、それらをすべて削除する場合はRemoveFlags.Allを指定する
RemoveIf
RemoveIf関数はデータソースまたはコレクションのレコードのうち、条件に合致するレコードを削除する関数です。
RemoveIf( DataSource, Condition [, ... ] )
// DataSource : 削除対象のデータソースまたはコレクション
// Condition(s) : 削除条件
RemoveIfは現在委任機能の対象外です。
RemoveIfを使用してデータソースのレコードを削除する場合は、委任ができないことを踏まえた上で構築するようにしてください。
※プレビューの機能として委任機能の対象にする設定は用意されています。
使用例
Remove関数とRemoveIf関数の使用例は公式ページの例がとてもわかりやすいので、そちらをご参照ください。
Update / UpdateIf
Update
Update関数はデータソースまたはコレクションのレコードを更新する際に使用する関数です。
Update( DataSource, OldRecord, NewRecord [, RemoveFlags.All ] )
// DataSource : 置換対象のデータソースまたはコレクション
// OldRecord : 置換するレコード
// NewRecord : 置換後のレコード
// RemoveFlags.All : (任意)(任意)同じレコードが複数存在した際に、それらをすべて置換する場合はRemoveFlags.Allを指定する
Patch関数ではレコードの指定したプロパティのみを更新しますが、Update関数では指定したレコードのすべてのプロパティを更新しようとします(プロパティ指定をしない場合は空白が入る)。
UpdateIf
UpdateIf関数はデータソースまたはコレクションのレコードのうち、条件に合致したレコードを更新する際に使用する関数です。
UpdateIf( DataSource, Condition1, ChangeRecord1 [, Condition2, ChangeRecord2, ... ] )
// DataSource : 置換対象のデータソースまたはコレクション
// Condition(s) : 置換条件
// ChangeRecord(s) : 置換後のレコード
UpdateIf関数はUpdate関数と違い、条件に合致したレコードのうち、指定したプロパティのみを更新します。
また、UpdateIf関数はRemoveIf関数と同様に委任機能の対象外です。
データソースと共にこの関数を使用する場合は、委任が適用されないことを踏まえた上で構築してください。
※プレビューの機能として委任機能の対象にする設定は用意されています。
使用例
Update関数、UpdateIf関数の使用例は、公式のHPが最もわかりやすいので、そちらを参照してください。
関数リファレンス
これまで紹介した関数以外にも便利な関数はたくさんありますので、以下のリファレンスを元にPower Appsの関数を把握していただければと思います。