SaveData、LoadData 和 ClearData 函数

适用于:画布应用

从应用主机的存储保存和重新加载集合

备注

这些函数现在可以在作为试验功能在 Web 浏览器中播放应用时使用。 默认情况下禁用此功能。 要启用,导航到设置>即将推出的功能>试验>在 Web 播放器上启用 SaveData、LoadData 和 ClearData。,打开切换开关。 要提交有关此试验功能的反馈,请转到 Power Apps 社区论坛

描述

SaveData 函数会存储某个集合,以便在将来通过另一个名称来使用。

LoadData 函数使用此前通过 SaveData 保存的名称重新加载集合。 不能使用此函数加载另一个源的集合。

ClearData 函数清除特定名称下的存储,如果未提供名称,则清除与应用关联的所有存储。

备注

  • SaveDataLoadDataClearData 之间共享的名称是键,不是文件名。 它不必太复杂,因为名称对于每个应用都是唯一的,没有名称冲突危险。 名称不能包含以下任一字符:*".?:\<>|/
  • 对于在 Teams 和 Web 浏览器中运行的 Power Apps,SaveData 限制为 1 MB 数据。 在移动播放器中运行的 Power Apps 没有固定限制,但有下面讨论的一些实际限制。
  • 请勿使用 SaveData 在 Web 中存储敏感数据,因为它将以纯文本格式存储。

使用这些函数可通过以下方式提高应用启动性能:

  • 首次运行时在 App.OnStart 公式中缓存数据。
  • 在下次运行时重新加载本地缓存。

您还可以使用这些函数将简单脱机功能添加到您的应用中。

在下列情况中,不能在浏览器中使用这些函数:

  • 在 Power Apps Studio 中创作应用。

要测试您的应用,请在 iPhone 或 Android 设备上的 Power Apps Mobile 中运行它。

这些函数在内存集合上运行时有可用应用内存量限制。 可用内存可能因各种因素而异,如:

  • 设备和操作系统。
  • Power Apps 播放器使用的内存。
  • 具有屏幕和控件的应用的复杂程度。

在存储大型数据时,请在期望应用运行的设备类型上使用预期场景测试应用。 预计通常会有 30 MB 到 70 MB 的可用内存。

这些函数取决于使用 CollectClearCollect 隐式定义的集合。 您无需调用 CollectClearCollect 即可将数据加载到集合中进行定义。 在先前的 SaveData 之后使用 LoadData 时这种情况很常见。 所需要的就是公式中存在这些函数,以隐式定义集合的结构。 有关详细信息,请参阅创建和删除变量

加载的数据将追加到集合中。 如果要从空集合开始,请在调用 LoadData 之前使用 Clear 函数。

数据安全性

请仔细考虑使用 SaveData 存储的数据的隔离和加密,并决定它是否适合您的需求,尤其是当设备由多个用户共享时。

使用 SaveData 存储的数据通过 Power Apps 播放器与其他 Power Apps 隔离。 数据根据应用的应用 ID 进行存储,并在 Power Apps 之间自动隔离 SaveData 命名空间。

操作系统和浏览器负责在 Power Apps 与设备上的其他应用之间以及与网站之间隔离数据。 例如,操作系统负责将存储在 Microsoft Outlook 中的数据与存储在 Power Apps 中的数据隔离开来,并将该数据与 Bing.com 或 PowerApps.com 等网站的数据隔离开来。 操作系统内置的应用沙箱设施用于进行 SaveData 存储,用户通常无法访问或者看不到这些存储。

当使用同一个应用时,操作系统和浏览器还负责在不同操作系统级别用户之间隔离数据。 例如,如果两个不同的用户共享一台计算机并使用两个不同的 Windows 登录凭据,则操作系统负责在这两个 Windows 用户之间隔离数据。

如果操作系统用户相同,则不一定可以在不同 Power Apps 用户之间隔离数据。 并非每个 Power Apps 播放器都以同样的方式对待它。 例如,在以同一 Windows 用户身份登录时,在 Power Apps 播放器中,用户注销 Power Apps 并以其他 Power Apps 用户身份登录。 在更改 Power Apps 用户之前存储在应用中的数据或许可供同一应用中的第二个 Power Apps 用户访问。 数据也可能会被删除,第一个 Power Apps 用户可能无法再访问它。 这种行为因 Power Apps 播放器而异。

操作系统还可以加密数据;或者您可以使用移动设备管理工具,例如 Microsoft Intune。 在 Web 浏览器中播放应用时存储的数据不加密。

语法

SaveData( Collection, Name )
LoadData( Collection, Name [, IgnoreNonexistentFile ])

  • Collection - 必需。 要存储或加载的集合。
  • Name - 必需。 存储的名称。 名称必须相同,才能保存和加载相同的数据集。 命名空间不与其他应用共享。 名称不能包含以下任一字符:*".?:\<>|/
  • IgnoreNonexistentFile - 可选。 一个布尔值,指示如果文件不存在该执行哪些操作。 使用 false(默认)返回错误,使用 true 隐藏错误。

ClearData( [名称] )

  • Name - 可选。 先前使用 SaveData 保存的存储的名称。 如果未提供名称,将清除与应用关联的所有存储。

示例

公式 描述 结果
SaveData( LocalCache, "MyCache" ) LocalCache 集合以名称“MyCache”保存到用户设备中,以供 LoadData 稍后检索。 数据以“MyCache”名称保存到应用主机。
LoadData( LocalCache, "MyCache" ) 从用户设备以名称“MyCache”加载 LocalCache 集合,该集合先前已使用 SaveData 调用存储。 数据以“MyCache”名称从应用主机加载。
ClearData( "MyCache" ) 清除名称“MyCache”下的存储。 此名称下存储的所有数据将不再通过 LoadData 提供。 数据以“MyCache”名称从应用主机中删除。
ClearData() 清除与此应用关联的所有存储。 其他应用存储的数据不受影响。 所有数据将从应用主机中删除。

简单脱机示例

以下简单示例在脱机状态下捕获和存储日常物品的名称和图片。 它将信息存储在设备的本地存储中以备以后使用。 这样在关闭应用或重启设备时不会丢失数据。

备注

此示例使用 Camera 控件捕获图像。 由于在 Teams 或 Web 浏览器中运行时 SaveData 限制为 1 MB 数据,因此此示例无法处理超过几个图像。 而且,根据相机的不同,甚至可能一个图像也无法处理。 使用设备完成此完整示例,或删除此示例的 Camera 控件和图片部分以在 Teams 或 Web 浏览器中运行。

  1. 使用平板电脑布局创建空白画布应用。 有关更多详细信息,请阅读从模板创建应用,然后在空白应用下选择平板电脑布局

  2. 添加 Text input 控件和 Camera 控件,然后按如下所示大致进行排列:

    添加到空白屏幕的文本输入和 Camera 控件。

  3. 添加 Button 控件。

  4. 双击 Button 控件,将按钮文本更改为 Add Item(或修改 Text 属性)。

  5. 将 Button 控件的 OnSelect 属性设置为此公式,来将一个项添加到我们的集合中:

    Collect( MyItems, { Item: TextInput1.Text, Picture: Camera1.Photo } )
    

    添加的设置了文本“Add Item”和 OnSelect 属性的 Button 控件

  6. 添加另一个 Button 控件。

  7. 双击 Button 控件,将按钮文本更改为 Save Data(或修改 Text 属性)。

  8. 将 Button 控件的 OnSelect 属性设置为此公式,以将我们的集合保存到本地设备:

    SaveData( MyItems, "LocalSavedItems" )
    

    添加的设置了文本“Save Data”和 OnSelect 属性的 Button 控件

    测试按钮很吸引人,因为它不会有任何其他影响。 但是,当您在 Web 浏览器中创作时,您只能看到一条错误消息。 请先在设备上保存应用,然后打开,然后再按照接下来的步骤测试此公式:

  9. 添加第三个 Button 控件。

  10. 双击 Button 控件,将按钮文本更改为 Load Data(或修改 Text 属性)。

  11. 将 Button 控件的 OnSelect 属性设置为此公式,以从本地设备加载我们的集合:

    LoadData( MyItems, "LocalSavedItems" )
    

    添加的设置了文本“Load Data”和 OnSelect 属性的 Button 控件

  12. 添加一个 Gallery 控件,该控件具有包含图片和文本区域的垂直布局:

    库种类选择,选择了“垂直”并带有图像和文本区域

  13. 出现提示时,选择 MyItems 集合作为此库的数据源。 这将设置 Gallery 控件的 Items 属性:

    数据源库选择。库模板中的 Image 控件应将其 Image 属性默认为 ThisItem.Picture,Label 控件都应将其 Text 属性默认为 ThisItem.Item。 在以下步骤中添加项后,如果您在库中看不到任何内容,请检查这些公式。

  14. 将控件放在其他控件的右侧:

    库重新定位到屏幕右侧。

  15. 保存您的应用。 如果是第一次保存,则无需发布。 如果不是第一次,请在保存后发布应用。

  16. 在手机或平板电脑等设备上打开您的应用。 SaveDataLoadData 不能在 Studio 或 Web 浏览器中使用。 如果您没有立即看到您的应用,请刷新应用列表,应用显示在设备上可能需要几秒钟。 注销并重新登录您的帐户也可以提供帮助。

    正在运行的未添加项的应用。下载应用后,您可以断开网络连接并离线运行应用。

  17. 输入名称,并为某个项拍照。

  18. 选择添加项按钮。 重复添加项几次来建立您的集合。

    正在运行的添加了三个项的应用。

  19. 选择保存数据按钮。 这会将您集合中的数据保存到本地设备。

  20. 关闭应用。 您在内存中的集合将丢失,包括所有项名称和图片,但它们仍将保留在设备的存储中。

  21. 再次启动应用。 内存中的集合将再次在库中显示为空。

    再次运行的未添加项的应用。

  22. 选择加载数据按钮。 集合将使用您设备上存储的数据重新填充,各个项将重新回到库中。 在此按钮调用 LoadData 函数之前,集合为空;从存储加载数据之前,无需调用 CollectClearCollect

    正在运行的应用,在调用 LoadData 函数后还原了三个项。

  23. 再次选择加载数据按钮。 存储的数据将被追加到集合的末尾,滚动条将出现在图库中。 如果您希望替换而不是追加,请先使用 Clear 函数清除集合,然后再调用 LoadData 函数。

    正在运行的应用,在两次调用 LoadData 函数后还原了六个项。

更多高级脱机示例

有关详细示例,请参阅有关简单脱机功能的文章。