You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerApps相机控件上传SharePoint附件丢失且新建行如何解决

问题根因
  • 新建行问题:你调用Patch函数时传入了第二个参数Defaults(BeckTable),该参数的作用就是指定Patch操作创建一条全新的列表记录,因此不会更新原有行。
  • 图片失效问题:你存储的First(CameraImage).Url是PowerApp运行时的临时内存链接,仅在当前应用会话内有效,应用关闭后内存资源释放,链接自然失效;且你未将图片实体作为SharePoint列表附件存储,仅存了临时路径,自然无法持久访问。
修复方案

前置准备

先确认你的SharePoint列表BeckTable已经开启附件功能,且PowerApp中该数据源的字段配置已经勾选了Attachments字段。

代码修改

  1. 拍照触发代码无需调整,保持原有逻辑即可:
ClearCollect(CameraImage,Camera1.Photo); UpdateContext({PhotoDateTime: Now()})
  1. 上传按钮代码替换,将临时图片作为附件写入指定现有行,不需要新建记录:
    如果你是在浏览界面选中了对应用户的行,可先在浏览画廊控件的OnSelect属性添加逻辑Set(SelectedUser, ThisItem),上传按钮代码修改为:
Patch(
    BeckTable,
    SelectedUser, // 传入要更新的现有行对象,不要用Defaults,就不会生成新行
    {
        Attachments: AddColumns(
            RenameColumns(First(CameraImage), "Value", "ContentBytes"),
            "@odata.type", "",
            "DisplayName", TextInput1.Text & "_" & Text(PhotoDateTime, "yyyy-mm-dd_hhMMss") & ".jpg",
            "Id", ""
        )
    }
)

如果不需要选中行,也可以直接按姓名匹配定位目标行:

Patch(
    BeckTable,
    LookUp(BeckTable, Title = TextInput1.Text), // 按Title字段匹配到对应用户的已有行
    {
        Attachments: AddColumns(
            RenameColumns(First(CameraImage), "Value", "ContentBytes"),
            "@odata.type", "",
            "DisplayName", TextInput1.Text & "_" & Text(PhotoDateTime, "yyyy-mm-dd_hhMMss") & ".jpg",
            "Id", ""
        )
    }
)
  1. 图片展示逻辑修改,直接读取SharePoint行的附件链接,该链接是持久有效的:
First(LookUp(BeckTable, Title = TextInput1.Text).Attachments).AbsoluteUri

注意事项

  • 如果你的列表允许多个附件,可以修改上述展示代码的筛选逻辑,定位到你需要展示的对应附件即可。
  • 确保用户账号对SharePoint列表BeckTable有编辑和添加附件的权限,避免操作被拦截。

内容的提问来源于stack exchange,提问作者shampouya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:30:05