記事について
本記事は、PowerAutomateでDataverseの特定のテーブルのフィールドとリレーションされているフィールドにデータを登録・更新するときの入力形式について説明します。
私自身、やり方がわからず長い間沼にハマってしまったので、被害者が今後増えないように、こんなことで貴重な時間を費やしてほしくない、という一心で記事を作成しました。
PowerAutomate、Dataverseって何?って方は以下の公式ページをご覧ください。
Microsoft PowerAutomateについて
Microsoft Dataverseについて
対象読者
- PowerAutomateとDataverseを駆使して、ゴリゴリにシステム開発をしているエンジニア
- PowerAutomateに慣れてきて調子に乗ってる中級者
- 英語が苦手で海外の文献を見てもエラーが解決できないエンジニア
私を長い間苦しめた意味不明なエラー
URL was not parsed due to an ODataUnrecognizedPathException. Resource not found for the segment provided in the URL.
エラーの説明
調べてみると、他のテーブルとリレーションがかかっているフィールドにデータを登録・更新するときに起こるそうです。
また、適切な入力形式ではない、論理名が適切ではないときに発生するエラーの模様です。
うーん、よくわからない。
エラーが発生したフィールド
画像1
取引先企業というテーブルにレコードを作成しようとしたときに発生しました。
レコード作成時に、AddressIDを入力データの一つとしており、そのフィールドはAddressというテーブルのAddressという一意識別子を参照しています。(ややこしい)
データの種類としては検索に当たります。
そして、AddressテーブルのAddressが合致するレコードのAddressIDがそのフィールドに入力されるわけです。
エンティティについて
エンティティは巷でよく言われるテーブルというイメージでとらえてもらって構いません。エンティティはそれ自体でテーブルとしての機能を果たすだけではなく、
フォームやビューといった機能を自己完結的に提供する箱というイメージです。
解決法
解決ポイント① 入力形式を理解できているか
Dataverseでは、リレーションがかかっているフィールドにおいて、そのままデータを入れるだけではうまくデータが格納されないように作られています。
画像1のように入力形式が決められています。
これを詳細に書くと、
参照先テーブルの論理名の複数形(参照先テーブルのリレーションがかかっているフィールドのデータ)
この例で書き直すと、取引先企業のレコードを作成しようとしているので、
Addressテーブルの論理名の複数形
(AddressテーブルのAddress)
となります。
複数形にするということがかなりのポイントです。脳死でsをつけてはいけません!!!
解決ポイント② テーブル(エンティティ)の論理名が分かっているか
解決ポイント①で
参照先テーブルの論理名の複数形
を示しました。
実際にテーブルの論理名を確認する手順をAddressテーブルで説明します。
-
PowerAppsからテーブルに移動します。
-
テーブルがずらっと出てくるので、論理名を知りたいテーブルをクリックします。
-
テーブルの概要がパッと見で見れるようになっています。
画像2はその画面に該当します。 -
テーブルプロパティのプロパティという部分をクリックします。
下にある'高度なオプション'というボタンを押すと、画像3のようなものが見れると思います。
画像3に表示されている論理名が今回入力するべきテーブルの論理名になります。
画像2
画像3
1つのテーブルには、テーブルの論理名と作成したフィールドごとに論理名が設定されます。
論理名を使うときには、どちらの論理名に該当するのかを考える必要があります。
最後に確認した論理名を複数形にする必要があります。そのため今回の場合では
画像3の論理名 -> 画像3の論理名 + s
とすればよいです。
テーブルの論理名の複数形を別の方法で確認
https://組織のエンティティ名.dynamics.com/api/data/v9.1/EntityDefinitions(LogicalName='テーブルの論理名')?$select=EntitySetName
組織のエンティティ名は、PowerAppsのホームで右上の歯車マークをクリックし、詳細設定をクリックすると
タブが新規で開かれるのでそのURLを確認すると以下のように記述されているので
https://○○○○.dynamics.com/....
組織のエンティティ名が○○○○に該当します。
テーブルの論理名は先ほど説明したPowerAppsから見る方法なりで確認し、入力します。
アクセスすると、
{"@odata.context":"https://ノベルワークスの論理名.dynamics.com/api/data/v9.1/$metadata#EntityDefinitions(EntitySetName)/$entity","EntitySetName":"○○○○","MetadataId":"XXXXX"}
成功すると、上記のJSONデータが表示されます。
EntitySetNameのvalueである ○○○○ がテーブルの論理名の複数形に該当します。
まとめ
リレーションがかかっているフィールドへのデータ登録は複雑になりがちです。私自身もさまざまなサイトを見てきましたが、明確に説明しているサイトはあまり見つけられませんでした。
(英語で書かれたものばかり)
この記事が皆さんのシステム開発でのエラーを助けるものであることを願います。