何か月かぶりにキャンバスアプリをいじっていたらすっかり忘れておりましたので覚書です。
今回はLastSubmitとLast(/LastN)それぞれの使いどころについてです。
今回はとあるアプリの顧客情報の登録を行う画面と登録確認ダイアログを例として挙げます。
まず自由にUIをデザインした登録フォームとDataverseで作成した登録フォーム画面を比較しましょう。
LastSubmitの使い方について
自前で作成したフォームに使えないLastSubmit
自前で用意したフォームでレコードを作成した場合、 ラベルにテーブル名.LastSubmit.列名.Text
を記述しても最後に登録したデータは表示されません。
ちゃんと公式ドキュメントは読もう
ちなみに公式ドキュメントにLastSubmitプロパティ使用時の注意点がしっかりと書いてありました…
LastSubmit – 任意のサーバーが生成したフィールドを含む、最後に正常に送信されたレコード。
- このプロパティは Edit Form コントロールのみに適用されます。
- (中略)
- このプロパティの値は OnSuccess 式で利用できます。
なのでLastSubmit関数を使用すると以下のような感じになります。
上記例では登録データの確認にディスプレイフォームコントロールを使用していますが、 Edit Form コントロール.LastSubmit.表示させたい列名
をTextコントロールのTextプロパティにセットすれば確認ダイアログを自由なデザインで表現することもできます。
NewForm関数の実行タイミングに注意しよう
NewForm関数を実行するとLastSubmitに保存されたデータは空になります。
フォームコントロールを使用してキャンバスアプリを作成するときSubmitForm関数を実行した後はNewForm関数を実行する必要がありますが、LastSubmitを使用したい場合はどこでNewForm関数を実行するべきか考慮する必要があります。
上記の「顧客登録_2」画面では確認ダイアログを閉じて登録確認画面に戻るOKボタンのOnSelectイベントでNewForm関数を実行しています。
Last関数を使用する
登録フォームを自由なUIデザインにした上でレコード登録確認ダイアログが欲しい場合はLast関数とSortByColumnsを組み合わせると似たような挙動を再現することができます。
Last(SortByColumns(テーブル名, "createdon(作成日)")).表示させたい列名
ただ、これだとアプリを同一のタイミングで複数人が使用していた場合別の人が登録したデータが表示される可能性はあります。
テーブルのレコードの作成者列を使用して、テーブルをログイン中ユーザー名で絞る(Filter関数)ように設定すると良いでしょう。
Last(SortByColumns(Filter(テーブル名, 作成者.ユーザー名 = User().Email), "createdon")).表示させたい列名
動作の比較
2022/07/07 追記
Last絡みで配列のインデックスの仕方にアップデートがあったみたいですね。
参考