この PowerShell サンプルでは、Dataverse Web API を使用して、複数テーブル参照列 ( ポリモーフィックなルックアップとも呼ばれます) を作成して使用する方法を示します。
このサンプルでは、「 複数テーブル参照列を使用 する」で説明されている操作を示し、 Dataverse Web API PowerShell ヘルパー関数 を使用して認証を管理し、一般的な操作を実行するための再利用可能な関数を提供します。 このサンプルでは 、ドット ソーシングを使用してこれらのスクリプトを参照します。
. $PSScriptRoot\..\Core.ps1
. $PSScriptRoot\..\TableOperations.ps1
. $PSScriptRoot\..\CommonFunctions.ps1
. $PSScriptRoot\..\MetadataOperations.ps1
注
このサンプルは、Windows、Linux、macOS で動作するはずですが、作成者は Windows でのみテストしました。
[前提条件]
このサンプルを実行する前に、これらのサンプルで使用される概念とパターンについて説明した次の記事を読む必要があります。
- PowerShell と Visual Studio Code を使用したクイックスタート Web API
- Dataverse Web API で PowerShell とVisual Studio Codeを使用する
これらの記事には同じ前提条件があります。
以下をインストールするか、インストールされていることを確認する
Visual Studio Codeをインストールします。 「
Download Visual Studio Code Visual Studio Code用の PowerShell 拡張機能をインストールします。 「Visual Studio Code 用 PowerShell」を参照してください。
PowerShell 7.4 移行をインストールします。
Windows、Linux、および macOS に PowerShell をインストールする Az PowerShell モジュール バージョン 11.1.0 以降をインストールします。
Azure PowerShell 既存のインストールを最新のバージョンに更新 するには、
Update-Module -Name Az -Forceを使います
インストールを検証する
Visual Studio Codeを開きます。
[ ターミナル ] メニューの [ 新しいターミナル] を選択します。
Visual Studio Codeナビゲーション ウィンドウで、PowerShell 拡張機能の
アイコンを選択します。次のスクリプトをコピーして、Visual Studio Codeターミナル ウィンドウに貼り付けます。
Write-Host 'PowerShell Version:'$PSVersionTable.PSVersion.ToString() Write-Host 'PowerShell Az version:'(Get-InstalledModule Az).VersionEnter キーを押します。 出力は次のようになります。
PowerShell Version: 7.4.0 PowerShell Az version: 11.1.0
このような結果が表示されない場合は、前提条件をインストールまたは更新してください。
さらに必要なこと
- Dataverse 環境に有効なユーザー アカウント
- 接続する Dataverse 環境への URL。 検索方法については、開発者向けリソースを表示 をご覧ください。 次のようになります:
https://yourorg.crm.dynamics.com/、これはyourorg.crmが異なります。 - PowerShell スクリプト言語の基本的な解釈
このサンプルを実行する方法
PowerApps-サンプル リポジトリをクローンまたはダウンロードします。
Visual Studio Codeを使用して、
/dataverse/webapi/PS/PolymorphicLookup/PolymorphicLookupSample.ps1ファイルを開きます。次の行を編集して、接続先の環境の URL を使用します。
Connect 'https://yourorg.crm.dynamics.com/' # change this(オプション) このサンプルが作成するレコードを削除したくない場合は、
$deleteCreatedRecords変数を$falseに設定します。F5 を押してサンプルを実行します。
サンプルを初めて実行すると、ブラウザー ウィンドウが開きます。 ブラウザ ウィンドウで、認証に使用する資格情報を入力または選択します。
別のユーザーとして接続するには、Disconnect-AzAccount コマンド を実行して、再試行してください。
Code
このサンプルのコードは次のとおりです: PowerApps-Samples/dataverse/webapi/PS/PolymorphicLookup/PolymorphicLookupSample.ps1
対象
このサンプルには、次の 9 つのセクションがあります。
セクション 0: 発行者とソリューションを作成
オペレーション
-
examplepublisherにGET要求を送信して、/publishers一意の名前を持つ既存の発行元を照会します。 -
POSTに/publishers要求を送信して、パブリッシャーがまだ存在しない場合は作成します。 -
polymorphiclookupexamplesolutionにGET要求を送信して、/solutionsという名前の既存のソリューションを照会します。 -
POSTに/solutions要求を送信して、ソリューションがまだ存在しない場合は作成します。
注
このサンプルで作成したすべてのソリューション コンポーネントは、ソリューションに関連付けることでエクスポートできます。 名前付きメッセージのない操作の場合は、 MSCRM.SolutionUniqueName 要求ヘッダーをソリューション固有の名前に設定して、この関連付けを作成します。
パブリッシャーのカスタマイズ プレフィックスを使用して、ソリューション コンポーネントのすべての名前にプレフィックスを付けます。
セクション 1: 参照テーブルを作成する
オペレーション
- まだ存在しない場合は、
sample_BookにPOST要求を送信して、/EntityDefinitionsテーブルを作成します。 このテーブルには、プライマリsample_name属性とsample_CallNumber文字列列が含まれています。 - まだ存在しない場合は、
sample_AudioにPOST要求を送信して、/EntityDefinitionsテーブルを作成します。 このテーブルには、プライマリsample_name属性とsample_AudioFormat文字列列が含まれています。 - まだ存在しない場合は、
sample_VideoにPOST要求を送信して、/EntityDefinitionsテーブルを作成します。 このテーブルには、プライマリsample_name属性とsample_VideoFormat文字列列が含まれています。
これら 3 つのテーブルは、ポリモーフィックなルックアップ列が参照できる 参照テーブル として機能します。
セクション 2: 参照テーブルの作成
操作: sample_MediaにPOST要求を送信して/EntityDefinitions テーブルを作成します (まだ存在しない場合)。 このテーブルにはプライマリ sample_name 属性が含まれており、ポリモーフィックなルックアップ列がホストされています。
sample_Media テーブルは、参照元テーブル (複数テーブル参照列を含むテーブル) として機能します。
セクション 3: ポリモーフィックなルックアップ属性を作成する
オペレーション
-
sample_MediaPolymorphicLookupを使用して、sample_Mediaテーブルにsample_Book参照列を作成し、3 つの参照テーブル (sample_Audio、sample_Video、) に対する一対多リレーションシップを作成します。 この 1 つのアクションにより、属性と 3 つのリレーションシップがすべて一度に作成されます。 - 各リレーションシップ (
ReferencingEntityNavigationPropertyName、sample_media_sample_book、sample_media_sample_audio) のsample_media_sample_videoを取得するために、GET要求を/RelationshipDefinitionsに送信します。 これらのナビゲーション プロパティ名は、@odata.bind構文を使用してレコードを関連付けるために必要です。
セクション 4: サンプル データ レコードを作成する
オペレーション
-
EntitySetNameにGET要求を送信して、4 つの各テーブルの/EntityDefinitionsを取得します。 -
sample_BookにPOST要求を送信して、2 つのsample_booksレコードを作成します。 -
sample_AudioにPOST要求を送信して、2 つのsample_audiosレコードを作成します。 -
sample_VideoにPOST要求を送信して、2 つのsample_videosレコードを作成します。 -
sample_MediaにPOST要求を送信して、4 つのsample_mediasレコードを作成します。 各メディア レコードは、セクション 3 で取得したナビゲーション プロパティ名と@odata.bind構文を使用して、3 つの参照先テーブルのいずれかからレコードを指すようにポリモーフィックな検索を設定します。
セクション 5: サンプル データを取得する
オペレーション
- すべての
sample_Mediaレコードにクエリを実行し、sample_name列と_sample_mediapolymorphiclookup_value列を選択して、GET要求を/sample_mediasに送信します。 クエリでは、Microsoft.Dynamics.CRM.lookuplogicalnameとOData.Community.Display.V1.FormattedValueOData 注釈を使用して、各参照値のエンティティ型と書式設定された名前が表示されます。 - 特定の
sample_Mediaレコードを指すポリモーフィックなルックアップのあるsample_Bookレコードをフィルタリングするには、GETに適切な/sample_mediasで$filter要求を送信します。 - 特定の
sample_Mediaレコードを指すポリモーフィックなルックアップのあるsample_Audioレコードをフィルタリングするには、GETに適切な/sample_mediasで$filter要求を送信します。
セクション 6: マネージド ソリューションのエクスポート
操作: 「セクション 0: ExportSolution アクションを使用して、パブリッシャーとソリューションをマネージド ソリューション パッケージとして作成する」で作成したソリューションをエクスポートします。 セクション 8 で使用するために、エクスポートした .zip ファイルをローカルに保存します。
セクション 7: サンプル テーブルとソリューションを削除する
オペレーション
-
sample_MediaにDELETE要求を送信して、/EntityDefinitionsテーブルを削除します。 参照先テーブルの前に、参照元テーブルを削除する必要があります。 -
sample_Bookにsample_Audio要求を送信して、sample_Video、DELETE、および/EntityDefinitionsテーブルを削除します。 - 一意の名前でフィルター処理された
GETに/solutions要求を送信して、アンマネージド ソリューションにクエリを実行します。 -
DELETEに/solutions(<solutionid>)要求を送信して、アンマネージド ソリューションを削除します。
セクション 8: マネージド ソリューションのインポートと削除
オペレーション
- 「セクション 6:ImportSolution アクションを使用してマネージド ソリューションをエクスポートする」でエクスポートしたマネージド ソリューションをインポートします。
- 一意の名前でフィルター処理された
GETに/solutions要求を送信して、インポートされたソリューションのクエリを実行します。 -
DELETEに/solutions(<solutionid>)要求を送信して、インポートされたマネージド ソリューションを削除します。
クリーンアップ
既定では、このサンプルは作成するすべてのレコードを削除します。 サンプルの完了後に作成されたレコードを表示する場合は、 $deleteCreatedRecords 変数を $falseに変更します。 その後、レコードを削除するかどうかを決定するように求められます。
こちらも参照ください
複数テーブルの参照列を使用する
Dataverse Web API を使用する
テーブル定義で Web API を使用する
Web API サンプル
Web API テーブル スキーマ操作サンプル (PowerShell)