🤼

複雑怪奇なDataverseのエンティティセット名の謎に迫る

2024/12/11に公開

はじめに

みなさん、Dataverse使っていますか?
私は使っていません!

ただ、たまに開発することがあり、そこで盛大に引っ掛かったので共有します。

Dataverseとは

Dataverseは、Microsoft Power Platform上で利用できるデータ管理基盤の一つです。
Power Apps、Power Automate、Power BIなどから容易にアクセスできるため、Power Appsをメインで使用する場合はこちらを使うことになるかと思います。

外部からAPIでアクセスすることもでき、結構便利に使う事が出来ます。
(Entra IDなどでアプリ登録する必要があったりしますが)

エンティティセットとは

Dataverseではテーブルでデータを管理しますが、テーブルに対しAPIでアクセスする際は「エンティティセット名」を使用してアクセスします。
「エンティティセット名」はテーブル名が何故か複数形に変化し、先頭にプレフィックスが付いたりつかなかったりします。(プレフィックスも環境によって異なるので気を付けてください。)

testテーブルの場合
例えば先頭にnewというプレフィックスが付き、testが複数形になるので
new_testsというエンティティセット名になります。

この「エンティティセット名」はテーブル名を元に生成され、主にODataエンドポイントで利用されます。

簡単に言えばAPIでtestテーブルにアクセスする場合、/api/data/v9.2/new_testsにアクセスする必要があるという事です。

Dataverseの落とし穴

さて、ここまで聞くと単にテーブル名に対してプレフィックスとsを付ければいいだけと思うかもしれません。
というか自分はそう思ってコードを書いていました。
実際、testテーブルではうまく動いていたのですが。。。

お客様から動作しないと報告がありました。

複数形の罠

なぜかそのテーブルだけ動きませんでした。
自社環境でデータ列をそろえてテストしても再現しません。

諸々確認してみると、エンティティセット名が違うことが解りました。

仮に、お客様環境のテーブル名をcountryというものだったとしておきます。
問題のエンティティセット名は。。。

new_countries

そう、規則変化していました。

どこまで適用されるの?

話はそこまでなのですが、ここで一つ気になったことがあります。
エンティティセットは基本的に自動生成です。
ということは、複数形に変えているのはなんらかの操作をしていることになります。
ルールベースなのか、はたまた生成AIでも裏で動いているのか・・・
どこまで変形するのか確かめてみました。

bus

busは規則変化で最後にsが付くため、busesを期待したいです。

new_buses

country

countryは例示したものですね、「yをiに変えてes」と中学教師の顔と一緒に思い浮かびました。

new_countries

knife

feで終わる場合はvesになる。そういえばそんなルールもありました。

new_knifes

あれ?これは変化しないんですね。

man

不規則変化といえば、おそらく真っ先に出てくるmanです。
本来であればmenに変化しますが

new_mans

music

では逆に不可算名詞だとどうでしょうか。
期待したい動きとしてはmusicそのままになります。

new_musics

まとめ

というわけでDataverseの複数形の変化ルールはes系だけっぽい感じでした。
ただ他にも例外があるかもしれません。
APIコールする場合は安易にルールベースで変更せず、テーブル名とエンティティセット名を分けて管理するのが賢いかもしれません。

ちなみにエンティティセット名はここから確認できます。

ヘッドウォータース

Discussion