此 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 上的 Install 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).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)