前回のTipsでテキストフィールドに入力した結果を曖昧検索でギャラリーに表示する事に成功したわけだが、
そこで終わりではもちろんなくて、結果を使って後続処理を行いたいのである。
例えば経費精算申請をフォームで入力してリストに追加したい場合、フォーム上で計上部門を
計上部門コードで検索してその結果を申請時の計上部門および計上部門名称として登録したい
場面というのはあるあるな要件かと思う。
その際のやり方をCopilot先生に確認しながら進めてみた。
流れとしては次のような感じだ。
1.ギャラリーのItemsにFilter関数で値をセットする
2.ギャラリーのOnSelectプロパティで変数に検索結果がセットされるようにする
3.変数をPatch関数の引数として利用する
1.はすでに実装されているので割愛。
続いてOnSelectプロパティに次のようにセットする。
入力の途中だが、Setでグローバル変数を設定できるよーとサジェストしてくれる。
でも初学者にはわかりにくいな。
プログラミング経験がない人はこの変数のくだりでお手上げかもしれん。
Set(SelectedBumonCode,ThisItem.部門コード)
で、上記のような感じで変数SelectedBumonCodeに検索結果の部門コードをセットしたが、
同様に部門名称も変数に格納したい。
Copilot先生に質問したら以下のように返ってきた。
Power Appsでは、一度に複数の変数をセットするための直接的な方法はありませんが、
複数の Set 関数を連続して使用することで実現できます。
これを一つのアクションにまとめるために、セミコロン(;)を使用して複数の Set 関数を連結します。
なるほど、セミコロンで連結ね。
というわけで以下のようにOnSelectプロパティにセット。
Set(SelectedBumonCode,ThisItem.部門コード);Set(SelectedBumonName,ThisItem.タイトル)
そしてフォーム設置したボタンに設定しているPatch関数にそれぞれ追加する。
が、あれまたエラーになった。
ギャラリーから取得した値はRecord型なんだな。
なので以下のように修正。
今度は
列がありません。式には、型 'Number' の列 ' Id' が含まれていません。
とのこと。
となるとギャラリーからIdも取ってこないといけなさそう。
Set(SelectedBumonCode,ThisItem.部門コード);
Set(SelectedBumonName,ThisItem.タイトル);
Set(SelectedId,ThisItem.ID)
ということで変数にIDもセット。
Patch関数の内容は以下の通り
Patch(
test_concur_request,
Defaults(test_concur_request),
{
タイトル:DataCardValue1.Text,
計上日:DataCardValue2.SelectedDate,
支払方法: {
Value: DataCardValue5.Selected.Value
},
計上部門コード: {
Id:SelectedId,
Value:SelectedBumonCode
}
})
リストにはこれで正常に登録された。
なお、部門名称はリスト側で参照項目として部門コードと連動しているので、
部門コードだけ追加すればあとでリスト側で参照項目として部門名称を
ひっぱってきてくれる模様。
新規アイテム登録なのになぜIdが必要なのかは疑問。
整合性の維持らしいが、いじらしいね。
だいぶ進歩したけどまだまだ課題が山積みだなぁ。
以上