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ロールはポータルアドオンで使用するエンティティで、セキュリティロールのような役割をポータルアドオンで果たすものです。セキュリティロールと違い、カスタムエンティティとして存在しています。
本記事は下記を参考に作成しています。
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など)で検索していくとそれっぽいものが見つかります。
このadx_webrole_contactsetをURLのお尻につけると、エンティティのレコードも取得できます。
adx_webroleid(MS Flowで言う一意の識別子、レコードごとに割り振られるGUID)とcontactidのペアが取得できていて、N:Nの関連っぽいということが分かります。
MS Flowのエンティティ名に入れると「一致する値がありません」と出ますが、気にせずに「カスタム値の入力」を押して"adx_webrole_contactset"を入力することで、N:Nの関連付けを取得できます。
Contactごとに付与されているWEBロールを確認する
その際にはこのようなMS Flowになります。
ポータルユーザーはContact(デフォルト名:取引先担当者)のことで、エンティティ名を変えています。
このMS Flowだと、ポータルユーザーの取得でフィルタークエリが空白なので、Contactを全取得しています。
取得したポータルユーザーに対して「Apply_to_each」を実行して、1つずつ順にみていきます。
N:N関連の取得条件でポータルユーザーのGUIDを使う
adx_webrole_contactsetのうち、contactidがApply_for_eachでループしているポータルユーザーのGUIDに一致するレコード(=ループ中のポータルユーザーについてのN:N関連付け)のみ取得します。
取得したN:N関係を条件判定に使う
ここでもう一つ問題に当たります。
取得したadx_webrole_contactsetのadx_webroleidを条件に使って、特定のWEBロールがポータルユーザーに付与されているかを確認したいのですが、動的なコンテンツにadx_webroleidが出てきません。
そこで、式を選択し、
items('Apply_to_each_2')?['adx_webroleid']
を入力し「OK」ボタンを押すと(OK押し忘れると消えるので注意)、値を使うことができます。
「次の値に等しい」の右側は条件として使用したいWEBロールのGUIDになります。下図では適当に"aaaa"と入れていますが、実際はWEBロールのGUIDを入れてください。
下図では空欄ですが、入力したWEBロールがポータルユーザーに付与されていた場合に行う処理を、条件分岐の「はい」に入れます。
下図は、全体図を入れるのが難しいので一部ですが、テストをすると動いたところです。
dx_webrole_contactsetへのレコード取得が成功していることが確認できます。
ちなみに、Dynamics 365のレコード作成のような、テストするときにトリガーを起こすのが面倒な場合は、「テスト」ボタンから前回の実施結果を利用して簡単にMS Flowを実行できます。
全体像
補足
Dynamics 365 = PowerApps モデル駆動型アプリと読み替えていただいて大丈夫です。