虚拟表的已知限制和故障排除

本文介绍在 Microsoft Dataverse 中使用虚拟表时的已知限制和故障排除技巧。

已知限制

以下是使用虚拟连接器提供程序创建的虚拟表的已知限制列表。

一般

  • 使用的表或列表必须至少包含一个用作主要字段的字符串字段和一个 GUID 字段。 如果不使用这些字符串字段,则无法创建虚拟表,并且在表详细信息检索阶段期间将生成一个错误。
    • SharePoint 使用所有列表中存在的隐藏数字 ID 字段
    • SQL 可以使用 GUID 或整数字段
    • Excel 必须具有 GUID 字段
  • Dataverse 只能创建包含与 Dataverse 兼容的数据类型的列。 这包括以下数据类型:
    • String
    • 多行文本(备忘录)
    • 整数
    • 小数
    • 流通股
    • 日期/时间
    • 是/否(布尔)
    • 选择项(多值选择)
    • 超链接/Url
  • 虚拟表不支持数据类型:
    • 文件和附件
    • 图像
    • 查找
  • 虚拟表中文本列允许的最大字符长度为 4000 个字符。 如果源表的最大字符限制大于此值,任何超过最大字符限制的创建/更新操作都会导致验证错误,并且操作将失败。
  • 虚拟表查询只能返回 1,000 个记录。 如果与虚拟表具有 1:N 或 N 自定义多表(多态)关系,任何超过此限制的查询都将失败并提供一个错误。 解决此限制的方法是在您的查询中使用筛选来减少记录集。
  • 审核功能不能用于虚拟表,这是因为 Dataverse 只能对本地存储的数据执行审核和存储审核数据。
  • 无法为虚拟表计算汇总和计算字段。 这是因为汇总是 Dataverse 中的服务器端计算,需要将数据存储在本地。
  • Microsoft 提供的 Microsoft Entra ID 虚拟表只允许读取访问权限。
  • Dataverse 虚拟表可以显示超出 Dataverse 正常最大值的字段值。 此行为是因为呈现的值未在本地存储。 例如,Dataverse 整数最大值为 100,000,000,000,但它可以从 SharePoint 检索并显示 9,000,000,000,000。 但是,如果用户尝试将数字编辑为大于 Dataverse 中最大接受大小的大小,系统将提供一个错误,指示无法保存记录,因为记录超过最大大小。
  • 虚拟表不支持表数据的导入和导出功能。

关于每个数据源

以下是每个数据源的限制。

  • SQL 虚拟表可以使用 GUID 或 Integer 字段作为功能的主键。
  • 没有主键的 SQL Server 表:可以选择任何非字符串字段作为主键。 虚拟表应已成功创建。 RetrieveMultiple 正常工作,其他操作失败,并显示以下错误消息(来自 SQL 连接器):“APIM 请求失败:BadRequest:表中不存在主键”。 对于功能,GUID 或整数字段必须用作主键。
  • 使用字符串主键的 SQL Server 表:SQL 字符串主键是虚拟表主键唯一可用的选项。 仅当值可以解析为 GUID 时,才支持 SQL Server 字符串主键。 如果值无法解析为 GUID,虚拟表创建将成功,但在运行时将失败并显示以下错误:
    • Maker Portal:“我们无法打开您的表。 请尝试重新加载或重新打开。”
    • 网络跟踪:“仅当可以将字符串主键解析为 GUID 时才支持字符串主键。”
  • SQL Server 表没有可用作主名称的非主键字符串字段: 如果 SQL 表没有可用作主名称的字符串字段,我们会在“配置”步骤中显示以下错误:“表没有主字段”
  • SQL 视图可用于创建虚拟表,但只提供读取操作。
  • 有关 SQL Server 连接器的限制,请转到 SQL Server 连接器引用
  • 源表中的 SQL 数据类型 bigint 列将映射为 Dataverse 虚拟表中的十进制数据类型。 当在 bigint 映射到整数流程中提供平台支持时,需要删除虚拟表中先前创建的列,并应创建新列。
  • 目前虚拟表中不能包含以下列类型:
    • 时间
    • Datetime2
    • 图像
    • 几何
    • 地区
    • RowVersion
  • 以下列类型包含在虚拟表中,但只显示为文本字段:
    • HierarchyID
    • XML
    • Sqlvariant

故障排除

  • 即使您的源表中有更多记录,虚拟表中也只有一 (1) 个记录。
    解决方法: 检查源表,确保已定义主键。

  • 当 Power Apps (make.powerapps.com) 检索我的表列表时,或者当我选择完成创建表时,我遇到以下错误之一:

    • “未找到客户细分 msdyn_get_required_fields 的资源”
    • “调用...时出错,请验证环境中是否存在连接...”
    • “序列不与 msdyn_get_required_fields 的元素匹配”
      解决方法:在某些情况下,您可能没有针对虚拟连接器提供程序的最新解决方案。 要确定虚拟连接器提供程序解决方案是否需要更新,请执行以下操作:
    1. 在左侧导航窗格中选择解决方案。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。
    2. 选择历史记录选项卡。
    3. 搜索 ConnectorProvider。
    4. 查看信息,确认是否需要更新解决方案。
    5. 如果历史记录表明需要更新,转到 Microsoft 商业市场搜索虚拟连接器提供程序,然后选择立即获取将解决方案导入您的环境。
    6. 再次按照以下步骤创建虚拟表。
  • 检索连接列表时将显示一条消息“当前环境中未找到连接‘xyz’”。。
    解决方案:当用户的 Dataverse 环境中存在大量连接时,会出现这种情况。 连接器提供程序解决方案的版本 1029 已修复此问题。 更新后的版本应于 2023 年 2 月 20 日在所有区域发布。 要确定虚拟连接器提供程序解决方案是否需要更新,请执行以下操作:

    1. 在左侧导航窗格中选择解决方案。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。
    2. 选择历史记录选项卡。
    3. 搜索 ConnectorProvider。
    4. 查看信息,确认是否需要更新解决方案。
    5. 如果历史记录表明需要更新,转到 Microsoft 商业市场搜索虚拟连接器提供程序,然后选择立即获取将解决方案导入您的环境。
    6. 再次按照以下步骤创建虚拟表。
  • 我收到通知,显示虚拟表创建期间发生超时。
    解决方法:当其他现有作业导致虚拟表创建延迟时,可能会发生这种情况。 请在等待几分钟后重试。

  • 我收到“发生意外错误”的通知
    解决方案:当虚拟表数据源以无效值创建时会出现这种情况。 要解决这个问题,需要找到导致错误的虚拟表数据源,将其删除,然后重新创建虚拟表。

    1. Power Apps 中选择设置(齿轮图标)> 高级设置
    2. 在顶部菜单中选择设置
    3. 转到解决方案。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。
    4. 转到包含虚拟表的解决方案(如果您没有使用解决方案,请转到 Common Data Services 默认解决方案)。
    5. 在左侧面板中,选择“虚拟表”数据源。
    6. 双击每个数据源(以 VCP_DS_..." 开头),找到有错误的数据源后,删除该数据源。
    7. 重新创建虚拟表。
  • 此时将显示一条消息“此表已存在,您正在重新创建。 无法更改主字段和架构名称。”
    解决方法:此表以前已创建。 继续创建将重新创建此表,这将导致在虚拟表中更新对数据源所做的任何表更改(包括添加或删除字段)。 自定义名称和主字段值不可编辑。

  • 错误消息:“primary_key_name 不能为空”
    解决方法:您选择的表或列表不包含主键的 GUID 值。 要创建虚拟表,您需要在源表中添加一个额外的 GUID 列。

  • 我创建了一个 Excel 虚拟表,但在“表”中看不到它。
    解决方法:由于虚拟表创建是异步的,您可以在系统作业中查看过程的状态。 查找名称以 Microsoft.Wrm.DataProvider.Connector.Plugins.ConnectorGenerateVEPlugin 开头且关于列的值等于新虚拟表名称的系统作业。 如果状态仍为“正在进行”,请等待作业完成。 如果出现错误,您可以通过单击系统、作业名称超链接获取详细信息。 在此示例中,表创建仍在等待中:

    表创建等待

    在这里,由于 429“请求过多”错误,表创建失败:

    表创建由于 429 错误失败

  • 表创建的系统作业成功,但我收到与无效或缺少列相关的运行时错误
    解决方法:如果在创建表的字段时失败,表创建过程不会失败,会尝试继续使用其余字段。 这是因为我们不想在某些列类型不受支持时阻止虚拟表的创建。 要获取有关错误的详细信息,您可以在管理> 系统设置 > 自定义 > 启用插件跟踪日志的日志记录中启用记录功能,然后删除虚拟表,尝试重新创建此表。

后续步骤

使用虚拟连接器提供程序创建虚拟表(预览)

设置虚拟表关系