はじめに
TIPSこの記事は、Microsoft Power Automate – Qiita Advent Calendar 2025 シリーズ2 12月19日 担当分の記事です。
前回の記事「」ではDataverseテーブルのセット名での動的な指定をご紹介し、おもに列の取得アクションのサンプル紹介でした。今回は更新する際のサンプルを軽くご紹介します。
利用用途は子フローで呼び出して共通で利用している列の値を更新したり、複数テーブルをループして1アクションで共通の列を更新する。などでしょうか。
セット名でのDataverseテーブルアクションのテーブル指定の流れは前回記事ご参考ください。
動的なテーブルの更新
前回のようにセット名を変数やパラメータで指定することで動的なテーブルの指定ができます。
同じ処理を複数の似た構成のテーブルに1つのアクションで実行する場合などに有用です。
今回は更新アクションを使って動的なテーブルのレコードの作成や更新のご紹介ですが、この際にはポイントがあります。
- 動的な指定となるため更新はJSON形式で列の論理名を指定して設定となる
- 各テーブルに同じ論理名の列がないとエラーとなる
- レコードの更新の場合に一位識別子列(GUID形式)が必要となるがテーブルごとに変わるため調整が必要!
上記のポイントを加味して更新するサンプルをご紹介します。前回も利用した2つのサンプルテーブルAとサンプルテーブルBを使用します。どちらも同じ論理名を付けた共通の列を一部使っているのでその列を更新します。
サンプルテーブルAとサンプルテーブルBのデータ
Name、テキスト列A、担当部門や担当者は同じ論理名をで作っています。
また、既定の作成日、作成者や所有者列などはもともと同じ論理名となっています。

前回のサンプルをベースにレコードの追加のサンプル
前回以下2つのセット名を用意してApply eachで利用しました。今回も同じセット名の配列を利用します。

それぞれに適用する(Apply each)を用意し上記の配列を指定します。

動的な指定の場合、列の入力候補は出てこない!
以下は普通にプルダウンからサンプルテーブルAを指定した場合です。通常、存在する列がUI上で入力しやすいように出てきてくれます。が、変数などで動的にテーブル名をセット名で指定した場合は出てきてくれません(これはSharePointやExcel Onlineのテーブルも同じ)

動的なセット名指定では表示されない!
どのテーブルなのかわからないので当たり前といえば当たり前ですね。クラシックエディターでも同様です。

行の項目にJSON形式で指定する。論理名と値を書く
変わりに行の項目という列が表示されます。ここにJSON形式で必要な列名と値を書けばOKです。
以下、2つのテーブルで共通で使っている論理名にそれぞれサンプルの値を指定してみます。
| 表示名 | 論理名 | 型 |
| Name | cr31f_name | テキスト型 |
| テキスト列A テキストA | cr31f_texta | テキスト型 |
| 担当部門 担当 | cr31f_bumon | グローバル選択肢で同じものを参照 |
TIPS選択肢を指定する場合はラベル値ではなく値を指定する必要がありますので数値型での指定となります。
Code{
“cr31f_name”:”サンプルName”,
“cr31f_texta”:”サンプルテキスト”,
“cr31f_bumon”:1
}

実行:2つのテーブルにデータがインポートされる
実行すると以下のように成功しました。
テーブルの情報を見ると指定したレコードがそれぞれに追加されていることがわかります。
こちらはサンプルなので固定値ですが、実際にはテーブルごとに動的に値を指定して登録するイメージとなるかと思います。
NOTE注意点:
テーブルに存在しない列(論理名間違い)がある場合はそのテーブルはエラーとなります。
また、値のデータ型も重要です。テキストはダブルクォート囲み、選択肢や数値は数値型でそのまま、検索列は/systemusers(GUID)などで指定など、それぞれ書き方が異なります。


レコードの更新の場合は、一意識別子列の値が必要!
上記作成の場合はいいのですが、更新の場合はレコードを指定するための一意識別子の値を含む必要があります。
この列名はテーブルごとに異なります。が、ルールがあります。テーブルの論理名+id となっています。
Code一位識別子列(GUID)→テーブルと同じ名前の列の論理名のルール:
テーブルの論理名+id
これを利用すればテーブルごとに一位識別子列の論理名が作成できます。
サンプルテーブルAの場合はcr31f_sampletableaid 、Bの場合はcr31f_sampletablebid となっています。
それぞれ動的に指定する必要があるのですが、今回はセット名(テーブル論理名+s)の配列を使ってループしているのでそれを加工して指定するサンプルとします。(セット名の末尾sを取って、idを追加する)
本来であれば、JSON形式でセット名、一意識別子列名を持たせて、Apply eachで指定する形になるかと思います。

行IDの項目には数式では以下を入れてます。末尾をカットしてidを追加
セット名から一位識別子列名を生成
cr31f_sampletableas →cr31f_sampletableaid
cr31f_sampletablebs →cr31f_sampletablebid
一意識別子列の値を先に取得
入力時は行IDの入力欄に一位識別子列の値(GUID形式のもの)を指定が必要です。
突貫のサンプルなのでここではいったん、事前にテーブルから1番目のレコードを取得しています。
@{first(outputs(‘行を一覧にする’)?[‘body/value’])}

一意識別子列の列名をセット名から生成して指定する
上記で取得したデータから一位識別子列の列名をconcatで生成(セット名の末尾sを取りidをくっつける)で列名を指定して値を取るように書いています。これで一意識別子列の値が取得できてます。
Code行の更新アクションで行IDに指定する式:
outputs(‘作成_サンプルで1行目を取得’)?[concat(substring(items(‘それぞれに適用する’), 0, sub(length(items(‘それぞれに適用する’)), 1)),’id’)]

次の行の更新アクションで行IDに先ほどの出力を指定します。
分かりやすいようにいったん作成アクションにしていますが、数式を直接ここに書いてもOKです。

実行すると以下のようにそれぞれ一意識別子の列名から値が取れています

各テーブルを見るとどちらも一番目のレコードが更新(修正日で確認)されているのがわかります。

おわりに
今回はDataverseの動的な指定での取得に続き、各テーブルの更新について記事にしました。
動的なので、設定項目はUIに表示されないためJSONでの指定が必要、列の論理名での指定、データ型にも注意などポイントは多いですね。また更新の場合は一意識別子列の特定と値の取得が必要な点もあります。
上記のようなTipsを応用すれば、各テーブルで共通の列を一つのアクションで子フロー呼び出しで更新したり、ループで更新したりということに活用できます。
それほどテーブル数がない場合などは不要なテクニックだと思いますが、大規模なシステムの場合や共通構造のテーブルが多い、処理を共通化したい。などの用途に活用できるので、そんな時が来たらためしてみてください。それでは!
関連記事
はじめに TIPSこの記事は、Microsoft Power Automate - Qiita Advent Calendar 2025 シリーズ2 12月18日 担当分の記事です。 以前の記事で「Power Automate Dataverseコネクタ 」のシリーズを書いていました。今回...
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。

コメント