LoginSignup
1
2

More than 3 years have passed since last update.

MS FlowでDynamics 365のN:N関連を読み込む

Last updated at Posted at 2019-08-27

D365コネクターについて

D365コネクターは非推奨になりました。
D365コネクターでなくCDSコネクターをお使いください。

概要

Power AutomateでN:Nの関連付けを取得しようとしても、アクションに該当するものはなく、工夫しないと取得できません。
レコードの一覧取得を使って取得できるのですが、デフォルトでプルダウンに表示されるエンティティ名には、N:Nの関連付けに該当するエンティティはありません。
そこで、WebAPIによりN:Nの関連付けを管理するエンティティに対してselectをかけられることを利用します。create,updateは試していません。

N:Nの関連付けを利用する例として、Contact(取引先担当者)とadx_webrole(WEBロール)の関連を取得する場合をあげます。
これによって、ポータルアドオンを使用しているときにMS Flowによってできることの幅が広がりました。
WEBロールはポータルアドオンで使用するエンティティで、セキュリティロールのような役割をポータルアドオンで果たすものです。セキュリティロールと違い、カスタムエンティティとして存在しています。

下図はデフォルトで表示されるエンティティ名を見ているところ
image.png

本記事は下記を参考に作成しています。
https://www.sikich.com/insight/how-to-find-n-n-relationships-with-dynamics-365-logic-apps-and-flow/

ポータルアドオンについては下記吉田さんのサイトを参照
https://memo.tyoshida.me/powerapps/what-is-powerapps-portal/

私もポータルアドオンの概要について記事を書いています。読みにくいかもしれませんが。。
https://qiita.com/dinok/items/f007eac57f0acd0cb5af

N:Nの関連付けを使ったPower Automateを組む

N:Nの関連付けをWebAPIで読み込む

https://[組織名].api.crm7.dynamics.com/api/data/v9.1/

上記のURLをブラウザで打つと、エンティティのリストが出ます。
Contact(取引先担当者)とadx_webrole(WEBロール)の関連はエンティティ名(contactなど)で検索していくとそれっぽいものが見つかります。
image.png

このadx_webrole_contactsetをURLのお尻につけると、エンティティのレコードも取得できます。
adx_webroleid(MS Flowで言う一意の識別子、レコードごとに割り振られるGUID)とcontactidのペアが取得できていて、N:Nの関連っぽいということが分かります。
image.png

MS Flowのエンティティ名に入れると「一致する値がありません」と出ますが、気にせずに「カスタム値の入力」を押して"adx_webrole_contactset"を入力することで、N:Nの関連付けを取得できます。
image.png

Contactごとに付与されているWEBロールを確認する

その際にはこのようなMS Flowになります。
ポータルユーザーはContact(デフォルト名:取引先担当者)のことで、エンティティ名を変えています。
このMS Flowだと、ポータルユーザーの取得でフィルタークエリが空白なので、Contactを全取得しています。
取得したポータルユーザーに対して「Apply_to_each」を実行して、1つずつ順にみていきます。
image.png

N:N関連の取得条件でポータルユーザーのGUIDを使う

adx_webrole_contactsetのうち、contactidがApply_for_eachでループしているポータルユーザーのGUIDに一致するレコード(=ループ中のポータルユーザーについてのN:N関連付け)のみ取得します。
image.png

取得したN:N関係を条件判定に使う

ここでもう一つ問題に当たります。
取得したadx_webrole_contactsetのadx_webroleidを条件に使って、特定のWEBロールがポータルユーザーに付与されているかを確認したいのですが、動的なコンテンツにadx_webroleidが出てきません。

そこで、式を選択し、
items('Apply_to_each_2')?['adx_webroleid']
を入力し「OK」ボタンを押すと(OK押し忘れると消えるので注意)、値を使うことができます。
image.png

「次の値に等しい」の右側は条件として使用したいWEBロールのGUIDになります。下図では適当に"aaaa"と入れていますが、実際はWEBロールのGUIDを入れてください。
下図では空欄ですが、入力したWEBロールがポータルユーザーに付与されていた場合に行う処理を、条件分岐の「はい」に入れます。
image.png

下図は、全体図を入れるのが難しいので一部ですが、テストをすると動いたところです。
dx_webrole_contactsetへのレコード取得が成功していることが確認できます。
ちなみに、Dynamics 365のレコード作成のような、テストするときにトリガーを起こすのが面倒な場合は、「テスト」ボタンから前回の実施結果を利用して簡単にMS Flowを実行できます。
image.png

全体像

image.png

補足

Dynamics 365 = PowerApps モデル駆動型アプリと読み替えていただいて大丈夫です。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2