意外と知られていないDataverseの機能の一つ「マルチテーブル検索」を試してみた。
マルチテーブル検索
あまり知られていないDataverseの機能の一つとして、「マルチテーブル検索」という機能がある。
これは、テーブルの検索列に対し複数のテーブルを設定できるようにする機能のことで、この機能を使用するとポリモーフィック関連を実現できる。
言葉で説明するのは難しいので実際にやりたいことと操作を交えて説明。
やりたいこと

※普通に検索列を追加するとどれか1つのテーブルしか選べない。

実現方法
今回は冒頭で話した「マルチテーブル検索」機能を使用して、「ねこ」テーブルの「大好物」列に3つのテーブルをどれでも入力できるようにしていく。
本記事執筆時点で、「マルチテーブル検索」はWebAPIやSDKからのみ設定可能(Power Apps Studioからは設定できない)。
そこで今回はPostmanを使用してWebAPI経由で設定する。

PostmanからAPI「CreatePolymophicLookupAttribute」を使う

{
"OneToManyRelationships": [
{
"SchemaName": "cr9cb_favorite_fish",
"ReferencedEntity": "cr9cb_fish",
"ReferencingEntity": "cr9cb_cat"
},
{
"SchemaName": "cr9cb_favorite_meat",
"ReferencedEntity": "cr9cb_meat",
"ReferencingEntity": "cr9cb_cat"
},
{
"SchemaName": "cr9cb_favorite_ciaochuru",
"ReferencedEntity": "cr9cb_churu",
"ReferencingEntity": "cr9cb_cat",
"CascadeConfiguration": {
"Assign": "NoCascade",
"Delete": "RemoveLink",
"Merge": "NoCascade",
"Reparent": "NoCascade",
"Share": "NoCascade",
"Unshare": "NoCascade"
}
}
],
"Lookup": {
"AttributeType": "Lookup",
"AttributeTypeName": {
"Value": "LookupType"
},
"Description": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "大好物の食べ物",
"LanguageCode": 1041
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "大好物の食べ物",
"LanguageCode": 1041
}
},
"DisplayName": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "大好物",
"LanguageCode": 1033
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "大好物",
"LanguageCode": 1033
}
},
"SchemaName": "cr9cb_favorite_food",
"@odata.type": "Microsoft.Dynamics.CRM.ComplexLookupAttributeMetadata"
}
}
※JSONを見るとなんとなくわかるけど、OneToManyRelationshipsですべての関連(ねこと魚、ねこと肉、ねことちゅーる)を定義している。

設定はこれで完了。
動作確認





注意:追加は簡単だけど、編集や削除は大変
ただこの「マルチテーブル検索」は、[追加]するのは簡単だけど、「編集」や「削除」するのは少し大変かもしれない。


色々試したけど簡単には消すことができなかったので、テーブル設計がかっちり決まっているときくらいの利用にしとくのが良いかもしれない。。

