AsType 和 IsType 函数

功能 适用于
AsType 画布应用 Copilot Studio 模型驱动应用 Power Platform CLI Dataverse 函数 Power Pages
IsType 画布应用 Copilot Studio 模型驱动应用 Dataverse 函数 Power Pages

检查记录引用是否是特定的表类型(IsType)并将引用视为该类型(AsType)。

备注

PAC CLI pac power-fx 命令 不支持 IsType

Description

AsTypeIsType函数可用于将记录引用(例如 Dataverse 中的多态查找)和动态值转换为可以直接使用的类型化值。

记录引用

阅读了解记录引用和多态查找,了解更广泛的介绍和更多详细信息。

查找字段通常指特定表中的记录。 由于表格类型已经确定,因此可以使用简单的点符号访问查找的字段。 例如,First( Accounts ).'Primary Contact'.'Full Name'客户表到达联系人表中的主要联系人记录,提取全名字段。

Microsoft Dataverse 还支持多态查找字段,它可以引用一组表中的记录,如这些示例中所示。

查找字段 可以引用
所有者 用户团队
客户 客户联系人
关于 客户联系人知识文章等。

在区域应用公式中,使用记录引用处理多态查找。 由于记录引用可以引用不同的表,因此在编写公式时,无法知道哪些字段在运行时可用。 不能使用 Record.Field 表示法。 这些公式需要适应应用在运行时遇到的记录。

IsType 函数检查记录引用是否引用特定表类型。 函数返回布尔值 TRUE 或 FALSE。

AsType 函数将记录引用视为特定的表类型,也称为 强制转换。 将结果用作表的记录,并使用 Record.Field 表示法访问该记录的所有字段。 如果引用不是特定类型,则会发生错误。

将这些函数一起使用,首先检查记录的表类型,然后将其视为该类型的记录,以便字段可用:

If( IsType( First( Accounts ).Owner, Users ),
    AsType( First( Accounts ).Owner, Users ).'Full Name',
    AsType( First( Accounts ).Owner, Teams ).'Team Name'
)

仅当访问记录引用的字段时,才需要这些函数。 例如,在 Filter 函数中使用记录引用,而不 IsType 使用或 AsType

Filter( Accounts, Owner = First( Users ) )

同样,可以将记录引用与 Patch 函数一起使用:

Patch( Accounts, First( Accounts ), { Owner: First( Teams ) } )

在记录上下文中使用这些函数(例如 在库编辑窗体 控件中),可能需要 全局消除歧义运算符 来引用表类型。 例如,此公式适用于显示 公司名称客户 查找联系人列表的库:

If( IsType( ThisItem.'Company Name', Accounts ),
    AsType( ThisItem.'Company Name', Accounts ).'Account Name',
    AsType( ThisItem.'Company Name', Contacts ).'Full Name'
)

对于这两个函数,请使用连接到表的数据源的名称指定类型。 若要使公式正常工作,请将数据源添加到应用中,用于检查或强制转换的任何类型。 例如,如果要使用该IsType表和AsType所有者查找和记录,请将“用户”表添加为数据源。 仅添加在应用中使用的数据源;无需添加查找可以引用的所有表。

如果记录引用为 IsType 则返回 FALSE,并 AsType 返回 空白空白记录的所有字段也为空白

动态值

重要提示

需要将 Web API 或 [ParseJSON 函数]中的动态值转换为特定类型化值,然后才能在 Power Fx 中使用它。 以下是一些选项。

  1. 在使用该字段时隐式键入字段。 例如,如果将某个对象与运算符一起使用 + ,则对象将转换为数字(如果可以转换为数字)。 此选项可能会导致意外的转换,并且无法整体转换记录和表。
  2. 使用 DecimalTextDateTimeGUID 及其他类型构造函数分别明确键入每个字段。 此选项对公式最具侵入性,因为你需要单独执行每个字段。
  3. 使用 ParseJSON 函数的第二个参数明确键入 JSON。 此选项非常简单,无需使用 动态 值。
  4. 使用AsType函数显式键入动态值。 还可以在尝试使用 IsType 函数进行转换之前检查类型。

语法

AsTypeRecordReferenceTableType

  • RecordReference - 必需。 记录引用,通常是引用多个表中的记录的查阅字段。
  • TableType - 必需。 要将记录强制转换为的特定表。

AsTypeDynamicValue,TypeSpecification

  • DynamicValue - 必需。 ParseJSON 函数或 API 调用中的动态值。
  • TypeSpecification - 必填。 使用 Type 函数定义的类型名称或类型规范。

IsTypeRecordReferenceTableType

  • RecordReference - 必需。 一个记录引用,通常是一个查找字段,可以引用多个表中任何一个表的记录。
  • TableType - 必需。 要测试的特定表。

IsTypeDynamicValue,TypeSpecification

  • DynamicValue - 必需。 ParseJSON 函数或 API 调用中的动态值。
  • TypeSpecification - 必填。 使用 Type 函数定义的类型名称或类型规范。

示例

记录引用

了解记录引用和多态查找中包含大量示例。

  1. 创建适用于平板电脑的空白画布应用。

  2. 在左窗格中,选择“数据>”,然后添加“帐户”和“联系人”表。

    具有客户和联系人两个数据源的空白应用。

  3. 在左窗格中,选择“ + 插入” >布局>空白垂直库

    插入具有空白垂直布局的 Gallery 控件。

  4. 选择连接到数据,然后选择联系人作为数据源。

  5. 将库布局设置为 标题和副标题

    从属性窗格打开布局选取器。

    将布局设置为“标题和副标题”。

  6. 数据窗格中,打开 Title1 列表,然后选择命名

    设置标题值。

  7. 选择 Subtitle1 Label 控件。

    设置副标题值。

  8. Subtitle1Text 属性设置为以下公式:

    If( IsBlank( ThisItem.'Company Name' ), "--",
        IsType( ThisItem.'Company Name', Accounts ),
            "Account: " & AsType( ThisItem.'Company Name', Accounts ).'Account Name',
        "Contact: " & AsType( ThisItem.'Company Name', Contacts ).'Full Name'
    )
    

    屏幕现已完成,显示在库中混合的客户和联系人。

    库中的副标题显示以下值:

    • 如果 'Company Name'空白,则为 "--"。
    • “帐户:”和“帐户名称”表中的“帐户名称”字段(如果公司名称字段引用帐户)。
    • “联系人:”和联系人表中的全名字段(如果公司名称字段引用联系人)。

    结果可能会有所不同,因为可以修改示例数据以显示更多类型的结果。

动态值

以下示例演示了 ParseJSONAsTypeIsTypePac CLI Power Fx REPL 以各种方式解释的简单 JSON 记录。

在此第一个示例中, 没有向 ParseJSON 提供类型信息,因此它将返回动态值。

>> Set( rec, ParseJSON( "{""a"":1}" ) )
rec: <Dynamic: Use Value, Text, Boolean, or other functions to establish the type>

在数字上下文中使用时,该字段会隐式转换为数字。

>> 1 + rec.a
2

作为另一种选择,本例通过 ParseJSON 的第二个参数显式地将记录转换为类型化的 Power Fx 记录。

>> ParseJSON( "{""a"":1}", Type( {a: Number} ) )
{a:1}

另一种替代方法是,此示例使用 AsType显式将记录转换为类型化的 Power Fx 记录。

>> AsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
{a:1}

最后,如果不确定,此示例在将类型与 IsType 函数转换之前进行测试。

>> IsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
true