直接从另一个表的主窗体编辑相关表记录
您可以通过多种方式在 Power Apps 中的表窗体上处理相关表记录。 例如,您可以使用快速视图窗体以只读模式包含相关表,并可以使用对话中的主窗体创建或编辑记录。
处理相关表记录的另一种方法是在另一个表的主窗体中添加窗体组件控件。 窗体组件控件让用户可以直接从另一个表的窗体编辑相关表记录的信息。
例如,这里是主客户窗体上一个单独选项卡上的窗体组件,它让用户无需离开客户窗体即可编辑联系人记录。
例如,这是主客户窗体上现有选项卡上的窗体组件,它还允许用户在不离开客户窗体摘要选项卡的情况下编辑联系人记录。
将窗体组件添加到表主窗体中
- 在左侧导航窗格中,选择组件。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。
- 展开输入或显示,然后选择窗体。
在 form component 控件配置页面上,选择控件的属性:
- 选择窗体的查找列。
- 选择相关窗体。 根据列的相关表配置:
- 如果列连接到单个表(如“创建者”列),选择要使用的相关窗体。
- 如果列连接到多个表(多态,如负责人列),选择 + 相关窗体,然后选择添加添加相关窗体。 继续选择 + 相关窗体 > 添加为每个相关表添加相关窗体。
- 默认情况下,所有客户端应用类型 Web、手机和平板电脑都可以显示窗体。 清除您不希望显示窗体的客户端类型。
- 选择完成。
- 保存然后发布窗体。
使用经典体验添加窗体组件
在此示例中,为添加到客户主窗体的 form component 控件配置了联系人标准主窗体。
重要
添加 form component 控件的方式已更改。 我们建议您使用最新体验。 详细信息:将窗体组件添加到表主窗体中
登录到 Power Apps。
在左窗格中选择表。 或者,打开解决方案,然后选择一个表,如客户。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。
从组件菜单中选择窗体。
从可用窗体中选择窗体类型为主要的窗体。
选择切换到经典。 经典窗体编辑器界面将在浏览器中作为选项卡打开。
选择插入选项卡。然后,创建一个新选项卡并添加一个新的部分,或将一个新部分添加到现有选项卡上。
在新部分中,添加查找列,如主要联系人查找列。
选择查找列,然后在主页选项卡上,选择更改属性。
在控件选项卡上,选择添加控件,在控件类型列表中,选择窗体组件控件,然后选择添加。
为组件选择 Web、平板电脑和手机。
选择编辑(铅笔图标),在配置属性对话框中选择绑定到静态值,然后添加与此类似的 XML 条目,其中 TableName 是表的唯一名称,FormID 是主窗体的窗体 ID:
<QuickForms><QuickFormIds><QuickFormId entityname="TableName">FormID</QuickFormId></QuickFormIds></QuickForms>
- 例如,若要在客户窗体上呈现联系人主窗体,请使用:
<QuickForms><QuickFormIds><QuickFormId entityname="contact">1fed44d1-ae68-4a41-bd2b-f13acac4acfa</QuickFormId></QuickFormIds></QuickForms>
- 例如,若要在客户窗体上呈现联系人主窗体,请使用:
选择确定,然后再次选择确定。
保存然后发布窗体。
提示
要查找表的唯一名称,在 Power Apps 中选择表,然后选择设置。 名称将显示在编辑表窗格中。 在编辑窗体时,可以在浏览器 URL 中找到窗体 ID。 此 ID 在 URL 的 /edit/ 部分后面。
在经典窗体设计器中,窗体 ID 在 URL 的 formId%3d 部分的后面。
窗体组件行为
本节介绍在模型驱动应用中使用时的窗体组件行为。
选择记录
要让 form component 控件显示窗体,它所绑定的查找列需要有一个值。 否则,控件将显示消息未选择源记录。 设置值的一种方法是向窗体添加一个查找控件,该控件与窗体组件控件绑定到相同的查找列。 当您使用查找控件更改查找列值时,窗体组件控件将显示一个窗体,其中包含新查找列值的数据。
列验证
在主窗体和窗体组件控件中的所有列都必须有效才能将数据发送到 Microsoft Dataverse。 对于两个列验证错误、缺少必需的列等,都是如此。
将为主窗体及其窗体组件控件运行 OnSave
处理程序。 任何处理程序都可以使用 preventDefault 取消对主窗体和窗体组件控件的保存。 这意味着没有保存操作可以调用 preventDefault
来将数据发送到 Dataverse。 OnSave
处理程序的调用顺序不定义。 详细信息:模型驱动应用中的窗体 OnSave 事件(客户端 API 引用)
记录保存
通过验证阶段后,每个记录的数据将发送到 Dataverse。 当前,每个记录都使用不同的请求独立更新。 保存不是事务性的,保存的顺序不定义。 保存一个窗体组件时出错不会将更改回滚到主窗体或其他窗体组件。 每次保存完成后,窗体上所有记录的数据都将刷新。
通知
窗体组件上的通知会聚合到主窗体的通知中。 例如,如果窗体组件中有无效列,在您尝试保存时,无效列的通知将显示在主窗体的顶部而不是窗体组件中。
错误处理
如果保存期间存在多个错误,只会向用户显示一个错误。 如果用户可以进行更改来解决第一个错误并保存,下一个错误将可见。 用户需要继续保存,直到解决所有错误。
更改有未保存更改的记录
如果窗体组件的窗体中有未保存的更改,当用户尝试更改窗体组件绑定到的查找列时,将向用户发出有关此更改的警报。
客户端 API
窗体上下文可用于窗体组件控件。 通过 API 访问控件,例如 getControl,可以通过主窗体的窗体上下文访问窗体上下文。 在窗体组件控件中访问相关表的数据之前,事件处理程序应等待 isLoaded API 以使控件返回 true。
限制
当您将窗体组件控件添加到表窗体时,请注意以下限制:
窗体组件控件仅支持呈现主窗体。 同样,仅主窗体支持添加窗体组件控件。 其他窗体类型则不支持,如快速创建、快速视图和卡片。
具有业务流程流的窗体当前在主表窗体或相关表窗体中不受支持。 如果您的某个窗体具有业务流程流,您可能会遇到意外行为。 我们建议您不要将窗体组件与使用业务流程流的窗体一起使用。
窗体组件控件不支持嵌入式窗体组件控件,如将窗体组件控件添加到由窗体组件控件使用的窗体中。
窗体组件控件不支持嵌入式画布应用。 您可能会在使用这些画布应用时遇到意外行为。
如果窗体组件控件使用的窗体中包含多个选项卡,它将仅显示该窗体的第一个选项卡。
不支持对单个窗体上的不同窗体组件控件使用相同的窗体。
您用于窗体组件的窗体必须包含在您的应用中。 如果不存在,或者如果当前用户无权访问窗体,则它将回退到该应用中包含的最主要窗体,并且可供用户使用(基于窗体顺序)。
由窗体组件中的窗体使用的所有组件都必须包含在您的应用中。 这些组件包括相关表、视图和业务流程流。 如果不存在,则它们将在窗体中不可用,或者可能出现意外行为。
在多会话应用中呈现时,窗体组件控件具有某些限制。 具体来说,在表单组件表单上动态添加的处理程序(例如
addOnSave
或addOnChange
在切换多会话选项卡后可能不会运行)。您可能会注意到,当窗体组件中用于设置日程表留言板的列发生更改时,日程表留言板可能不会更新。 刷新页面时,日程表留言板会按预期更新。
在移动设备上,timeline 控件当前不出现在 form component 控件中。
对于子网格,如果在窗体组件内呈现查看所有记录和查看关联记录命令按钮,这些按钮将不可用。
批量编辑对话中不支持 form component 控件。 默认情况下,它们不会出现在批量编辑对话内的窗体中,并且不会保存对相关表记录所做的任何更改。