在模型驱动应用中禁用自动保存

自动保存可帮助应用用户专注于其工作,而不必管理如何在窗体中保存数据。 大多数人都喜欢在每次更新行时不必显式保存数据,但有些组织可能有一些自定义,专门设计用于要求显式保存。 对于这些组织,有一些选项用于管理如何应用自动保存。

自动保存工作原理

默认情况下,更新后的表和经典表的所有主窗体都已启用自动保存。 在创建(初始保存)行后,对窗体所做的任何更改都会在完成更改后 30 秒自动保存。 如果窗体中没有更改,则在打开窗体时不会发生自动保存。 在完成更改后,会重新计算自动保存开始前的 30 秒期间。 如果另外有人在您编辑行时更新了同一行,则在发生自动保存时,将会在窗体中检索和显示这些更改。

启用自动保存后,将仅在初次保存行时显示“保存”按钮。 创建行后,命令栏中的保存按钮不会显示,但可以看到右下角有一个 自动保存按钮。 按钮,显示是否有任何未保存的更改。 此控件在禁用自动保存时也会显示。

可以选择此按钮以保存行,然后立即刷新窗体中的数据。 启用自动保存功能后,每当您离开一行或关闭显示一行的独立窗口时,行都会被保存。 对于未更新的表,不需要在窗体中显示保存并关闭按钮。

是否应禁用自动保存?

如果有插件、工作流或表单脚本需要在保存行时执行,它们会在每次发生自动保存时运行。 如果这些扩展设计时没有考虑到自动保存功能,那么这种模式可能会导致不良行为。 不管是否启用自动保存,插件、工作流和窗体脚本都应设计为查找特定更改,不应对每个保存事件都无差别地执行。

如果您为表配置了审核,则将每次保存视为单独的更新。 如果有人在有未保存更改的表单上停留超过 30 秒,那么只有在执行自动保存后添加更多数据时,才会观察到另一个条目。 如果您有依赖于审核数据的报告,并将每次保存视为单独的“触及”行,则可能会看到触及的频率增加。 如果使用此方法,都应该考虑无论是否启用自动保存,单个用户行为使其成为一个不可靠的指标。

为组织禁用自动保存

如果您确定自动保存导致您使用的扩展出现问题,Power Platform 管理员可以为环境禁用它。 没有用于为单个表或窗体禁用自动保存的设置。

  1. 登录 Power Platform 管理中心,进入管理>环境,然后打开所需的环境。
  2. 在命令栏中选择设置
  3. 展开产品,然后选择行为
  4. 基本行为下,针对自动保存,选择

为窗体禁用自动保存

如果要为特定表窗体禁用自动保存,可向表中的 OnSave 事件添加代码。

备注

使用这种方法,表单的自动保存功能将被禁用,但选择右下角的 自动保存按钮。 按钮后,数据仍会被保存。 如果您试图跳转表单或关闭已更改数据的表单,系统会提示您保存更改,然后才允许您跳转或关闭表单。

使用此处的程序会导致表单上的保存并关闭按钮不起作用,因为它调用了 preventDefault 2 上的 saveMode,这会引用保存并关闭。 您可以去掉 getSaveMode() == 2 复选框来避免这种情况,但这样一来,当您尝试从表单导航或关闭数据已更改的表单时,表单就会自动保存。 由于这个原因,保存并继续按钮也不起作用。

  1. 登录到 Power Apps

  2. 在左侧导航窗格上,选择,选择所需表,然后选择窗体区域。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。

    您还可以在解决方案中对表进行调整。 要进行此操作,在左侧窗格中选择解决方案,选择表,然后选择窗体区域。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。

  3. 打开要编辑的窗体。

  4. 选择切换到经典在经典窗体设计器中编辑窗体。

  5. 创建 JavaScript Web 资源并将其添加到窗体:

    1. 在窗体编辑器中的窗体 组下,选择窗体属性

    2. 事件选项卡上的窗体库下,选择添加

    3. 查找行对话框中,选择新建

    4. 在 Web 资源窗体中,输入以下信息:

      称谓 参考
      Name preventAutoSave
      显示名称 阻止自动保存
      类型 脚本(JScript)
    5. 类型列旁边,选择文本编辑器

    6. 列中,粘贴以下代码:

      function preventAutoSave(econtext) {  
          var eventArgs = econtext.getEventArgs();  
          if (eventArgs.getSaveMode() == 70 || eventArgs.getSaveMode() == 2) {  
              eventArgs.preventDefault();  
          }  
      }  
      
      
    7. 选择确定关闭文本编辑器。

    8. 选择保存以保存 Web 资源,然后关闭“Web 资源”窗口。

    9. 查找行对话框中,您创建的新网络资源将被选中。 选择添加关闭该对话框。

  6. 配置 OnSave 事件:

    1. 窗体属性窗口中的事件处理程序 分区,将事件 设置为OnSave

    2. 选择添加

    3. 处理程序属性窗口中,将设置为在上一步中添加的 Web 资源。

    4. preventAutoSave列中键入“”。 区分大小写。 不要包含引号。

    5. 确保选中已启用

    6. 选中将执行上下文作为第一个参数传递

      重要提示

      如果不这样做,脚本将无法运行。

      处理程序属性对话框应如下所示。 自定义前缀“new_”可能会基于为组织的默认发布者设置的自定义前缀而有差异。

      用于防止 Dynamics 365 中自动保存的 OnSave 事件处理程序。

    7. 选择确定以关闭处理程序属性对话框。

    8. 如果有 OnSave 的任何其他事件的事件处理程序,请使用绿色箭头将此处理程序移到顶部。

      窗体属性应显示如下。 请注意,在此处显示的示例中,从解决方案中进行更新,因此发布者前缀 (dspin_) 与默认发布者 (new_) 提供的前缀不同。 这是因为解决方案使用了不同的发布商

    高级设置

  7. 选择确定以关闭窗体属性对话。

  8. 选择保存并关闭以关闭窗体。

  9. 在解决方案资源管理器中,单击发布所有自定义项

在将此脚本应用于 OnSave 事件之后,当用户使用此窗体编辑行时,窗体的右下角将显示未保存更改消息,就像未禁用自动保存时那样。 但在用户选择旁边的 自动保存按钮。 按钮之前,此信息不会消失。

后续步骤

创建和设计窗体