2018年2月15日,星期四

PowerApps–在您的应用中实施离线支持

在上一篇文章中,我谈到了我对 PowerApps的好,坏和丑陋 目前(2018年初),但今天我想重点关注特定情况–确保您的应用可以离线使用。并非所有应用程序都需要此功能,但是对于某些情况,这至关重要。不幸的是,构建PowerApp时没有魔术按钮可以离线支持–实现者必须自己构建它,这会使一个简单的应用复杂得多。

当我们谈论离线状态下运行的应用程序时,我’d普遍期望是:

  • 该应用程序是可用的(例如,从某处提取数据的任何下拉菜单继续有效)
  • 如果应用程序专注于将数据写入某个地方(例如在线存储在某处的SharePoint列表/数据库/ Excel文件等),则应该可以在离线时提交记录–即使需要恢复连接才能将其实际保存到后端
    • 我认为许多PowerApp都属于此类(例如记录新事件/ IT请求/假日请求/费用索赔等),所以我’我今天要专注于这方面
  • 如果应用读取了现有数据(例如,显示现有事件/请求),则应该可以离线访问至少部分此类数据(例如,最近的20条记录)

The PowerAppsblog has some good info in Build offline apps with new PowerAppscapabilities但是我发现自己在做某些事情上有所不同–所以认为值得在这里讨论。

    离线了解交易

      这里要认识的一件大事是*一旦恢复连接以提交数据,该应用程序必须打开一段时间。它’s not like the “fire and forget”在手机上(以及一个或两个其他本机或“tier 1”应用程序),即使您的手机放在口袋里,您也可以点击发送并信任要发送的数据。相反,您的用户需要打开PowerApp一段时间。–具体取决于您如何离线实施。以我为例,我使用了一个计时器,该计时器每5秒检查一次设备是否连接到Internet,然后将记录保存到SharePoint Online(如果可以)。–这意味着用户没有’不必在应用中执行任何操作(例如,按一个按钮)。当然,由于这些事情是在后台发生的,’向用户传达状态非常重要,因此’将他们的记录保存到后端时清除。

      顺便说一句,这笔交易是’特定于PowerApps。一世’此处没有专家,但似乎几乎所有第三方应用程序(包括您可能在此类用例中使用的其他应用程序,例如Nintex Mobile)都需要此功能,因为后台处理应用程序在不使用时可以执行限制。即使您在设备上进行了正确的设置(例如“后台程序刷新”在iOS上启用),这是’这些应用似乎足以推送数据。因此,一旦重新连接应用程序,准备指导您的用户暂时打开应用程序–就像我在下面显示的那样,您可以考虑在用户体验中做到这一点。

      体验示例(来自我的POC应用程序)

      这里 ’是我最近制作的一个应用程序中离线支持的视频,是从iPhone录制的–我在上一篇文章中提到的假期/休假请求应用程序。这模拟了用户在没有连接的情况下提交请假请求(启用了飞行模式),然后在连接恢复后(实际上禁用了飞行模式)将记录实际保存到SharePoint Online:

      PowerApps中离线的食谱

      在本节中’将详细介绍使脱机行为起作用的各个方面,并在适当的地方提供一些入门级PowerApps公式(突出显示重要功能)。请记住,我的案例仅关注于将新项目添加到SharePoint列表,因此’正在进行此工作的PATCH函数。总体而言,我使用的配方是:

      • 应用程序中的两个信息屏幕:
        • 等待屏幕
        • 确认画面
      • 提交按钮后面的公式:
        • 如果已连接,则将PATCH记录到SharePoint
        • 如果未连接,请CLEARCOLLECT将记录保存到本地
        • RESET表格(清除现有值)
        • NAVIGATE to 待定 screen

          如果(连接。 补丁(“我的SharePoint列表”,默认值(“我的SharePoint列表”),{Title:Concatenate("Leave Request - ", User().Email, " - ", Text(Now(), "[$ -en-GB] dd / mm / yyyy hh:mm:ss")),SomeField1:SomeControl1.Value,SomeTextField1.SomeTextControl1.Text,SomeChoiceField:{    '@odata.type':"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference",值:SomeDropDownListControl.Selected.Value,ID:1});
          重置表格(MyForm);
          导航(ConfirmationScreen,ScreenTransition.Fade),
          清除收集(LocalRecord,{Title:Concatenate("Leave Request - ", User().Email, " - ", Text(Now(), "[$ -en-GB] dd / mm / yyyy hh:mm:ss")),SomeField1:SomeControl1.Value,SomeTextField1.SomeTextControl1.Text,SomeChoiceField:{    '@odata.type':"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference",值:SomeDropDownListControl.Selected.Value,ID:1});
          重置表格(MyForm);
          导航(PendingScreen,ScreenTransition.Fade)
      • 计时器控制的公式(两者都实现“start” and “pending” screens –因此用户可以在任何逻辑位置打开应用,然后将提交记录)。在OnEnd事件中:
        • 如果已连接并有记录“LocalRecord”,使用FORALL遍历每条记录,然后将其修补到SharePoint
        • 导航到确认屏幕
        • 明确“LocalRecord”

          如果(连接。对全部(LocalRecord, 补丁(“我的SharePoint列表”,默认值(“我的SharePoint列表”),{Title:Concatenate("Leave Request - ", User().Email, " - ", Text(Now(), "[$ -en-GB] dd / mm / yyyy hh:mm:ss")),SomeField1:SomeControl1.Value,SomeTextField1.SomeTextControl1.Text,SomeChoiceField:{    '@odata.type':"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference",值:SomeDropDownListControl.Selected.Value,ID:1}});
          导航(ConfirmationScreen,ScreenTransition.Fade));
          明确(LocalRecord))

      • A “status bar”在应用程序中指示设备是否已连接(提醒用户)

      警告–这些公式摘录是我真实公式的编辑/简化版本,也许右括号是’完全正确。如果尝试将它们用于公式,请当心– really I’我只是想传达概念!

        离线处理数据源中的读取(例如下拉菜单)

        要注意的一件事是,如果您的SharePoint列表具有选择或查找字段–您可能会在下拉列表中显示这些选项,或者在您的应用中显示单选按钮。自2017年11月起, 您现在可以在此类字段上进行多选,但不幸的是,如果用户恰巧在离线模式下首次使用您的应用程序,则不会填充下拉列表(它将显示“Find items”,但是当用户单击时没有列表出现。用户可以 类型 一个选项中,但是由于他们没有从有效选项列表中进行选择,因此通常会出现严重错误,并且不会将该项目添加到SharePoint中。

        还要考虑到您最有可能不使用分类法/托管元数据字段,因为它们仍然是只读的(截至2018年2月)。

        因此,您需要解决此问题。一种选择,尤其是如果您’重新使用PATCH命令或类似方法来更新SharePoint,是将您的控件绑定到一些可以脱机访问的静态数据。这有点la脚,因为你’re essentially 复制 这些项目作为您应用中的硬编码数据–您将失去选择/查找字段的好处,即该表单根据SharePoint中定义的内容动态获取正确的选项。您可以使用公式来做些聪明的事情,当应用程序有连接时,该公式可以刷新集合,但是如果PowerApps基础结构以更好的方式处理了它,那就太好了。或许在将来 :)

        概要

        PowerApps可以在离线状态下很好地工作,但是’这完全取决于实施者。 PowerApps框架提供了以下功能:检测设备当前是否已建立连接,计时器控件(以便可以自动执行操作)以及用于在数据源中添加/更新数据的各种功能(例如PATCH,UPDATE等)。 。这些是在您的应用中实施离线支持时要使用的要素– there’可以完成工作,但是您可以控制体验,并确保在您的背景下有意义。

        进一步阅读- //powerapps.microsoft.com/en-us/blog/build-offline-apps-with-new-powerapps-capabilities/

        没意见: