PowerAutomateでハマったこと
最近お仕事でPowerAutomateを使って業務ロジックを作ってるのですが、Dataverse(CDS)からのデータ取得する際にハマったポイントがあったので備忘録として。
日時型の列
Dataverse(CDS)にてテーブルを作成した後、列の追加が自由にできます。この時時間を扱うため、列を新規に追加し、データ型を「日時型」にしました。
PowerAutomateのCDSアクション
CDSアクションで「データの取得」というものがあり、ここの拡張部分にクエリを入れる箇所があります。ここに取得するための条件をいれることで、取得対象とするデータを絞ることができます。
ここで、先ほどの追加したデータ列が空のものを対象にしたいと考え、以下のように入力しました。列名は表示名ではなく、名前の部分を指定します。
テーブルにも以下のデータを入れてみました。
フローを実行して新規に入れたレコードが検出されるか試してみます。
右側から出力結果が確認できます。
先ほどのレコードに日時を入れてみます。
再度、フローを実行してみるとデータ取得できません。(そりゃそうですね)
そしてもう一度データを空にしてみます。
これでもう一度フローを実行してみます。
ですが、レコードは取得できません...
テキスト型だとこの方法でも取得できるのですが、日時型だと取得できませんでした。
何が返却されているのか
空がマッチしないなら何か値が入っているのだろうということで、フィルターを消して全件取得するようにしてフローを実行して見てみると...
ありました。
'1900-01-01T00:00:00Z'
あー、なるほどとは思いましたが、それであれば、Excelでデータをみた時にもその表記をして欲しいところです…(オフセット値なのでしょうがないのですが)
フィルタークエリには以下のようにすることで取得できるようになりました。
(cr51a_datetime eq null) or (cr51a_datetime eq '1900-01-01T00:00:00Z')
ただ、、、初期値で'1900-01-01T00:00:00Z'を入力している場合に区別がつかなくなってしまうので、別の方法があるかもしれません…
所感
値の扱い方はもうちょっと自然な感じになるともう少しローコードの利用ハードルも下がってくるのかなぁ、と思いました。
プログラムを組む人だとDatetimeとかDatetimeOffsetとか馴染みがあるのでピンとくる人もいらっしゃるかと思いますが、まだまだプログラム的な匂いが強いかな、と。