こんばんは、変態です。
今回はReset関数です。
Reset関数とは
Reset関数は日本語で言うと、
「あるコントロールの値を規定値に戻す」
ときに使います。
例えば以下のようなcontrolを配置して、buttonを押すと
こんな感じでtextinputcontrolの値がResetされます。
こんなResetどうやるん?
ここで、おばちゃんから質問あったんですが、
「Galleryの中のテキストインプットの中をResetしたい場合どうしたらいいの?」
って言われまして。
確かに複数を一括登録したい場合は、あり得る導線だなーと思ったわけですね。
だけど、やったことないなーと思って色々手段検討してみた。
失敗例1
「そのまんまcontrol名呼んだら行けんじゃね?」
→失敗
まぁ当たり前ですね。
Reset function - Power Apps | Microsoft Docs
こちらによれば、
「ギャラリー内にあるコントロールをリセットしたり、フォームコントロールを編集したりすることはできない。同じギャラリーまたはフォーム内のコントロールの数式からコントロールをリセットできる。」
みたいなことが書かれてるので、
簡単に言うと「ReserしたけりゃGallery内で操作しやがれ」ってことです。
失敗例2
「よし!じゃあGalleryごとResetすればいけんじゃね?」
→失敗(なめんな)
当たり前にもほどがある、control指定してない。
ってことで、次の二つも試してみた
①ForAll(任意のGallery.Allitem,Reset(コントロール名))
→エラーは出ないけどResetはされない
②Reset(任意のGallery.Allitem.コントロール名)
→エラー
ここらへんで、
(え?結構テクニカルなことしなきゃできないんじゃね?)
って思い始めてきた。
成功例
はい、割とあっさり解決した。
まず、任意Gallery内にある、今回は任意テキストインプットのプロパティ内の
Resetプロパティに変数を仕込みます。今回はResetTextとします。
そしたら、テキトーにボタン配置してあげて、この変数をtrueにしてあげるとReset!ってなります。
ここで注意しなきゃいけないのが、そもそもResetプロパティの値が「true」ならば、「true」にする!ってなってもResetされません。
検証してみたけどどうやら、
Resetプロパティの値がfalse→trueに切り替わった時に、値がResetされるようで、
逆に言うと、trueにしたらまたfalseに直してあげないと、一度Resetされたらアプリをリロードしないと切り替えができなくなる、ってわけですね。
なのでbuttonのOnSelectに以下を仕込んでおわり!
UpdateContext({ResetText:true});UpdateContext({ResetText:false})
実装したのがコチラ
おわりに
意外としらんことあるもんですね
調子にのってたぜデへへ
他の誰かも同じこと書いてそうですけど、
備忘録ってことと、おばちゃんへのメッセージと、解決までの時間短いぜ!すごいだろ!って自慢のために残しておこうと思います。