在 Power Automate 中使用 Dataverse 表
虽然我们都喜欢在 Power Automate 流程中使用 SharePoint 列表,但它们也有一些局限性,而 Dataverse 正好可以弥补这些局限性。
Dataverse 是微软希望你保存数据的地方,它是一个低代码数据库,因此设计得像 SharePoint 一样易于使用,但还有一些很棒的附加功能。
那么,让我们深入了解如何在 Power Automate 中使用 Dataverse,并讨论以下操作:
- 列出行
- 添加/创建行
- 关联行
- 束缚/解束缚
在开始之前,先简单说明一下:Dataverse 默认在您所在的 Power Platform 环境中运行,因此如果您引用“Account”表,它指的是该环境中的“Account”表。这意味着当您部署到其他环境时,流程会自动链接到该环境中的表(无需环境变量)。也就是说,自定义表也需要部署到其他环境,好在您可以像添加任何组件一样将它们添加到解决方案中。
但并非完全如此,因为大多数操作都有一个跨环境的版本。因此,现在您可以连接到不同环境中的表。这些连接器确实需要一个环境变量,但不是像 SharePoint 中那样的列表变量,因为它使用跨环境相同的名称。
1. 列出行
列表行遵循与 SharePoint 标准非常相似的路径:
- 选择:选择要返回的列/字段
- 筛选:按列条件筛选行
- 排序方式:按列对行进行排序
- 展开:包含来自查找表的列
- 跳过令牌:从上一结果传递的 URL,返回下一页
- 分区 ID:适用于弹性/文件数据库表(详见另一篇博客)
还有 Fetch Xml Query,它可以在 XML 中完成上述所有操作,但这又是另一个博客要介绍的内容了。
你还可以进行一些连接操作,例如仅从展开操作中选取特定列。举个例子,如果你想获取流程创建者的全名。在工作流表中,createdby 列存储了查找表(在本例中为 users 表)中的 GUID。要获取全名,我们需要展开 createdby 列,但这会返回所有列(确切地说是 167 列)。它还会包含其他查找列的 URL,因此响应如下所示(仅针对一条记录!)。
这里我们将 $select 与 expand 连接起来。
createdby($select=fullname)
现在我们只需要 8 列,这大大提高了性能。
查找列就像光一样,既是记录又是字符串。在表中,它是查找表中的 GUID,但在响应中,它是一条记录,而且如果不进行扩展,它只能包含少数几列。
在 Power Automate 用户界面中,动态列表中仅显示“类型”和“值”列。
['_createdby_value@Microsoft.Dynamics.CRM.lookuplogicalname']
['_createdby_value']
它返回表名(lookuplogicalname)和 GUID(_table_value)。
_table_value 模式在所有查找中都会重复出现,如果有效,它可以用于获取 GUID,然后可以使用该 GUID 查询该表,并且对于筛选器也很有用:
2. 添加新行/更新新行
新建/更新行的大多数输入都很简单,只需放入所需的值即可,但选项、查找和附件除外。
选项
选项是列表,因此可以通过操作内的下拉选择器进行识别。
标准的“是/否”列是布尔值,所以我们可以跳过它们,但正确的选择要复杂一些。
对于这些,我们不返回标签,而是返回值。因此,我们可以看到下面的选项,要在流程中设置它,我们使用整数值。
查找
现在这些才是有趣的部分,你可以通过标签中的括号找到它们。
括号中的内容是查找所链接到的表(某种程度上是这样,但稍后会对此进行更详细的解释)。
因此,在上面的示例中,您可以看到一个名为“部署注册表”的自定义表,我们使用名为“解决方案”的关键列来查找它。
你可能会认为直接输入 Solution 列的值就可以了。Solution 列的值应该是 GUID,如果数据来自另一个表,则很可能是 _solution_value。但实际上并非如此,你需要遵循 API 的模式,实际输入表名。
示例
accounts(accountid)
contacts(contactid)
systemusers(systemuserid)
对于系统表和 CDM 表来说,这很简单,但对于像我们的部署注册表这样的自定义表来说,就稍微复杂一些。这是因为我们使用的不是表的显示名称或逻辑名称,而是实体集名称。对于 Microsoft 表,实体集名称与表名匹配,但会带有“s”、“es”或“ies”前缀,而自定义表则可以包含前缀。
要获取 EntitySetName,请转到“表/解决方案”部分中的表,选择“工具”,然后单击“复制集名称”,这将把 EntitySetName 添加到剪贴板。
因此,我们的部署注册表中的实体集名称为:
cr4fe_deploymentregisters
我还说过“算是吧,稍后会详细解释”,这是因为有些表是虚拟表。上面你看到“所属业务单元(Business Units)”和“所有者(Owners)”,你可能会以为存在一个“业务单元”和“所有者”表,但实际上并没有。它们实际上使用的是“用户(systemusers)”表和“团队(teams)”表,所以你需要传递这两个表的数据。
附件
也略有不同,因为它们实际上并没有存储在表/记录中(文件甚至按 MB 计费的方式也与记录不同,我怀疑这是因为它们存储在 Azure Blob 存储中)。
这意味着您不能直接将文件的二进制/base64 数据添加到记录中,甚至不能使用“添加新行/更新新行”操作,您必须使用不同的 API/操作。
您可以使用“上传文件或图像”操作,并传入表 GUID 和文件列名。
数据必须是二进制格式,因此您可能需要对其进行转换,例如:
base64ToBinary(body('Download_a_file_export')['$content'])
表中存储了文件名和 GUID,但没有其他链接指向文件的存储位置。
3. 关联行
“关联行”功能会在两个表中的两行之间创建关系。我能想到的最佳示例是用户的安全角色,要为用户分配安全角色,我们需要创建与该角色的关系(没错,安全角色也存储在 Dataverse 表中)。
要创建关系,我们选择所需的表,这将填充可用关系列表(因为需要为该表创建这些关系)。
然后,我们输入具有关联关系的表(即安全角色/角色表)中记录的 GUID:
4. 有界/无界
绑定操作和非绑定操作本质上都是自定义 API。它们运行代码并完成一个功能,可以是核心功能(由 Microsoft 创建)、插件(使用 C# 构建的自定义 API)或低代码插件(使用 Power FX 构建的自定义 API)。
绑定和非绑定之间的区别在于 API 调用是否绑定到 Dataverse 记录。
例如,流程/工作流表(存储 Power Automate 流程)的绑定操作包括以下操作(因为它们链接到特定流程):
而未绑定操作则不与记录关联,因此仅受输入的影响。例如,ExportSolution 操作会从解决方案创建一个 zip 文件,它与 make.powerautomate UI 在导出解决方案时使用的 API 完全相同。
还有更多操作需要介绍,但以上内容涵盖了 95% 以上的使用场景。
如果您想收到每篇新博客的通知(我也会在 Power Platform 社区发布一些博客),请在下方订阅。
文章来源:https://dev.to/wyattdave/working-with-dataverse-tables-in-power-automate-1adf















powerdevbox.com