ふらりのメモ書き

Microsoft 365 , Power Platform らへん

【Power Automate】Dataverse の高度なフィルターを簡単に作成する話


Power Automate で Dataverse の「行を一覧にする(List rows)」アクションで FetchXML クエリ を超カンタンに利用する方法をまとめてみました。
※Power Automate の クラウドフローを取り扱います。
※Power Apps の モデル駆動型アプリを利用しますが、カンタンです。
※Dataverse のテーブルは Dynamics 365 Sales のサンプルデータを利用しています。
※今回は長い...長いったら長い。

Dataverse の参照先のテーブルのデータも取得したい

Dataverse で 取引先企業取引先担当者 というテーブルが2つあります。取引先企業取引先責任者 列は取引先担当者のテーブルを参照しています。

Power Automate で取引先企名と取引先責任者名とその方の役職を取得し、「鹿児島市」でフィルターしたデータがほしいを今回は検証します。

こういうデータが取得したい。

Power Automate の 「行を一覧にする」アクション

使うアクションは「行を一覧にする」アクションです。
条件を設定してデータを取得するには、OData クエリと FetchXML クエリ が利用できます。

左がFetchXMLクエリ、右が OData クエリ。

OData クエリ の場合

OData クエリ は Power Automate をやっていく上では避けては通れないけど、ローコードを初めてやった人にはなかなかハードルが高いような気がします。
今回は詳細は説明は割愛します。

ドキュメントはこのあたり。
learn.microsoft.com

FetchXML クエリとは

FetchXML クエリは 「Microsoft Dataverse 独自の XML ベースのクエリ言語」になります。
ちょっと自分で書こうとすると厳しいです。
これを簡単に作成する方法があります。

learn.microsoft.com

FetchXML クエリ を カンタン に 作成!

モデル駆動型アプリを使うと カンタン に作成できるんです。

モデル駆動型アプリ で FetchXML クエリ の取得手順

Power Apps の https://make.powerapps.com/ の ホーム >空のアプリ > Dataverse ベースの空のアプリ(モデル駆動型アプリ)作成 ボタンを押します。

アプリの名前を設定して、作成

Dataverse テーブル を選択し、 次へ

すでにテーブルは作成済みのものを利用するので、既存のテーブルを利用するにチェック し、テーブルを選択します。
今回は 取引先企業 のテーブルを利用します。
あとで操作に困らないように、ナビゲーションに表示する にもチェックを入れておきましょう。
追加 をクリックします。

先ほど追加した 取引先企業 テーブルの 取引先企業ビュー を選択します。
保存し、公開して、再生します。
保存や公開は少し時間がかかります。

列の編集

Dynamics 365 Sales では、Common Data Model で定義されたテーブルを利用します。
取引先企業のテーブルもその一つです。
データを一覧で確認するのがビューなのですが、ビューがいくつか事前に作成されているので、今回は特にフィルターのかかっていない すべての取引先企業 ビューを選択します。

右上の列の追加をクリックします。

今回は、参照先の取引先責任者 の 役職 が欲しいので、関連タブから役職を検索し、取引先責任者(取引先担当者)の役職を選択します。
必要な列の追加が終わったら、閉じるで閉じます。

必要な項目を揃えたら、適用します。

フィルターの適用

続いて、フィルターを設定します。
先ほどの列の編集の隣の フィルターを編集する をクリックします。

+追加 から 行の追加 を選択します。
住所1:市区町村、次の値と等しい、鹿児島県 で設定し適用をクリックします。

再度、フィルターを編集するをクリックします。
FetchXML クエリのダウンロード ボタンをクリックすると、ブラウザで警告が出る場合がありますが、保存で保存します。

ダウンロードしたファイルをメモ帳やVS Code で開き、内容をコピーします。

Power Automate へ貼り付け

Power Automate で 行を一覧にする アクションを追加し、Fetch Xml クエリ の欄に先ほどコピーした内容を貼り付けます。
キャプチャーはわかりやすいように改行入れてみましたが、一行テキストをそのまま貼り付けてもらってOKです。

そして実行。
出力の未加工出力の表示をクリックし、その内容をVisual Studio Code に貼ります。

欲しかったデータが取得できていることがわかります。 赤枠の部分が取引先企業のデータ。
黄枠の部分が取引先責任者(取引先担当者)のデータ。
赤枠は動的コンテンツとして簡単に選択できるのですが、参照先のテーブルはちょっとコツがいります。

抜粋

"value": [
            {
                <中略>
                "name": "アルパイン スキー ハウス",
                "address1_city": "鹿児島市",
                "_primarycontactid_value@OData.Community.Display.V1.FormattedValue": "金城 彩乃",
                <中略>
                "a_2c3f75a16f394536be93b0afedaddc52.jobtitle": "購買課長",
                <以下省略>
             }
]

参照先テーブルの指定

Dataverse からデータを取得した後のアクションで利用する際に、参照先が動的コンテンツで追加できないので、手動で追加します。
@item()?['<キー>'] のように記載すれば、いいので、下記のようになります。
※ちょっとここが難しい。
※環境によってキーが変わる可能性があるので、ご利用中の環境の出力結果をよく確認ください。

参照先の取引先担当者の表示名と役職

@item()?['_primarycontactid_value@OData.Community.Display.V1.FormattedValue']
@item()?['a_2c3f75a16f394536be93b0afedaddc52.jobtitle']

さいごに

FetchXML クエリは頑張ってゼロから書こうとすると難易度が高いですが、モデル駆動型を使うとマウスポチポチ作業でフィルターを作成できるので便利です!
モデル駆動型も最後まで作りきらなくてもよいので、敷居も低いのがポイント!
是非、使ってみてください!