Dataverse ロールアップ列の再計算をPower Automateから実行する|Dataverse WebAPI

これまでずっと欲しかった機能「ロールアップ列の再計算」の構築方法が分かったので、メモ。

スポンサーリンク

Dataverseのロールアップ列

Dataverseのロールアップ列は、関連するテーブルのデータを集計する列のこと。

例えば、テーブル「Parent」とテーブル「Child」があって、ParentからChildに対して1:Nのリレーションがあるとき、
テーブル「Parent」にロールアップ列を追加して、
画像のように「Child」の列「Num」を合計を求めるよう設定してあげれば、
ロールアップ列(サンプルでは列名「Sum」)には関連するChildテーブルのNum列の合計値が入る。

ロールアップ列は即時更新ではない

とても便利なロールアップ列だけど、この値は即時更新はされず、以下のタイミングでの更新となる

  • UIから明示的に再計算を実行したとき
  • 一定のタイミング

「一定のタイミング」の更新は間隔を短くすることもできるけど、確か1時間に1回が限度だった(はず)。

ということで、ほぼ即時に近い更新をしたい場合は、このロールアップ列は使いにくかった。

Power AutomateからDataverseのWebAPIを叩いて更新

そんな中、先日こちらの記事を発見し、Power AutomateからDataverseのWebAPIを呼び出して、ロールアップ列を再計算させる方法があることを知った。
How to update calculated columns in Dataverse instantly with Power Automate
Rollup column values are not updated in real time by default, causing confusion for Power Apps users. Here’s how cloud f...
今回使用するAPIは「CalculateRollupField」APIで、このAPIを使って再計算を実行するPower Automateを試してみる。
CalculateRollupField Function (Microsoft.Dynamics.CRM)
Calculates the value of a rollup attribute.

Power Automate構築

事前準備:WebAPIの呼び出しURLの作成

今回使うWebAPIは以下の形式になっている。

【環境URL】/api/data/v9.2/CalculateRollupField(Target=@EntitySetName,FieldName=@FieldName)?@EntitySetName={'@odata.id':'【テーブルのセット名】(【対象レコードのGUID】)'}&@FieldName='【ロールアップ列の論理名】'
必要な値は以下の4つ。

  • 環境URL
  • 親テーブルのセット名
  • 親レコードのGUID
  • ロールアップ列の論理名
まず環境URLはPower Platform管理センターから取得して、
親テーブルのセット名はテーブルの[ツール]から取得できる。
最後にロールアップ列の論理名を取得して、
https://orgXXXXXXXX.crm7.dynamics.com/api/data/v9.2/CalculateRollupField(Target=@EntitySetName,FieldName=@FieldName)?@EntitySetName={‘@odata.id’:’cr861_parents(【対象レコードのGUID】)’}&@FieldName=’cr861_sum’

※orgXXXXXXは自分の環境のURLに変えてください。

GUIDはこれから作成するフロー内で設定する。

フロー構築

そしたらPower Automateを作成していく。

まずトリガーは子テーブル(Child)の「行が追加、変更、または削除された場合」を使用。
続いてアクションに「Entra ID(preauthorized)」の「HTTP要求を呼び出します」を選んで、
URLとURIにDataverseの環境URLを設定して、接続を作成する。
そしたら「GET」を選んで、先ほど作成したWebAPIの呼び出しURLを入力。ここでGUIDに「親テーブルの(値)」を設定。

これでフローは完成。

動作確認

動作確認のためChildのレコードのNum値を20に更新してみると、
フローが起動して、
再計算を押さなくても、無事にSum列が更新される。

これで無事にロールアップ列を明示的に再計算させることができるようになった。

とは言えひょっとしたらロールアップ列の計算は思った以上にリソースを食う可能性もあるので、必要最小限のとこのみで使用する方がよいかもしれない。

おまけ:HTTP要求アクションで「Base ResourceUri must be a base of the full url」が発生する場合

フロー実行時にエラー「Base ResourceUri must be a base of the full url」が出るときは、接続の作成が間違っている可能性がある(過去に自分で作成した別のリソースへの接続が生きていたり)。
このエラーが発生するときは[接続]タブへ移動して、該当の接続の[編集]をクリックし、
過去に作った別のリソース(画像はSharePoint)へのURLが入っていないかをチェック。

修正方法はこの接続を直してもいいし、Entra IDへの接続をもう一個作成してもよい。

関連記事

コメント

タイトルとURLをコピーしました