Microsoft Dataverse 与改进数据源体验
概览
在 2021 年 5 月,以前是可选功能的许多功能现在都是所有新应用的默认行为。 本文向在引入新功能之前开发了应用的用户提供有关如何升级其应用以利用最新功能的指南。
本机 Dataverse
如果您在 2019 年 11 月之前使用 Dataverse 或 Dynamics 365 connector 创建了画布应用,则可能没有享受到使用 Dataverse 当前的本机连接体验的好处。
如果您在 2019 年 11 月之前创建了应用,并且未在使用本机 Dataverse 连接,则在“设置”中,在“即将推出的功能”选项卡的“已停用”选项卡中,您将找到改善数据源体验和 Microsoft Dataverse 视图选项以及 Microsoft Dataverse 的关系数据、选择和其他新功能。
如何升级?
通过检查功能的设置,然后按照以下说明升级应用:
Microsoft Dataverse 的关系数据、选项集和其他新功能为“关”
检查即将推出的功能下的已停用部分。 如果设置为关闭,请继续将以下说明作为转换的第一步。
如果您在常规设置中没有看到 Microsoft Dataverse 的关系数据、选项集和其他新功能,或者如果它已经为开,请跳过以下步骤,继续下一节。
步骤 1:将使用显示名称功能打开:
- 将使用显示名称功能打开。
- 等待运行状况监视器完成对您的应用的分析。
- 保存、关闭并重新打开应用。
- 解决所有公式错误。
- 保存、关闭并重新打开应用。
可能的错误和建议:
某些新显示的显示名称可能与其他表、字段或控件的显示名称冲突。 例如,您可能有一个控件和一个具有相同名称的字段。 您可以使用唯一的值来更改控件的名称来加以解决。
对于任何字段和表显示名称冲突,您可能会看到一个预期为表但解析为本地范围字段名称的公式。
这时使用带有 @ 符号的方括号表示全局范围,让它解析为表;例如,[@tableName]。
步骤 2:将关系数据、选项集和 Microsoft Dataverse 的其他新功能和使用 GUID 数据类型而不是字符串功能打开:
- 将关系数据、选项集和 Microsoft Dataverse 的其他新功能功能打开。
- 将使用 GUID 数据类型而不是字符串功能打开。
- 等待运行状况监视器完成对您的应用的分析。
- 解决所有公式错误。
- 保存、关闭并重新打开应用。
可能的错误和建议:
如果您使用的是选择字段或硬编码的 GUID 文本值,可能会在此阶段出现错误。
- 选择项值:如果您将选择项字段与选择项值的文本标识符一起使用,请改用点符号来引用选择项值。 例如,将
Patch(Accounts, OptionSet1 = “12345”)
更改为Patch(Accounts, OptionSet.Item1)
,其中的Item1
与12345
值对应。
详细信息:详细示例。 - GUID:如果您使用的是静态 GUID 字符串,如
015e45e1044e49f388115be07f2ee116
,请将其转换为返回 GUID 对象的函数;例如,GUID(“015e45e1044e49f388115be07f2ee116”)
。 - 查找:如果您使用 Lookup 函数来获取第一级查找值,如
Lookup(Contacts, ‘contactID’ = ThisItem.ContactID”)
,请考虑改为使用ThisItem.PrimaryContacts
(其中 PrimaryContacts 是表的名称)。
改善数据源体验和 Microsoft Dataverse 视图为“关”
使用以下说明将改善数据源体验和 Microsoft Dataverse 视图功能打开:
- 删除现有的 Dataverse 数据源连接。
- 将改善数据源体验和 Microsoft Dataverse 视图功能打开。
- 使用新的数据源选择体验添加 Dataverse 连接。
- 保存您的应用程序。
备注
如果您的应用程序非常大,重新添加数据源连接可能需要一段时间。 请不要在此过程中关闭应用程序。
转换使用 Dynamics 365 connector 的画布应用
若要转换使用 Dynamics 365 Connector 的应用,您需要删除连接并将连接添加到您的数据源。 使用以下步骤将您的连接转换为数据源。
确保改善数据源体验和 Microsoft Dataverse 视图功能已打开。
删除现有的 Dynamics 365 数据源连接。
使用新的数据源选择体验,将数据源的连接添加到 Dataverse。
备注
- 如果您连接到其他环境(当前环境以外),请选择表类别,然后选择更多 (...) 选项更改环境。 然后,您可以从不同的环境中选择一个表来添加到您的应用程序中。 跨租户连接不适用于改进的本机连接器。 您将需要使用数据集成来跨租户访问数据。
- 需要满足下面的一项要求,才能查看要将连接添加到的环境:
- 您是应用的负责人,或者您以共同负责人的身份获得了应用的共享。
- 您至少是以下安全角色之一的成员:环境管理员、环境开发者或系统管理员。 有关环境中的安全角色的详细信息,请转到为环境中的资源配置用户安全性。
保存您的应用程序。
可能的错误和建议:
在以下情况下转换时可能会出现错误:未使用显示名称,使用 GUID 字符串,或使用选择项。
- 如果控件名称冲突,请将控件的名称更改为其他的唯一名称。
- 对于字段和表显示名称冲突,您可能会看到一个预期为表但解析为更加本地范围的字段名称的公式。 这时使用带有 @ 符号的方括号表示全局范围,让它解析为表;例如,[@tableName]。
- 选择项值:如果您将选择项字段与选择项值的文本标识符一起使用,请改用点符号来引用选择项值。 例如,将
Patch(Accounts, OptionSet1 = “12345”)
更改为Patch(Accounts, OptionSet.Item1)
,其中的Item1
与12345
值对应。
详细信息:详细示例。 - GUID:如果您使用的是静态 GUID 字符串,如
015e45e1044e49f388115be07f2ee116
,请将其转换为返回 GUID 对象的函数;例如,GUID(“015e45e1044e49f388115be07f2ee116”)
。 - 查找:如果您使用 Lookup 函数来获取第一级查找值,如
Lookup(Contacts, ‘contactID’ = ThisItem.ContactID”)
,请考虑改为使用ThisItem.PrimaryContacts
(其中 PrimaryContacts 是表的名称)。 - 对于多态引用,请参阅下面的“详细示例”一节。
详细示例
在升级应用以使用新的改善数据源体验和 Microsoft Dataverse 视图功能的同时,将您的应用转换为将新的选项集和两个选项数据类型与支持控件一起使用可能具有挑战性。
多选
之前是将单独的 _myfield
和 _myfield_label
字段用于选择。 现在,有一个 myfield
既可用于独立于区域设置的比较,也可用于获取特定于区域设置的标签。
删除和添加选择数据卡
我们建议您删除现有的数据卡,然后重新添加它们以使用您的选择。 例如,如果您在使用客户表和类别选择,您将看到数据卡的 DataField 属性设置为 _accountcategorycode_label
。 在字段列表中,您可以看到数据卡的类型为字符串:
使用新的改善数据源体验和 Microsoft Dataverse 视图功能,您不会再看到 _accountcategorycode_label
。 它将替换为 accountcategorycode
。 您的卡现在已标记为自定义,您将看到错误。 删除旧数据卡,然后重新添加选择项。 新数据卡具有选择项识别能力。
编辑选择项筛选表达式以使用新语法
以前,如果要在筛选表达式中使用选择值,需要使用值字段。 例如:
Filter(Account,'Category Value' = "1")
您需要编辑此公式。 选择项文本标识符不再用于此值。 此表达式应更新为:
Filter(Account, Category= ‘Category (Accounts)’.’Preferred Customer’)
“Category(Accounts)”是客户表的类别字段中使用的枚举名称。 这是一个本地选择项。 您可以在此处阅读有关本地和全局选择项的详细信息:全局选择项。
编辑选择项 Patch 语句以使用新语法
以下是选择项的早期 Patch 语句的示例:
Patch( Accounts, First(Accounts), { ‘Category Value’: 1 } ) )
您需要更新您的语句以遵循以下形式:
Patch( Accounts, First(Accounts), { Category: ‘Category (Accounts)’.’Preferred Customer’ } )
选择项消除歧义
如果选择项字段的显示名称和选择项的名称相同,您需要消除公式的歧义。 要继续使用客户类别代码示例,@ 意味着使用选择项,而不是字段。
Filter(Accounts, 'Category Code' = [@’Category Code’].'Preferred Customer')
两个选项
删除和添加是/否数据卡
删除现有的数据卡,然后重新添加它们以使用您的是/否。 数据类型以前被识别为简单的布尔值 - 如 true/on 和 false/off,没有标签:
使用新的改善数据源体验和 Microsoft Dataverse 视图功能,您的卡现在将标记为自定义,您会看到错误。 删除旧数据卡,然后重新添加选择项。 添加后,默认情况下您会看到一个带有两个选项的编辑控件。
如果您更倾向于为布尔字段使用切换开关,可以解锁数据卡,将数据卡中的控件替换为切换。 您还需要在切换上设置这些属性。
Toggle1.Default = ThisItem.’Do not allow Bulk Emails’
Toggle1.TrueText = ‘Do not allow Bulk Emails (Accounts)’.’Do Not Allow’
Toggle1.FalseText = ‘Do not allow Bulk Emails (Accounts)’.Allow
DataCard.Value = If( Toggle1.Value,
‘Do not allow Bulk Emails (Accounts)’.’Do Not Allow’,
‘Do not allow Bulk Emails (Accounts)’.Allow )
优化双选项 Patch 语句
使用具有双选项的 Patch 函数其运行方式应是“原样”的。 它支持直接使用 true 和 false,这与布尔相似。 唯一的区别是,如果您之前放在 标签 控件中的值显示 true 和 false,它现在将显示双选项标签。
多态查找
如果您的应用程序引用了多态字段,以下准则可以帮助您升级应用程序。 来自同一字段的多态查找支持对一组受限的多个表的引用。 与其他语言中的引用类似,记录引用是指向特定表中特定记录的指针。 记录引用具有表信息,允许它指向几个其他表中的记录,这与只能指向一个表中的记录的普通查找不同。
对记录的“负责人”字段的访问、设置和筛选
例如,表中的负责人字段可以引用用户表或团队表中的记录。 不同记录中的相同查找字段可以引用不同表中的记录。
具有 Filter 和 Patch 的多态
记录引用可以像完整记录一样使用:
Filter( Accounts, Owner = First( Teams ) )
Patch( Accounts, First( Accounts ), { Owner: First( Users ) })
具有显示负责人名称的库的多态
由于引用可以指向不同的表,因此您必须是特定的。 您不能使用 ThisItem.Owner.Name,因为团队表中的名称字段是团队名称,而用户表中的名称字段是全名。 在您运行应用之前,Power Apps 不会知道您引用的是哪种类型的查找。
若要解决此问题,请执行以下操作:
- 为负责人可能所属的实体类型添加数据源;在当前示例中是“用户”和“团队”。
- 使用更多函数来明确您的意图。
您可以使用以下两个新函数:
- IsType – 检查记录引用是否属于特定表类型。
- AsType – 将记录引用转换为特定的表类型。
使用这些函数,您可以编写一个公式,根据负责人的表类型,显示从两个不同命名字段中获取的负责人名称:
If( IsType( ThisItem.Owner, [@Teams]),
AsType( ThisItem.Owner, [@Teams]).'Team Name',
AsType( ThisItem.Owner, [@Users]).'Full Name' )
[@Teams]
和 [@Users]
的全局消除歧义运算符用于确保您引用全局表类型。 虽然在此例中没有必要,但建议始终明确此项。 一对多关系经常在库的记录范围内发生冲突,这种做法可以避免这种混乱。
访问和设置联系人表的公司名称字段(客户数据类型)
客户查找字段是另一个与负责人相似的多态查找。 每个表只能有一个负责人字段。 但表可以包括零、一个或多个客户查找字段。 联系人系统表包括公司名称字段,这是一个客户查找字段。 请阅读显示客户的字段了解更多详细信息。
访问和设置活动表的相关项字段,如传真、电话联络、电子邮件
多态查找不仅限于“客户”和“联系人”。 表列表可使用自定义表扩展。 例如,传真表有一个多态的相关项查找字段,它可以引用客户、联系人和其他表。 如果您的库的数据源设置为“传真”,您可以使用以下公式显示与“相关”查找字段关联的名称。
If( IsBlank( ThisItem.Regarding ), "",
IsType( ThisItem.Regarding, [@Accounts] ),
"Account: " & AsType( ThisItem.Regarding, [@Accounts] ).'Account Name',
IsType( ThisItem.Regarding, [@Contacts] ),
"Contacts: " & AsType( ThisItem.Regarding, [@Contacts] ).'Full Name',
"" )
访问记录的所有活动的列表
在 Dataverse 中,传真、任务、电子邮件、注释、电话联络、信件和聊天等表被指定为活动。 您还可以创建自己的自定义活动表。
您可以显示特定类型的活动(如传真或税款),或与表(如客户)关联的所有活动。 添加您计划在画布应用中显示其数据的活动表和其他各个表。
每次向(例如,任务表)添加记录时,都会在活动表中创建一个记录,其中包含所有活动表中的共有字段。 有关更多详细信息,请阅读活动表。
以下示例显示,当您选择“客户”时,将显示与该客户关联的所有“活动”:
记录从活动表显示。 但是您仍然可以使用 IsType 函数来标识它们是哪种活动。 同样,在对表类型使用 IsType 之前,必须添加必要的数据源。
使用此公式,可以在库中的标签控件中显示记录类型:
If( IsType( ThisItem, [@Faxes] ), "Fax",
IsType( ThisItem, [@'Phone Calls'] ), "Phone Call",
IsType( ThisItem, [@'Email Messages'] ), "Email Message",
IsType( ThisItem, [@Chats] ), "Chat",
"Unknown")
访问记录的注释列表
创建表时,可以启用附件。 如果选中启用附件的复选框,您将创建与注释表的相关关系,如下图为客户表所示:
筛选
您无法基于“相关”字段读取或筛选。 不过,可以使用反向的“注释”一对多关系。 要列出与客户表关联的所有注释,您可以使用以下公式:
First( Accounts ).Notes
修补
不能使用 Patch 在表上设置注释字段。 要将记录添加到表的注释表中,您可以使用 Relate 函数。 首先创建注释,如此示例所示:
Relate( ThisItem.Notes, Patch( Notes, Defaults( Notes ), { Title: "A new note", isdocument:'Is Document (Notes)'.No } ) )