Power Automate Dataverseコネクタ その⑤ 多対多(N:N)リレーション の値参照の方法

はじめに

以前の記事で「Power Automate Dataverseコネクタ その④ 検索列(参照列)の関連付けと値の設定」
を書いたのですが、その際は1:Nの参照列を関連付ける(リレーションする)方法について記載しました。
その他多対多(N:N)のリレーションがありますが、こちらの場合には参照している列というものはどちらのテーブルにもなく、関連付けテーブルが自動で作成されてそちらで情報を保持されています。しかも通常は表面には出てこないテーブルです。
今回はこちらをPower Automateで参照する方法について記載します。

NOTE今回はN対Nの構造などご説明していくと長尺になるので、そのあたりは認識があり、とにかく関連付いている列を取りたいんだ!という方向けの実装面メインの内容となります。

Dataverseコネクタのトリガー、アクションの概要は上記で書いた記事をご参考ください。

Power Automate Dataverseコネクタ その④ 検索列(参照列)の関連付けと値の設定

多対多(N:N)の関連付け

こちらについては概要など公式ご参考ください。

Microsoft Dataverse の概要で多対多のテーブルの関連付けを作成する – Power Apps | Microsoft Learn

簡単にはこの関連付けを行うと、どちらのテーブルにも検索列は出てこない(それぞれが多なので)
どちらのテーブルのフォームにもサブグリッドを入れれる。そこで列の追加など操作できる。

★多対多のリレーションシップを作成するとシステムが関連テーブルを自動作成します!
そしてここに関連付けの情報を持っています!

リレーションシップ名と別に関連テーブル名が出来る


当然もう一つのテーブルにも多対多のリレーションが作られ、同じ関連テーブルを持っています。

画面上では互いにフォームにサブグリッドを出し追加したり操作が出来る

明細フォーム上に受注情報のサブグリッドを出してリレーションを設定

受注情報側にもサブグリッドで明細を表示

上記のサブグリッドから対象レコードをクリックするとリンク先の受注情報フォームに遷移して
こちらにも関連付けの情報が出ているのがわかる

Power AutoamteでN:N用で関連付けはアクションで出来る

これらをPower Automateで操作する際に、そもそもどちらのテーブルにも検索列はないので、
関連付けを行う場合はDataverseで用意されている関連付けるアクション(解除は解除するアクション)で出来ます。
以下のように多対多のリレーションを指定して対応するレコードID、ODataIDを指定する感じです。

※この部分は前回記事参考ください。
Power Automate Dataverseコネクタ その④ 検索列(参照列)の関連付けと値の設定 | Power Apps Tips ログ (youseibubu.com)

NOTEただ上記操作は可能ですが、そもそもそのレコードがどの参照レコードと関連付いているのかが取れません。
※明細No10レコードが紐づく受注情報がどれなのかがレコード情報からわからない。

たとえば、紐づく関連レコードを取得してそれぞれに対して処理を行う場合などですかね。それが普通には出来ないのです。なので以下の記事で関連情報を取ってくるというものに続きます。

Power Automateで関連付けを取ってくる方法

実は海外サイトなどググっていけばたどりつくのですが、日本語の記事は見たことないので書いてます。

TIPS結論:
関連付け情報は(システムが用意する)関連テーブルに保持している!
がそのままでは取れないので名前を調整して取得する!→最後にsetを付ける。です。

関連テーブル名

先ほどリレーションを作成した際に表示されている関連テーブル名です。ここにデータがあります。

以下の場合は「cr31f_new_meisai_new_torihiki」となってます

Power Automate 行の一覧を取得でカスタム値で指定

さっそく Automateで行の一覧を取得アクションを使ってプルダウンを見てみます。
入力してもそんなテーブルはないと出てきません。
→カスタム値で入力します。

でもこれでもエラーとなります。そんなテーブルはないよと言われます!

最後にsetを付けてやる。そうすると関連テーブルが取れる!

実は実際には違う名前で持っているようです。詳細については外人さんの以下の記事に書いてますが、
要は末尾に「set」を付けてあげればOKです。やってみます。

見事成功します!

みごと成功します

結果でそれぞれ紐づいているレコードとレコードのGUIDが確認できる!

この結果では、ひとつの関連付けを保持しているレコードのGUIDと、
多対多の1つ目の多側レコードのGUIDともうひとつの多のレコードIDが取れます。

細かい使用例は割愛しますが、
これをもとにメインとなるレコードのGUIDが一致しているものの一覧を取れば
紐づいているレコードのGUIDの一覧が取れますね。

最後にこちらの記事を外人の方が書かれてますので載せておきます。

おわりに

今回はN:N(多対多)の場合のリレーションについて、どうやって関連付けの情報を取るの?
という点を解説しました。
結構、躓きそうなポイントですが、英語サイトでしか出てこないので見つけづらいですよね。
また、テーブル名も実は調整必要だったりと厄介💦
そもそも複雑化する、扱いずらくなりやすいのでN:Nのリレーション自体はやめといたほうが良いという記事もみたりしますね。
この記事がお困りの方のお助けになれば幸いです。それでは!

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

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

ヨウセイ

ヨウセイ

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

関連記事

コメント

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

CONTENTS