此 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》
- 将 PowerShell 和 Visual Studio Code 与 Dataverse Web API 配合使用
这些文章具有相同的先决条件。
安装或验证是否已安装以下内容
安装 Visual Studio Code。 请参阅 Download Visual Studio Code
安装适用于 Visual Studio Code 的 PowerShell 扩展。 请参阅 PowerShell for Visual Studio Code
安装 PowerShell 7.4 或更高版本。 请参阅 在 Windows、Linux 和 macOS 上安装 PowerShell
安装 Az PowerShell 模块版本 11.1.0 或更高版本。 请参阅 如何安装 Azure PowerShell
若要 将现有安装更新到最新版本,请使用
Update-Module -Name Az -Force
验证安装
打开Visual Studio代码。
在“终端”菜单中,选择“新终端”。
在 Visual Studio Code 导航窗格中,选择
PowerShell 扩展的图标。在Visual Studio Code终端窗口中复制并粘贴以下脚本:
Write-Host 'PowerShell Version:'$PSVersionTable.PSVersion.ToString() Write-Host 'PowerShell Az version:'(Get-InstalledModule Az).Version按 Enter。 输出应如下所示:
PowerShell Version: 7.4.0 PowerShell Az version: 11.1.0
如果未看到如下所示的结果,请安装或更新必备组件。
还需要
- Dataverse 环境的有效用户帐户
- 要连接到的 Dataverse 环境的 URL。 请参阅 “查看开发人员资源 ”,了解如何查找它。 它看起来如下所示:
https://yourorg.crm.dynamics.com/,其中yourorg.crm不同。 - 基本了解 PowerShell 脚本语言
如何运行此示例
克隆或下载 PowerApps-Samples 存储库。
使用 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
演示
此示例包含九个部分:
第 0 部分:创建发布者和解决方案
操作:
- 通过向
examplepublisher发送GET请求来查询具有/publishers唯一名称的现有发布者。 - 如果发布者尚不存在,请向
/publishers发送POST请求以创建发布者。 - 向
/solutions发送GET请求,查询名为polymorphiclookupexamplesolution的现有解决方案。 - 如果解决方案尚不存在,请发送
POST请求至/solutions以创建它。
注释
可以通过在此示例中将所创建的所有解决方案组件与解决方案关联,来导出这些组件。 对于没有命名消息的操作,请将 MSCRM.SolutionUniqueName 请求标头设置为解决方案的唯一名称,以创建此关联。
使用发布者自定义前缀为解决方案组件的所有名称添加前缀。
第 1 节:创建引用的表
操作:
- 如果
sample_Book表尚不存在,请向/EntityDefinitions发送POST请求以创建该表。 此表包括主sample_name属性和sample_CallNumber字符串列。 - 如果
sample_Audio表尚不存在,请向/EntityDefinitions发送POST请求以创建该表。 此表包括主sample_name属性和sample_AudioFormat字符串列。 - 如果
sample_Video表尚不存在,请向/EntityDefinitions发送POST请求以创建该表。 此表包括主sample_name属性和sample_VideoFormat字符串列。
这三个表充当多态查找列可指向的 参考表。
第 2 节:创建引用表
操作:如果sample_Media尚不存在,则通过发送POST请求到sample_Media来创建表。 此表包含主 sample_name 属性并托管多态查找列。
该 sample_Media 表充当 引用表 ,即包含多表查找列的表。
第 3 节:创建多态查找属性
操作:
- 使用 CreatePolymorphicLookupAttribute 操作,在
sample_Media表上创建sample_MediaPolymorphicLookup查找列,并建立与三个引用表(sample_Book、sample_Audio和sample_Video)的一对多关系。 此操作一次性创建属性以及三个关系。 - 通过向
/RelationshipDefinitions发送GET请求,检索三个关系(sample_media_sample_book、sample_media_sample_audio、sample_media_sample_video)各自对应的ReferencingEntityNavigationPropertyName。 需要使用这些导航属性名称来使用@odata.bind语法关联记录。
第 4 节:创建示例数据记录
操作:
- 通过向
/EntityDefinitions发送GET请求,检索四个表各自对应的EntitySetName。 - 通过发送
sample_Book请求到POST来创建两条sample_books记录。 - 通过发送
sample_Audio请求到POST来创建两条sample_audios记录。 - 通过发送
sample_Video请求到POST来创建两条sample_videos记录。 - 通过发送
sample_Media请求到POST以创建四个sample_medias记录。 每个媒体记录使用第 3 节中检索的导航属性名称和@odata.bind语法将多态查找设置为指向三个引用表之一的记录。
第 5 节:检索示例数据
操作:
- 通过向
/sample_medias发送GET请求,查询所有sample_Media记录,并筛选sample_name和_sample_mediapolymorphiclookup_value列。 该查询使用Microsoft.Dynamics.CRM.lookuplogicalname和OData.Community.Display.V1.FormattedValueOData 注释显示每个查找值的实体类型和格式名称。 - 通过向
/sample_medias发送GET请求并附带适当的$filter,筛选出多态查找指向特定sample_Book记录的sample_Media记录。 - 通过向
/sample_medias发送GET请求并附带适当的$filter,筛选出多态查找指向特定sample_Audio记录的sample_Media记录。
第 6 节:导出托管解决方案
操作:使用ExportSolution操作将您在第 0 节:创建发布者和解决方案中创建的解决方案导出为托管解决方案包。 将导出 .zip 的文件保存在本地,以便在第 8 节中使用。
第 7 节:删除示例表和解决方案
操作:
- 通过向
sample_Media发送DELETE请求来删除/EntityDefinitions表。 必须在删除被引用表之前先删除引用表。 - 删除
sample_Book、sample_Audio和sample_Video表,通过向DELETE发送/EntityDefinitions请求。 - 通过向
/solutions发送GET请求并按唯一名称进行筛选,查询非托管解决方案。 - 通过向
/solutions(<solutionid>)发送DELETE请求来删除非托管解决方案。
第 8 部分:导入和删除托管解决方案
操作:
- 使用 ImportSolution 操作 导入在 第 6 节:导出托管解决方案 中导出的托管解决方案。
- 通过向
/solutions发送GET请求并按唯一名称过滤,查询导入的解决方案。 - 通过向
DELETE发送/solutions(<solutionid>)请求来删除导入的托管解决方案。
清理
默认情况下,此示例将删除它创建的所有记录。 如果要在示例完成后查看创建的记录,请将 $deleteCreatedRecords 变量更改为 $false。 然后,系统会提示你决定是否要删除记录。
另请参阅
使用多表查找列
使用 Dataverse Web API
将 Web API 与表定义配合使用
Web API 示例
Web API 表架构作示例 (PowerShell)