Power Automate Dataverseコネクタ その⑦ Power Fx 計算式列をトリガー指定すると動作しませんのでご注意 ※条件に指定は可能

はじめに

Dataverseトリガーでは更新された対象の列を指定できますが、従来の計算式列やPower Fx 計算式の列を指定してもトリガーされません。また検証した時点ではトリガーに指定を入れるとその後の挙動もおかしくなるケースがあったので記事にしました。また、条件としての追加は出来たのでそのあたりの備忘録となります。

Power Fx 計算式列(数式列)

DataverseでPower Fxで書ける計算式の列がGAされています。従来の計算式列は廃止予定のようなので、今後はPower Fx 計算式列を使用することが公式でも推奨されています。

Power Fx 計算式列(数式列)については公式情報をご参考ください。
Dataverse 数式列を使って作業する – Power Apps | Microsoft Learn

以下は今回利用した計算式列のサンプルです

Power Fx 計算式のサンプル

※従来の計算式列を作成しようとすると以下のように廃止予定と出る

 計算式列はフローでのトリガーには対応しない

従来の計算式列も同様ですが、Power Fx の計算式列でも同様にこの列の更新をトリガーすることはサポートされていません。 他の列の状態により内容が変動するためトリガー対象としての指定が難しいと思われます。

その他にもサポート範囲や閾値なども上記公式ページに載っているので、通常の列と違った点については把握しておきましょう。

Power Automate(クラウドフロー)で計算式列をトリガー対象列にすると動作しない

上記のようにサポートしない点が記載されていますので動作しないと想定されますが、以下のように計算式列をDataverseトリガーの「列を選択する」に指定してみます。

計算式列を指定してみる

上記を指定してDataverseの計算式列が変更されるように更新してもトリガーされず、フローは起動しません。
やはり計算式列の変更に応じたフローをトリガーすることは不可となります。

計算式列をトリガー対象にしてもフローはキックされない

★注意点: 一度指定すると消しても挙動がおかしい。複製して作成し直しが必要そう

上記でサポートされないことがわかるのですが、この後に列の指定から計算式列を外しても、トリガーされなくなりました。
空にすればどの列が更新されても動作するはずなんですが、まったく動作しなくなります。

列の指定を消してもなぜかトリガーされなくなる。。

他の列を指定してその列を更新したら動作するようになったのですが、その後にその列を消しても他の列でトリガーされない挙動となっていました。謎ですがどうも裏側で持っているトリガー判定の部分がおかしくなっちゃうような挙動です。

別の列を指定してその列を更新すると動作。その後に再度空にしてもその列にしか効かない挙動となった(謎)

トリガー作成しなおしてもおかしな挙動のまま

通常トリガーを削除して作成しなおせば大体この辺は解消すると思うんですが、削除してトリガーを作り直しても同様の挙動となり解消せずでした。謎ですが。

空にしてフローを複製したら復活した!

列の指定を空の状態で複製したら解消しました。(どの列でも更新トリガーが動作するようになった)

NOTE一旦計算式列を指定すると上記のようにおかしいまま戻らない状態になるよう(現時点)なので、そもそも指定しないようにご注意ください。した場合はフローを複製または一から作成し直す必要がありました。

条件に指定は出来る!

上記のように対象の列への計算式列の指定はサポートされず、やった場合はその後もトリガーがおかしくなるのでやめた方が良いです。

ただ、行のフィルターやトリガーの条件列に指定することは出来ました。
当初トリガーの条件に指定する方法なら動作するようだと以下のポストをしましたが、行のフィルターのほうだけ指定するのも同様に動作しました。

行のフィルターへ指定

以下のように行のフィルターへトリガーする条件としての指定は出来、想定通り動作しました。

トリガーの条件に指定

上記と同様の内容をトリガーの条件を指定する方法で書いた場合も同様に動作します。
※SPOの場合だとDataverseの行のフィルターという項目がないためこちらを利用が通常

列の選択や行のフィルターは空の状態でトリガーの条件に指定する

条件にはできるがその列が更新された場合に動作という指定は不可

上記ですが、計算式列の値が○○という条件で動作させることは可能ですが、計算式列が更新されたという判定は出来ていません。

上記の例で言うと、計算式列が高額に変われば動作はしますが、高額となっている状態でその他の列が更新された場合も動作します。
列の選択で計算式列を指定出来ればその列が更新されたときのみトリガーすることが出来るのですが、それがサポートされないためやむなしとなります。

計算列が高額の場合にトリガーする。高額となっていれば他の列が更新されてもトリガーされる

そのため、高額の場合に上長に承認依頼を通知するなどの実装をする場合には、その後にレコードが更新するたびに動作するので通知が重複する状態となります。

他の項目などを絡めたトリガーとしたり、動作後にフロー内で判定する必要あり

最初に更新された時にのみ動作させたい場合などは、その為の判定用の列を用意(Bool値など)してその処理が終わった後にその列の値を更新して、条件にその列の値も含めるなどで対応できそうです。

以下のように通常はFalseとなっているsoushinflag列を用意してフロー内で処理が完了したらTrueに更新する
トリガーにはその列がFalseとなっているという条件を追加しています。このようにすれば無駄にトリガーされることを防ぐことが出来ます。

その他、もともとある列と絡めて判定が出来るのであればその列を使うのも良いかと思います。
(ステータスの列がありそれと合わせて判定すればOKな場合など)

フロー内で処理したらTrueとするフラグ用の列を用意して条件に追加する例

おわりに

今回はPower Fx計算式列とクラウドフローでのトリガー対応について記事にしました。
Power Fx計算式列は従来の計算式列よりだいぶ使いやすいのでぜひ活用いただければと思います。
計算式列がトリガーされない点は以前からなのでやむなしですが、結構要望の多いケースです。
そのままの対応は難しいですが行のフィルターと組み合わせて出来るだけ不要なトリガーがされないように調整は出来そうでした。
また、一度指定するとその後におかしな挙動となって複製や作り直しが必要だったのでその点の共有(備忘録)となります。それでは。

関連

Dataverse 関連:
https://youseibubu.com/tag/dataverse/

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

ヨウセイ

ヨウセイ

一般職からSharePoint、C#、.NET系技術者へ、そこからPower App、Power Automate技術者へと転身。 ワンランク上のおっさんはPower Appsでシステム開発が出来る〜! qiitaや自社HPでも技術ブログを書いていました。

関連記事

コメント

この記事へのコメントはありません。

CONTENTS