Dataverse(CDS)からの日時型の扱い

PowerAutomateでハマったこと

最近お仕事でPowerAutomateを使って業務ロジックを作ってるのですが、Dataverse(CDS)からのデータ取得する際にハマったポイントがあったので備忘録として。

日時型の列

Dataverse(CDS)にてテーブルを作成した後、列の追加が自由にできます。この時時間を扱うため、列を新規に追加し、データ型を「日時型」にしました。

f:id:akky97:20210226213621p:plain
日時型列の追加

PowerAutomateのCDSアクション

CDSアクションで「データの取得」というものがあり、ここの拡張部分にクエリを入れる箇所があります。ここに取得するための条件をいれることで、取得対象とするデータを絞ることができます。

f:id:akky97:20210226214139p:plain
「行のフィルター」欄に条件を入れる

ここで、先ほどの追加したデータ列が空のものを対象にしたいと考え、以下のように入力しました。列名は表示名ではなく、名前の部分を指定します。

f:id:akky97:20210226214403p:plain

テーブルにも以下のデータを入れてみました。

f:id:akky97:20210226214815p:plain
「日付テスト」列は空

フローを実行して新規に入れたレコードが検出されるか試してみます。

f:id:akky97:20210226215547p:plain
「未加工出力の表示」をクリック

右側から出力結果が確認できます。

f:id:akky97:20210226215818p:plain
追加したデータが確認できた

先ほどのレコードに日時を入れてみます。

f:id:akky97:20210226220225p:plain
「日付テスト」列にデータを入れる

再度、フローを実行してみるとデータ取得できません。(そりゃそうですね)

f:id:akky97:20210226220450p:plain
Value」に何も入っていない

そしてもう一度データを空にしてみます。

f:id:akky97:20210226220702p:plain
先ほど入力した値を削除

これでもう一度フローを実行してみます。

f:id:akky97:20210226220902p:plain
ヒットしない...

ですが、レコードは取得できません...

テキスト型だとこの方法でも取得できるのですが、日時型だと取得できませんでした。

何が返却されているのか

空がマッチしないなら何か値が入っているのだろうということで、フィルターを消して全件取得するようにしてフローを実行して見てみると...

ありました。

f:id:akky97:20210226221751p:plain
"cr51a_datetime": "1900-01-01T00:00:00Z"

'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とか馴染みがあるのでピンとくる人もいらっしゃるかと思いますが、まだまだプログラム的な匂いが強いかな、と。