查询数据
Dataverse 连接器具有一些旨在从表中检索数据的操作。 在本单元中,我们将介绍其中两种最常见的操作。 按 ID 获取行操作使用您提供的唯一 ID 检索单行。 如果不知道唯一 ID,则可以使用列出行操作,它会返回零到多个符合筛选条件的行。
扩大这些操作的选项,您还有 ...从所选环境中操作,这些操作使您能够对正在生成的环境以外的环境使用相同的操作。 让我们探索一些可用于获取数据的选项。
选择列
选择列选项会限制从操作返回的列。 您应根据后续流步骤中所需的数据设置列列表。 提供列列表有助于提高流的效率。 请务必使用表列逻辑 名称,您可以在列属性的高级选项部分找到该名称。 例如,如果想要包含“联系人”表的“名”和“姓”列,则需要提供以下以逗号分隔的列列表:
firstname,lastname
在流中设置后续步骤时,指定列列表会限制动态内容中显示的列。 如果期望的列未能显示,请在检索数据的操作上选中选择列选项。
展开查询
默认情况下,检索数据操作运行时,它们仅会从该操作指定的主表中检索数据。 您可以使用扩展查询选项提供 OData 样式表达式,以包含相关表中的数据。 您可以在高级参数下找到本选项。
例如,“Account”表与“Contact”表之间存在关系,用于表明客户的主要联系人。 以下示例显示了用于在操作输出中包含主要联系人全名列和 ID 的 OData 表达式。
primarycontactid($select=contactid,fullname)
此表达式包含操作输出中的数据,但不包含动态内容窗格中可供选择的数据列。 要使用相关数据,您需要使用工作流表达式访问数据。
使用“按 ID 获取行”操作
通常,您可以使用按 ID 获取行操作检索作为流逻辑一部分的其他 Dataverse 表数据。 例如,如果添加新 Account 表行会触发您的流,则可以使用按 ID 获取行操作检索相关主要联系人的电子邮件。 在该示例中,无需使用按 ID 获取行操作检索客户,因为该行的数据用于充当触发器的输出。
有时,您可能希望在流逻辑中再次使用按 ID 获取行操作,以确保数据始终处于最新状态。 例如,如果流因审批步骤而暂停,则上次检索数据之后可能已经过去了几天。 您可能想要在审批后使用按 ID 获取行操作来获取最新数据。 这种方法可以阻止您的流根据过时数据采取行动。
如果打算在步骤中创建的行的 ID 可能为 NULL,则最好在运行按 ID 获取行步骤之前完成对该值的条件检查。 如果行 ID 为 NULL,则该步骤失败。 另一个常见错误是您无权读取该行的数据。
使用列表行操作
列表行操作非常强大,因为您可以提供简单或复杂的条件,确定它返回的数据行。 该操作支持两种用于指定此条件的样式:OData 样式表达式或 Dataverse FetchXML。 您可以使用这两种条件样式撰写简单和复杂的条件。 大多数情况下,您的偏好决定了要使用哪种样式。 但是,FetchXML 提供社区工具支持,可以让您更加轻松地生成更复杂的条件。
检索超过 5,000 行
默认情况下,该操作不会返回超过 5,000 行。 如果您需要返回更多数据,可以从设置选项卡开启分页功能。 开启分页功能后,您可以指定包含高达 100,000 行的页面大小。 如果可能存在不止一页数据,则需要通过获取分页标记并传递后续页面的检索手动处理流中的页面。 有关详细信息,请参阅开启分页。
请务必考虑未来的需求,确保达到 5,000 行不会产生错误。 此外,您不会收到所有数据。 如果可以,请编写条件,为要处理的流尽量生成较小的结果。
使用 OData 样式条件
在操作的筛选行属性中,您可以提供 OData 样式筛选器,将返回的行限制为与条件匹配的行。 为筛选行属性编写表达式时,需要使用列的逻辑名称,该名称位于列属性的高级选项部分中。 以下逻辑是一个简单的示例,用于筛选联系人以返回名为 John 的所有行。
firstname eq 'John'
此外,您还可以使用标准查询筛选器运算符和查询函数。 例如,以下逻辑将更改筛选器以使用 contain 函数。
contains(firstname,'John')
您可以使用逻辑运算符,例如 and、or 和 not。 例如,以下逻辑用于检查收入列是否处于 2001-99999 范围内。
revenue lt 100000 and revenue gt 2000
您可以配合使用括号 () 与逻辑运算符,指定优先级,从而评估复杂的表达式,如下所示:
(contains(name,'sample') or contains(name,'test')) and revenue gt 5000
您还可以筛选相关数据。 例如,以下表达式会返回包含名为 Susanna 的主要联系人的客户表行。
primarycontactid/fullname eq 'Susanna (sample)'
排序方式属性搭配筛选行表达式,有助于确定操作中的行输出顺序。 名称应该是以逗号分隔的逻辑列名称列表。 如果仅指定列名,则该列按升序排序。 您可以指定 asc 或 desc 后缀,表明升序或降序。
行计数属性可以表明要返回多少行。 例如,如果您想要查看是否存在匹配的行,则不需要返回超过一行。
提示
测试流时,您可以将行计数设置为 1(或其他较小的数字)以加快测试速度。 如果您的表包含数千行数据,则使用本参数可以帮助您在开发流时快速排除故障。
使用 FetchXML 样式条件
FetchXML 是一种 Dataverse 中基于 XML 的专有查询语言,可用于查询数据。 您可以撰写 FetchXML 并将其用作列表行操作中的行输出的筛选条件。 您可以手动撰写 XML,也可以使用高级查找从 Power Apps 模型驱动应用程序中生成筛选器,然后下载 FetchXML。
FetchXML 包含与 OData 样式条件中的选择列、排序依据、展开查询和筛选行功能的同等功能。
以下表达式是 FetchXML 的示例,用于筛选客户表中显示为活动状态且名称包含 Contoso 的行。 此示例还可以返回与客户行相关的主要联系人的电子邮件。
<fetch>
<entity name="account">
<attribute name="name"/>
<attribute name="address1_city"/>
<attribute name="primarycontactid"/>
<attribute name="telephone1"/>
<attribute name="accountid"/>
<order attribute="name" descending="false"/>
<filter type="and">
<condition attribute="statecode" operator="eq" value="0"/>
<condition attribute="name" operator="like" value="%Contoso%"/>
</filter>
<link-entity alias="accountprimarycontactidcontactcontactid" name="contact" from="contactid" to="primarycontactid" link-type="outer" visible="false">
<attribute name="emailaddress1"/>
</link-entity>
</entity>
</fetch>
有关详细信息,请参阅使用 FetchXML 构建查询。
目前,使用包含 FetchXML 条件的列表行操作时,不支持合并查询。