DatePicker(日付選択コントロール?)から DateTimeValue 関数と Time 関数で年月日+時分の値を生成したかったんです。アプリ作ってテストしていたら、実行する実行環境によって動きが異なる点があったんですよ。いつか忘れて、またハマりそうなので記事にしておきます。
参考文献
Power Apps での Date および Time 関数
やりたかったコト
DatePicker で選択した年月日に、とある条件によって時間を組み合わせて日時型にしたうえで判定する、みたいなコトです。
例えば「DatePicker = 2021/04/01」と選択されていた場合、2021/04/01 9:00 の日付型を生成して、とある値と比較する感じですね。なお、時刻の部分も条件で可変にしたいので Time 関数と DateTimeValue 関数を組み合わせていたんです。
さて、何が起こったか?
Windows 10 Edge
iPhone
Android(Pixel3)
Windows 10 Edge(スマホエミュレート)
症状
おわかりいただけただろうか・・・
上記のスクリーンショットは調査のために作成したアプリです。DatePicker と ラベルが並んでいるだけです。各ラベルに指定した関数は左側にキャプションよろしく置いてありますが、念のため下記にしておきます。
DatePicker1.SelectedDate
DateTimeValue( DatePicker1.SelectedDate & Time(9,0,0))
Time(9,0,0)
DateTimeValue( DatePicker1.SelectedDate & " " & Time(9,0,0))
上から順番に各ラベルコントロールへ指定しています。
2番目の関数がブラウザーでは動作しているのですが、iPhone も Android もスマートフォンではブランクが返ってきています。「年月日時分秒」だとスマホはNGって感じです。当方が作成したロジックは判定処理に利用していたので、ブランクと比較して処理が意図しない結果に陥ってた、ってコトです。(いや、こんなのわかるかい汗)
4番目の関数は年月日と時分秒の間に半角スペースを強制的に入れています。「年月日△時分秒」(△=半角スペース)です。これであれば検証した限りのデバイスで問題無く意図した動作をしてくれました。
この半角スペースが有るか無いかによって異なる動作ですが、エラーになるワケでもないし警告も出ない・・・。なので、半角スペースに気づけなかったら今でも「スマホで動かない!なぜだ!!」って悩んでいたコトでしょう((((;゚Д゚))))
まとめ
- DateTimeValue 関数はブラウザーとスマートフォンで動きが変わる
- 年月日△時間(△=半角スペース)じゃないとスマホでは結果が返ってこない
- ブラウザーでスマホ画面をエミュレートしても再現はしない
- 実機検証は重要です
PC上では完璧に動作してて、自信満々にアプリを発行してスマホで動作確認したら「動きませんけど」ってなったんですよね。関数や処理には全く不具合なくて、何度見返してもロジック的には間違いはなさそう。「なぜだー!?」って悩みまくったんです。
で、まさか?
と思って半角スペースを文字列連携したら動いたんですよねー。ロジックは正解だったけど、実行環境における差異にやられたって感じです。ほんと、こういう罠っぽいトコは知らないとハマります(;´Д`)
Power Apps はマルチデバイスに対応したアプリが即座に作成できるのが強みのひとつなのですが、各種端末で動作確認するのが非常に重要だ、とお伝えできたかと思います。PC上でブラウザーだけ操作してるだと気づかないコトもありますわね、という良い実体験になりました。
他の開発者言語だとコンパイルして云々して・・・やっと各種デバイスでテストができるって感じでしょうか。Power Apps なら発行するだけでスマホでも動作確認できるので、スピード感もって検証できます。めんどくさがらず動作確認は可能な限りやりましょう。
それでは、皆さま、素晴らしい Power Platform Life を!