在数据源中显示、编辑和创建记录。
Description
如果添加 “显示”窗体 控件,则用户可以显示记录的所有字段或仅显示指定的字段。 如果添加 “编辑”窗体 控件,用户可以编辑这些字段、创建记录并将这些更改保存到数据源。
如果添加 库 控件,则可以将其配置为在数据源中显示表,然后配置窗体以显示用户在库中选择的记录。 还可以添加一个或多个 按钮 控件,用户可以选择该控件来保存编辑、取消编辑和创建记录。 通过将控件一起使用,可以 创建完整的解决方案。
局限性
窗体控件具有以下限制:
- 无法将表单复制并粘贴到数据卡中。 这是为了防止创建某些控件组合,从而危及应用的稳定性和性能。
记录选择
对于任一类型的窗体,请将其 DataSource 属性设置为记录表,并将窗体的 Item 属性设置为在该表中显示特定记录。 例如,可以将窗体的 Item 属性设置为库控件的 SelectedItem 属性。 当用户在库中选择记录时,窗体中会显示相同的记录,但窗体可以显示更多字段。 如果用户返回库并选择其他记录,库的 SelectedItem 属性将更改。 此更改将更新窗体的 Item 属性,然后显示新选择的记录。
还可以通过使用下拉列表控件来设置窗体的 Item 属性,如“显示”、“编辑”或“添加记录描述”或“查找”或“第一”等函数。 例如,可以将 Item 属性设置为以下任一公式,以在 Microsoft Dataverse 的 Accounts 表中显示 Fabrikam 条目:
First(Accounts)
Lookup(Accounts, "Fabrikam" in name)
每个窗体控件都包含一个或多个 卡片 控件。 通过设置卡片的 DataField 属性,可以 指定卡片显示哪些字段和其他详细信息。
创建记录
当 “编辑”窗体 控件处于 “编辑 ”模式时,用户可以更新窗体的 Item 属性中指定的记录。 如果检查了, Mode 属性将返回 “编辑”。
但是,当 “编辑”窗体 控件处于 “新建 ”模式时, 将忽略 Item 属性。 窗体不显示现有记录;相反,每个字段中的值与配置窗体的数据源的默认值匹配。 NewForm 函数导致窗体切换到此模式。
例如,可以将按钮的 Text 属性设置为包含 NewForm 函数的公式,以显示 New 及其 OnSelect 属性。 如果用户选择该按钮,窗体将切换到 “新建 ”模式,以便用户可以创建以已知值开头的记录。
如果 ResetForm 函数运行或 SubmitForm 函数成功运行,窗体将切换回编辑模式。
- 可以将按钮的 Text 属性设置为包含 ResetForm 函数的公式,以显示 Cancel 及其 OnSelect 属性。 如果用户选择该按钮,则放弃正在进行的任何更改,并且窗体中的值再次与数据源的默认值匹配。
- 你可以将按钮的 Text 属性设置为包含 SubmitForm 函数的公式,以显示“保存更改”及其 OnSelect 属性。 如果用户选择该按钮并更新数据源,窗体中的值将重置为数据源的默认值。
保存更改
如果按上一部分所述创建 “保存更改 ”按钮,用户可以创建或更新记录,然后选择该按钮以将这些更改保存到数据源。 可以改为将 图像 控件或其他控件配置为执行相同的任务,前提是使用 SubmitForm 函数配置该控件。 在任何情况下, Error、 ErrorKind、 OnSuccess 和 OnFailure 属性都会提供有关结果的反馈。
当 SubmitForm 函数运行时,它首先验证用户想要提交的数据。 如果必填字段不包含值或另一个值不符合其他约束,则设置 ErrorKind 属性,并且 OnFailure 公式运行。 可以配置 “保存更改 ”按钮或其他控件,以便用户仅当数据有效(即窗体 的有效 属性 为 true 时)才能选择它。 请注意,用户不仅必须更正该问题,而且必须再次选择 “保存更改 ”按钮(或者通过选择 “取消 ”按钮来放弃更改,如前所述)重置 Error和 ErrorKind 属性。
如果数据通过验证, SubmitForm 会将其发送到数据源,这可能需要一些时间,具体取决于网络延迟。
- 如果提交成功,则清除 Error 属性,ErrorKind 属性设置为 ErrorKind.None,OnSuccess 公式运行。 如果用户创建了一条记录(即,如果窗体以前处于 “新建 ”模式),则窗体将切换到 “编辑 ”模式,以便用户可以编辑新创建的记录或其他记录。
- 如果提交失败, 则 Error 属性包含来自数据源的用户友好错误消息,说明问题。 根据问题设置 ErrorKind 属性, OnFailure 公式运行。
某些数据源可以检测两个人尝试同时更新同一记录的时间。在这种情况下, ErrorKind 设置为 ErrorKind.Conflict,解决方法是使用其他用户的更改刷新数据源,并重新应用此用户所做的更改。
小窍门
如果你在窗体上提供 “取消” 按钮,以便用户可以放弃正在进行的更改,请将 ResetForm 函数添加到按钮的 OnSelect 属性,即使该属性还包含 一个 Navigate 函数来更改屏幕。 否则,窗体将保留用户的更改。
版式
默认情况下,卡片放置在手机应用的单个列中,平板电脑应用的三列。 可以指定窗体具有的列数以及卡片在配置窗体时是否应贴靠这些列。 这些设置不公开为属性,因为它们仅用于设置卡片的 X、 Y 和 Width 属性。
有关详细信息,请参阅 “了解数据窗体布局”。
键属性
DataSource – 包含用户将显示、编辑或创建的记录的数据源。
- 如果未设置此属性,则用户无法显示、编辑或创建记录,并且未提供其他元数据或验证。
DefaultMode - 窗体控件的初始模式。 有关可接受的值及其含义,请参阅下面的 模式 说明。
DisplayMode - 用于窗体控件中的数据卡和控件的模式。
派生自基于 Mode 属性,不能单独设置:
| 模式 | DisplayMode | Description |
|---|---|---|
| FormMode.Edit | DisplayMode.Edit | 数据卡和控件是可编辑的,可以接受对记录的更改。 |
| FormMode.New | DisplayMode.Edit | 数据卡和控件可编辑,可接受新记录。 |
| FormMode.View | DisplayMode.View | 数据卡和控件不可编辑和优化以查看。 |
错误 – 当 SubmitForm 函数失败时,要显示此表单的用户友好错误消息。
- 此属性仅适用于 “编辑”窗体 控件。
- 此属性仅在 SubmitForm、 EditForm 或 ResetForm 函数运行时更改。
- 如果未发生错误,则此属性为空,ErrorKind 设置为 ErrorKind.None。
- 如果可能,返回的错误消息将以用户的语言提供。 某些错误消息直接来自数据源,可能不是用户的语言。
ErrorKind – 如果 SubmitForm 运行时发生错误,则发生错误的类型。
- 仅适用于 “编辑”窗体 控件。
- 此属性的枚举与 Errors 函数相同。 编辑窗体控件可以返回以下值:
| ErrorKind | Description |
|---|---|
| ErrorKind.Conflict | 另一个用户更改了同一记录,导致更改冲突。 执行 Refresh 函数以重新加载记录,然后重试更改。 |
| ErrorKind.None | 此错误的类型未知。 |
| ErrorKind.Sync | 数据源报告了错误。 有关详细信息,请查看 Error 属性。 |
| ErrorKind.Validation | 检测到常规验证问题。 |
Item – DataSource 中用户将显示或编辑的记录。
LastSubmit – 上次成功提交的记录,包括任何服务器生成的字段。
- 此属性仅适用于 “编辑”窗体 控件。
- 如果数据源自动生成或计算任何字段(例如具有唯一数字的 ID 字段), 则 LastSubmit 属性将在 SubmitForm 成功运行后具有此新值。
- 此属性的值在 OnSuccess 公式中可用。
模式 – 控件处于 “编辑” 或 “新建 ”模式。
| 模式 | Description |
|---|---|
| FormMode.Edit | 用户可以使用表单编辑记录。 表单卡片中的值已预先填充现有记录,供用户更改。 如果 SubmitForm 函数成功运行,则会修改现有记录。 |
| FormMode.New | 用户可以使用表单创建记录。 窗体控件中的值预先填充数据源记录的默认值。 如果 SubmitForm 函数成功运行,则会创建一条记录。 |
| FormMode.View | 用户可以使用表单查看记录。 窗体控件中的值预先填充数据源记录的默认值。 |
当发生以下任一更改时,窗体将从 “新建 ”模式切换到 “编辑 ”模式:
- 表单已成功提交,并创建了一条记录。 如果库设置为自动将所选内容移动到此新记录,则窗体将处于已创建记录的 编辑 模式,以便用户可以进行其他更改。
- EditForm 函数运行。
- ResetForm 函数运行。 例如,用户可以选择使用此函数配置的 “取消” 按钮。
OnFailure – 在数据作失败时要执行的作。
- 此属性仅适用于 “编辑”窗体 控件。
OnReset – 重置 编辑窗体 控件时要执行的作。
- 此属性仅适用于 “编辑”窗体 控件。
OnSuccess – 数据作成功时要执行的作。
- 此属性仅适用于 “编辑”窗体 控件。
未保存 – 如此 如果 “编辑”窗体 控件包含尚未保存的用户更改。
- 此属性仅适用于 “编辑”窗体 控件。
- 在用户丢失任何未保存的更改之前,请使用此属性警告用户。 若要防止用户在 将 更改保存到当前记录之前在库控件中选择其他记录,请将库的 Disabled 属性设置为 Form.Unsaved ,同样,禁用刷新作。
更新 – 要写回窗体控件中加载的记录的数据源的值。
- 此属性仅适用于 “编辑”窗体 控件。
- 使用此属性可从控件中的卡片中提取字段值。 然后,可以使用这些值通过 Patch 函数调用或连接公开的其他方法手动更新数据源。 如果使用 SubmitForm 函数,则无需使用此属性。
- 此属性返回值的记录。 例如,如果窗体控件包含 Name 和 Quantity 字段的卡片控件,并且这些卡片的 Update 属性的值分别返回“Widget”和 10,则窗体控件的 Updates 属性将返回 { Name: “Widget”, Quantity: 10 }。
有效 – 卡片 或 编辑表单 控件是否包含有效的条目,准备提交到数据源。
此属性仅适用于 “编辑”窗体 控件。
窗体控件的有效属性聚合窗体中所有卡片控件的有效属性。 仅当表单中的所有卡片中的数据有效时,窗体 的 Valid 属性才 为 true ;否则,窗体 的有效 属性为 false。
若要使按钮仅在表单中的数据有效但尚未提交时保存更改,请将按钮的 DisplayMode 属性设置为以下公式:
SubmitButton.DisplayMode = If(IsBlank(Form.Error) ||Form.Valid、DisplayMode.Edit、DisplayMode.Disabled)
其他属性
BorderColor – 控件边框的颜色。
BorderStyle – 控件的边框是 Solid、 Dashed、 Dotted 还是 None。
BorderThickness – 控件边框的粗细。
填充 – 控件的背景色。
高度 – 控件的上边缘和下边缘之间的距离。
可见 – 控件是显示还是隐藏。
宽度 – 控件的左边缘和右边缘之间的距离。
X – 控件的左边缘与其父容器的左边缘之间的距离(如果没有父容器时显示屏幕)。
Y – 控件的上边缘与父容器的上边缘之间的距离(如果没有父容器时屏幕)。
详细信息
- 有关表单工作原理的全面概述,请参阅 “了解数据表单”。
- 请参阅 EditForm 的 Power Fx 公式参考。
辅助功能指南
屏幕阅读器支持
- 请考虑使用 标签向窗体添加标题。