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

Power Automate中使用HTTP操作重新审批SharePoint项为何间歇性失败?

问题

我有一个Power Automate流,触发条件是SharePoint库项被批准。流执行时会更新该项的部分属性,但这些操作会把项的「审批状态」重置为“未提交”。为解决这个问题,我尝试通过编程方式重新审批该项:

我添加了两个「向SharePoint发送HTTP请求」操作:

  1. 创建审批请求
    • URI:_api/SP.Approvals.CreateItemRequest
    • 请求体:
      {
        "creationInfo": {
          "listId": "<List Id>",
          "itemId": "<Item Id>",
          "approvers": "<Service account Id>",
          "title": "<带扩展名的文件名>",
          "details": "自动请求",
          "markDocAsFinal": true
        }
      }
      
  2. 批准审批请求
    • URI:api/SP.Approvals.ApproveItemRequest
    • 请求体:
      {
        "listId": "<List Id>",
        "itemId": "<Item Id>",
        "approvalId": "@{body('Send_an_HTTP_request_to_SharePoint')?['d']['CreateItemRequest']}",
        "comments": "自动批准"
      }
      

但重新审批操作间歇性生效,多数情况下流会失败,错误信息为:

Action 'Send_an_HTTP_request_to_SharePoint_-_Create_request' failed: Creating new approval request is not allowed if item is in Pending or Approved state.

即便在该步骤之前的「获取项属性」操作返回的项审批状态为“未提交”,仍会出现此问题。

补充:即使「获取项属性」显示审批状态为“未提交”,SharePoint有时仍会将该项视为处于“待处理”或“已批准”状态。

相关截图:

  • 库:库
  • 重新审批项的流:流

原因分析

核心问题是SharePoint列表项的审批状态字段与后台审批记录存在异步同步延迟:

  1. 更新项属性时,虽然「获取项属性」返回的Approval Status字段被重置为“未提交”,但SharePoint后台可能仍保留着之前的审批请求记录(比如已完成的审批实例),或者状态同步存在延迟,导致后台判定该项仍处于审批相关状态。
  2. SP.Approvals系列API会直接校验后台的审批记录状态,而非仅依赖列表项的Approval Status字段,所以即使前端字段显示“未提交”,API仍会因为后台存在未清理的审批状态而拒绝创建新请求。

修复方案

方案1:先清理旧审批记录(推荐)

在创建新审批请求前,先清理该项的所有审批记录,确保后台状态完全重置:

  1. 添加「向SharePoint发送HTTP请求」操作,调用接口获取该项的所有审批请求:
    • URI:_api/SP.Approvals.GetItemRequests(listId='<List Id>',itemId='<Item Id>')
    • 请求方法:GET
  2. 遍历返回的审批请求,调用接口取消所有审批记录:
    • URI:_api/SP.Approvals.CancelItemRequest
    • 请求方法:POST
    • 请求体:
      {
        "listId": "<List Id>",
        "itemId": "<Item Id>",
        "approvalId": "@{items('Apply_to_each')?['Id']}",
        "comments": "清理旧审批记录"
      }
      
  3. 添加「延迟」操作(1-2秒),再执行原有的创建审批请求和批准操作。

方案2:避免更新操作触发审批状态重置

如果属性更新不需要触发审批流程,可尝试直接调用列表项更新API,避免修改审批相关字段:

  • 使用_api/web/lists/getbytitle('<List Title>')/items(<Item Id>)的PATCH请求更新属性,请求头添加IF-MATCH: *和X-HTTP-Method: MERGE,确保不修改_ModerationStatus、Approval Status等审批相关系统字段。
  • 注意:部分系统字段即使不主动修改,更新操作也可能触发状态重置,需测试验证。

方案3:添加状态校验重试机制

在创建审批请求步骤添加重试逻辑,应对同步延迟:

  1. 编辑「创建审批请求」操作的设置,开启「重试」,设置重试次数(如3次)、重试间隔(如2秒)。
  2. 或使用「控制-直到」循环:在循环中调用GetItemRequests接口,判断返回的请求列表是否为空,若为空则退出循环执行创建请求操作,否则延迟后重试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 18:24:50