Power Automate Dataverseコネクタ その⑥ Expand Query (クエリの展開)で参照列のレコード値を一度に取得!

はじめに

以前の記事で「Power Automate Dataverseコネクタ 」のシリーズを書いていましたが、今回久しぶりに思い出したのでExpand Query(列の展開)について。
参照先の値を取るのにGUIDからそのテーブルへ別アクションで取得が出来ますが、それせずとも一回で取れるので便利ですよ!という内容です。

Dataverseコネクタのトリガー、アクションの概要については以前の記事、シリーズをご参考ください。

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

Expand Query (クエリの展開)

アクション「IDで行を取得する」、「行の一覧を取得する」にある以下の項目「クエリの展開」(Expand Query)についてです。
簡潔に言うと、ここに参照列を指定すると、参照先(親テーブル)の他の列情報も一緒に取ってこれます。
カンマ区切りで複数の指定が可能であり、また、($select=列名)で欲しい列のみ指定も可能です。

  • 参照列(論理名)を指定すると参照先の情報も取ってこれる
  • カンマ区切りで複数指定が可能
  • $selectで取得する列を指定が可能

以下実際に実装した場合の例です。
テーブル:明細 へのIDで行を取得アクション、行の一覧を取得アクションで、それぞれクエリの展開に、
見積テーブルへの参照列(new_mitsumori)と作成者列(createdby)を論理名で指定しています。
例ではシンプルに2つをカンマ区切りで指定しており列の指定はしてません。

IDで行を取得するアクションでの指定
行を一覧にするアクションでの指定

取得結果のJSONを見ると以下のように指定した参照列のその他情報が取得出来ています。
※クエリの展開をしていない場合、参照列はGUIDとプライマリ列の情報位しかとれません。

取得結果のJSONを見ると指定した参照列の情報が一緒に取れている


上記の参考にサンプルでは以下のようなリレーションとなっています。
見積と明細が1対Nでリレーションされている。
作成者列は既定であるユーザー列を参照した列で自動で作成したユーザーが入っています。

動的なコンテンツで指定できるようになる!

上記はJSONの結果を見ていますが、この値が動的なコンテンツで指定できるようになります。

大変便利ですね!この例では明細の親テーブルである見積名や作成者のメールアドレスや姓名を指定してみます。

参照先の列情報が指定できるようになる!

上記の場合以下のような数式になってます。

Code@{outputs(‘ID_で行を取得する’)?[‘body/new_mitsumori/new_name’]}
@{outputs(‘ID_で行を取得する’)?[‘body/createdby/internalemailaddress’]}
@{outputs(‘ID_で行を取得する’)?[‘body/createdby/lastname’]}@{outputs(‘ID_で行を取得する’)?[‘body/createdby/firstname’]}

実行すると以下のように通常だと取れない参照先テーブルの情報が取れています。
これで一旦自テーブルの分を取って、さらに参照先テーブルから別アクションで取ってくる。というのが不要で一発で利用可能となります

$selectで列の指定をするのがベター(パフォーマンス的に)

上記のようにシンプルに参照列を指定すれば取ってこれますが、不要な情報もいっぱいあるのでパフォーマンス的には必要な列のみを指定するのが良いですね。その場合は以下のような書式で指定します。

※以前はどっちかがスキーマ名でもうひとつが論理名だったような記憶もあるのですが、いまやってみたらどちらも論理名でOKでした。違う実装の時と勘違いしていたかもです💦

TIPS特に複数のレコードを取得する際などはデータ量が肥大化するので必要な列のみを指定するのがベターですね。

Code<参照列の論理名>($select=(<列の論理名>,<列の論理名>,,,)

上記のサンプルに利用する列の指定をしたものが以下です。

Codenew_mitsumori($select=new_name)
,createdby($select=internalemailaddress,lastname,firstname)

上記のように列を指定した場合はその列のみ取得され、動的なコンテンツでも指定した列のみが追加で表示されます。

所有者列は対応しない(ユーザーORチームだから)

よく利用する所有者列に対して上記を行った場合はエラーにはならないですが取って来てくれません。
これはOwner列はユーザーまたはチームが入る可能性があり参照先がユーザーテーブルまたはチームテーブルになるためだと思います。

このような特別な列の場合は、対象テーブルへGUIDで取得する別アクションでの対応が必要です。

おわりに

前回のシリーズ記事からだいぶ空きましたが、久しぶりにこの辺りを触って思い出したので記事にしました。
Expand Queryを活用するとパフォーマンス向上、実装もスマート、アクションも減るといい事だらけです。サンプルのように親テーブルの情報やユーザーのメール取得など色々活用できます。
ぜひDataverseコネクタを利用する際は覚えておいてください!それでは!

その他外人さんの参考記事:
Using Expand Query in Power Automate with Dataverse | Dynamics 365 – Fredrik Engseth

関連

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


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

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

ヨウセイ

ヨウセイ

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

関連記事

コメント

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

CONTENTS