はじめに
以前の記事で「Power Automate Dataverseコネクタ その② 検索列(参照列)のフィルター指定」
を書いたのですが、その際は参照列の構成とフィルターで指定する際の方法を記事にしました。
今回は列と列を関連付ける(リレーションする)方法について記載します。
Dataverseコネクタのトリガー、アクションの概要は上記で書いた記事をご参考ください。
先日JPPC2023(Japan Power Platform Conference 2023 )のメインイベント 12/ 8 のアプリ&サイト開発Application AP-09セッションで登壇させていただきました。こちらの記事については別途自分ブログで書こうかと思いますが、 この中で軽くお...
Power Automate Dataverseコネクタ その② 検索列(参照列)のフィルター指定
TIPSDataverseコネクタはDataverse for Teamsでも基本同様の内容となりますので、
そちらの実装の場合の参考ともなるかと思います。
検索列について
検索列については以前の記事で解説していますのでそちらをご参照ください。
Power Automate Dataverseコネクタ その② 検索列(参照列)のフィルター指定 | Power Apps Tips ログ (youseibubu.com)
要は他のテーブルとリレーションを組むものなんですが、基本的には1:NとN:Nのリレーションが存在します。
この1:NのN側には1の列を参照する検索列が用意されます。
N:Nの場合はどちらも複数なので検索列は用意されません。
(N:Nはもっと構造が複雑なのでまた別の機会にでも)
上の図でいうと、明細テーブルは見積を親として一つ参照しているイメージです。
この場合は明細テーブル側に見積テーブルへの参照列が存在します。
明細テーブルのリレーションシップ画面で見ると以下のように見積に対して(明細からみて)N:1のリレーションが張られています。
見積テーブル側にも同様に(見積側からみて)1:Nのリレーションが張られています。
1:NのN側には検索列が作成されています。先に検索列を作った場合は上記のリレーションがあわせて張られる挙動です。
列を見ると以下のように検索列となっています。
詳細では関連テーブル(リレーション先)や列の論理名などが確認できます。
検索列の値(参照先のレコード)をAutomateで指定する方法
これは2パターンありまして、ひとつは用意されているアクションを使うパターン、
もう一つは他の列種別と同様に作成や更新時アクションで参照先の値を指定する方法です。
- 行を関連付ける、解除するアクション
- レコードの作成や更新で値を指定する
行を関連付けるアクション
「行を関連付ける」
1:Nのリレーションで1側のテーブルを指定する必要があります。
今回の例だと明細テーブルではなく見積テーブルとなります。
NOTEN側(子供)のテーブルを指定しても出来ないので間違いないように。
このアクションの場合は1側(親)のテーブル側からの設定になります。
・テーブル:見積テーブルを指定します
・次にリレーションシップをプルダウンで表示すると
明細テーブルと1:N でリレーションしているものが表示されるので選択します。
・IDには見積テーブルのレコードの一意識別子(テーブルと同じ名前の列)の値を指定します。
動的な要素の場合ならテーブルと同じ名前の一意識別子(GUID)を指定すればOKです。
見積テーブルの場合は見積ですね。
・関連付け:関連付ける側(明細)の「OData ID」を指定します。
通常の一意識別子ではだめで、Odata IDというものになります。こちらも事前に情報を取得すれば動的コンテンツから指定できます。
以下の例では行IDには見積テーブルの特定レコードのGUID(一意識別子)をベタで指定し、
関連付けは一覧で取得した明細テーブルの各レコードのにOData IDを動的コンテンツで指定しています。
上記で実行すると一覧で取得した明細のリレーション先が指定した見積となり、以下のように関連付いて表示ができますね。
「行を関連付けを解除する」
こちら関連付けを解除するアクションです。
同様の項目、設定値をしていすればリレーションが解除されます。(画面イメージ割愛)
列の作成・更新時に検索列(参照列)を指定する
上記はリレーションを設定する専用アクションですが、
通常のレコードの作成・更新アクションでも他の項目と合わせて検索列を指定して更新が可能です。
ただ、この記載方法がちょっとクセがあります。ここは初学者のつまづきポイントです。
TIPS結果から言うと、参照先テーブルのセット名[EntitySetName](参照先レコードのGUID)という形式で指定が必要です。
ちょっと何言っているかわからないですよねw
たとえばユーザーテーブルであれば[ systemusers(ユーザーのGUID) ]となります。
普通のテーブル論理名ではなく、複数形のテーブル論理名と同じとなっています。
ただ実際にはこれではなく[EntitySetName]というのが使われます。
カスタム作成したテーブルだと列名には接頭辞が付きますし、日本語だとそもそも画面では複数系の名前も普通のテーブルと同じ名前になっていてこの情報がわかりません。形式的には接頭辞が付いたテーブル名の複数形の名前ですべて小文字となります。
この辺りは有識者の方が記事にされていますので気になる方はご参考ください。
How to Set Lookup Column Value in Microsoft Dataverse Connector in Cloud Flows (linnzawwin.blogspot.com)
セット名を確認する方法
TIPS★この[EntitySetName](セット名)ですが、いまのモダンの管理画面だとサクッと取得が出来ます!
この部分以前はクラシックの深いところにいったりAPIから見たりで確認必要だったりしましたが、
基本は末尾を複数形にしたら行けるって感じでした。ので勘でsやes付けたりして対応したりもww
いまだとこのセット名を取得とすれば一発で取れます。
TIPSテーブル>対象テーブル>ツール>セット名をコピーする
上記のユーザーテーブルの場合は「systemusers」が取れます。
今回の見積テーブルの場合は「new_mitsumoris」が取れました。
想定どおりテーブルの論理名が「new_mitsumori」なので末尾に複数形のsが付いた感じですね。
※意味のないローマ字なら大体末尾にs、英語で意味ある場合は文脈によりesだったりする
ということで、この見積テーブル用のセット名を使って検索列を指定してみます。
セット名を指定して検索列を指定
サンプルとして親の見積のレコードを一つ指定
行の一覧では明細を取得→3件までにしてます。
行を更新するで見積列には以下を指定
Code//見積(検索列)の設定値
new_mitsumoris(@{outputs(‘ID_で行を取得する’)?[‘body/new_mitsumoriid’]})
※セット名(参照先のレコードGUID)
そうすると3つ指定した明細が指定した見積に1:Nで紐づきて表示されています。
所有者などのユーザー列指定も同様
ユーザーの指定はsystemusers(ユーザーのGUID)
ユーザー列はカスタムで作成した担当者列や承認者列、所有者列などによく使うと思いますが、
ユーザーを指定する場合はsystemusers(ユーザーのGUID)で指定すればOKです。
Code//ユーザーを指定する場合
systemusers(ユーザーのGUID)
チームの指定はteams(チームのGUID)
また所有者列にはチームを入れることもあります。チームにしたい場合は
teams(チームのGUID)とすればOKです。
以下はサンプルでAAAという所有者チームを作って指定した場合です。
Code//チームを指定する場合
teams(チームのGUID)
いずれもテーブルのセット名のコピーから取得できるのでわかってしまえば簡単ですね!
おわりに
ということで今回は検索列(参照列)の設定についてのパターンと作成・更新時のポイントなどを記事にしました。
特にユーザー列を指定しようとする場合にあれ?普通に書いてもエラーなんだけども。。
と初見者泣かせの部分ですのでこの記事がお役に立てれば幸いです。
どうしてもDynamicsから来ている仕様で裏っかわが複雑だったりするのですが、
いまはモダンのデザイナーもどんどん使いやすくなってきているので、ポイントを押さえておけばおおむね対応できるかと思います。それでは!
関連
モデル駆動型のカスタマイズ(カスタムページ・コマンドバー)で登壇しました。
★2024/2月更新 YouTubeに登壇動画アップしました! 本家のYouTube動画の紹介動画をYouTubeチャンネルを立ち上げてアップしました!併せてご視聴ください~!https://youtu.be/PUam5v9ALQk?si=JTpbU0DUCg342hle...
Dataverse 関連:
Dataverse | Power Apps Tips ログ (youseibubu.com)
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。
コメント