2018年2月15日,星期四

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

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

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

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

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

    离线了解交易

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

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

      A sample 经验(from my POC app)

      这里’是我最近制作的一个应用程序中离线支持的视频,是从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/

        2018年2月6日,星期二

        PowerApps–黄金三镖客 (early 2018)

        I’最近与PowerApps一起为客户做了很多工作,’一段有趣的时光。毫无疑问我’我仍然不是世界’力所能及的,是功能最强大的PowerApps实现者,但我觉得我’经历了通常伴随着新技术的通常拒绝/愤怒/接受阶段;)我的一些工作集中于为一家大型航空公司进行概念验证应用–具体来说,就是构建一个让飞行员在脱机时可以在iPad上使用的应用程序。该项目旨在将与预订假期相关的某些表格数字化,这是机组人员调度的重要组成部分。我们有效地将3种形式整合到一个应用程序中:

        SNAGHTML24ecc4ef

        我最近在Content and Code上向我的同事做了一个介绍,但是我’我们还对某些信息进行了通用化,以便可以更广泛地共享它(Contoso Airlines!)。下面共享的内容集是一些典型的经验教训和技巧的结合,但是我对PowerApps是一项技术的想法也很复杂,“黄金三镖客”.

        潜在的变革,但具有学习曲线。

        我的结论是’是一项伟大的技术,尽管它’通常针对表单类型的应用程序,它对于相对简单的移动应用程序确实很有帮助。组织只需处理让用户安装PowerApps应用程序(通过App Store,通过Intune或Airwatch等MDM解决方案,或其他方法)进行安装的问题,然后 所有 该组织提供的PowerApps表单和应用程序将显示在此处。与在iOS和Android上开发单个本机应用程序相比,这*远*容易和便宜,在构建完成后,每个本机应用程序都需要分发给用户。相反, it’使您的Office 365用户在其移动设备上使用简单的PowerApp可行 在几个小时内. 考虑一下吧!当然,PowerApps不会’不能给您高端本机应用程序可以拥有的丰富功能,但进入的障碍是 许多 降低。

        但是,’不一定总是最简单的应用程序 实施者 跟...共事。通常,事情可以进入我所辖的领域’d辩称大多数用电者会为之苦恼。以我的情况为例,必须放弃默认的SharePoint集成/数据处理,并设计自己的公式,该公式使用Patch()函数将项目添加到SharePoint列表中(这是必需的,因为我的表单使用了 屏幕)。如果您在基础列表中有很多表单字段和列,即使对于习惯了这种事情的开发人员,这都是愚蠢的工作。

        Customizing SharePoint lists vs. creating a 独立的 PowerApp

        实施者必须在两种方法之间进行选择–自定义SharePoint列表的形式,或创建一个“standalone”PowerApp(可能与同一列表交谈)。从概念上讲,它们是完全不同的,并且具有不同的行为。该决定在SharePoint列表的PowerApps菜单中表达:

        SNAGHTML24dcbcbf

        这里的关键是自定义SharePoint表单可以 show up in the PowerAppsapp:

        SNAGHTML26996c8

        如果用户需要在其移动设备上使用自定义SharePoint列表,则可以使用SharePoint移动应用程序提供一个 合理 经验–实际上,当您转到列表时,SharePoint应用程序应该切换到PowerApps应用程序,然后应该加载自定义的PowerApps表单。但是,目前看来这有点麻烦– most often, I actually just get a web rendered view of the PowerApp, and here it seems that the 经验isn’与真正的PowerApp一样针对移动设备进行了优化–经常需要捏/变焦。

        I’我敢肯定,事情最终会在这里得到解决,但我仍然认为我 ’d喜欢其他型号–如果某些标记的自定义SharePoint列表可以标记为显示在PowerApps应用程序中(可能由租户管理员)怎么办?至少对我来说,这似乎是一个更好的安排。 

        其他有趣的方面

        演示文稿包含有关我其他事情的一些高级详细信息’我曾与之合作可能很有趣:

        • 安装 本地数据网关 连接到本地数据(在我的情况下为SQL Server)
        • 实施中 离线支持 在PowerApp中(重新连接后使用Timer控件提交数据)
        • 一些实施细节 使用图库控件进行导航,以及我发现的150多个功能中最有用的10个PowerApps功能

        My “good, bad and ugly” summary:

        如果你’对演示文稿不那么感兴趣,并且想直接跳到摘要,这是我的结论幻灯片:

         图片

         图片

         图片

        顺便说一句,如果你’想知道我的意思“web 经验(upscaled phone/tablet view)”,让我尝试解释。当然,表单/应用在移动设备上看起来不错,并且针对该表单因素进行了优化–所有的控制都非常“thumb-able”,甚至可以在文本框中输入文字(在此处显示为平板电脑/ iPad尺寸):

        4-BA PowerApp-陪产假屏幕

        但是,在PC上访问PowerApp时,该设备没有响应式设计或优化–使用手机/平板电脑时使用的渲染效果完全相同,在我看来这很奇怪:

        PowerApps- PC 800 - msg

        不,我不’不知道Office 365套件栏显示“Dynamics 365”两者之一(特别是因为此租户甚至没有使用Dynamics)。但是我’d如果我能比陌生人有更好的经历,那将是幸福的生活“PC浏览器中的手机屏幕”我们目前得到的交易。 Nintex Forms在这方面做得更好,所以我’我不确定PowerApps为什么要走这条路。再说一次’希望对此有所改进。

        这就是我所说的一些头条新闻。我很可能会发布其他一些PowerApps文章,其中将详细介绍有关离线/使用本地数据网关等实施的详细信息,但是本质上我只是想共享幻灯片,以防万一。’s useful to anyone:

        滑轨: