Power Apps 自定义上传 UI Control SharePoint Online

首先,感谢Shane Young的YouTube视频来讲解了怎么hack PowerApps获取了上传附件的方法https://www.youtube.com/watch?v=Pa-pYEkLH-U

上传附件在PowerApps中只有form可以实现. 但是在很多的使用场景中, form是不被采纳的情况下, 怎样上传文件到SPO中呢?

首先,需要选中这个attachments中的UI 控件并且复制. 很神奇的就在这里, 这个UI control竟然是可以被复制的???

然后把复制后的控件粘贴到想要的screen中, 并且把关联的data source 删除.

在处理过error之后, 我们就获得了一个野生全新的attachment UI control!

首先我们先要理解一下这个hack方法的精妙之处.

我们可以看到在右边不管从image 还是 attach的value中获取的值都是appres这串字符.

我们用了两个按钮, 用json格式获取两个文件中的数值, 我们可以看到从from attach中还是原本的appres, 但是从img中获取的就是我们所需要的file content值!!!

XXX用button下面的公式代替

我们从第三张截图里可以看到,的确是可以识别上传文件是Excel. 这样就方便我们上传这个文件到SharePoint中!

 

问题来了, 我们只需要content的base64部分, 其他部分是不需要的.

这里对公式不做解释, 不懂得去翻MSFT Docs https://docs.microsoft.com/en-us/powerapps/maker/canvas-apps/functions/function-left-mid-right

但是这步这个base64的数据我们还不能使用, 因为结尾还有json的"在最后.所以这里我们也要去除掉.

Set(varBase46Only, Mid(varFromAttachControl, Find(",",varFromAttachControl)+1, Len(varFromAttachControl) - Find(",",varFromAttachControl) -1 ));

这样写的好处是没有任何hard-code, 完全适用任何文件

到这里,我们就完成了一半的工作量, 获取到需要上传的文件, 下面我们需要把文件上传到SPO中. 这里我们就要借助power automate这个PowerApps的好兄弟了

首先,我们需要创建一个flow, 并且选择PowerApps作为触发.

然后我们找到create file SPO connector并且file name 和 file content都是从PowerApps获取.

这里需要注意了, 因为SPO还是在使用binary, 所以我们必须要把content从base64 转换为 binary.

  

当然最后我们可以把file link 返回到PowerApps中

保存之后我们的flow就做好了, 现在回到PowerApps里, 并且把刚做好的flow加到PowerApps中

这时候如果我们使用这个flow, 可以看到已经有Intelligense. 我们按照需求传入值.

Set(varFileLink, UploadtoSPO.Run(Last(DataCardValue11_1.Attachments).Name, varBase46Only).spofilelink);

当我们点击这个按钮触发之后, 可以看到SPO中已经上传了此文件, 并且可以看到file link也回传了文件上传link

写在最后, 这边只测试过10MB max的文件, 没有尝试过大于10MB的文件上传.

原文地址:https://www.cnblogs.com/TheMiao/p/13322636.html