LoginSignup
0
0

リレーションがかかっているフィールドへのデータ登録でハマりがちな罠 【PowerAutomate】【Dataverse】

Last updated at Posted at 2023-10-12

記事について

本記事は、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.

エラーの説明

調べてみると、他のテーブルとリレーションがかかっているフィールドにデータを登録・更新するときに起こるそうです。
また、適切な入力形式ではない、論理名が適切ではないときに発生するエラーの模様です。

うーん、よくわからない。

エラーが発生したフィールド

画像1AddressID.png

取引先企業というテーブルにレコードを作成しようとしたときに発生しました。
レコード作成時に、AddressIDを入力データの一つとしており、そのフィールドはAddressというテーブルのAddressという一意識別子を参照しています。(ややこしい)
データの種類としては検索に当たります。
そして、AddressテーブルのAddressが合致するレコードのAddressIDがそのフィールドに入力されるわけです。

エンティティについて
エンティティは巷でよく言われるテーブルというイメージでとらえてもらって構いません。エンティティはそれ自体でテーブルとしての機能を果たすだけではなく、
フォームやビューといった機能を自己完結的に提供する箱というイメージです。

解決法

解決ポイント① 入力形式を理解できているか

Dataverseでは、リレーションがかかっているフィールドにおいて、そのままデータを入れるだけではうまくデータが格納されないように作られています。
画像1のように入力形式が決められています。
これを詳細に書くと、

参照先テーブルの論理名の複数形(参照先テーブルのリレーションがかかっているフィールドのデータ)

この例で書き直すと、取引先企業のレコードを作成しようとしているので、

Addressテーブルの論理名の複数形AddressID.png

(AddressテーブルのAddress)

となります。

複数形にするということがかなりのポイントです。脳死でsをつけてはいけません!!!

解決ポイント② テーブル(エンティティ)の論理名が分かっているか

解決ポイント①で

参照先テーブルの論理名の複数形

を示しました。

実際にテーブルの論理名を確認する手順をAddressテーブルで説明します。

  1. PowerAppsからテーブルに移動します。

  2. テーブルがずらっと出てくるので、論理名を知りたいテーブルをクリックします。

  3. テーブルの概要がパッと見で見れるようになっています。
    画像2はその画面に該当します。

  4. テーブルプロパティのプロパティという部分をクリックします。
    下にある'高度なオプション'というボタンを押すと、画像3のようなものが見れると思います。
    画像3に表示されている論理名が今回入力するべきテーブルの論理名になります。

画像2 table_address.png
画像3 Address論理名.png

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である ○○○○ がテーブルの論理名の複数形に該当します。

まとめ

リレーションがかかっているフィールドへのデータ登録は複雑になりがちです。私自身もさまざまなサイトを見てきましたが、明確に説明しているサイトはあまり見つけられませんでした。
(英語で書かれたものばかり)
この記事が皆さんのシステム開発でのエラーを助けるものであることを願います。

0
0
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
0
0