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

如何通过Azure DevOps REST API设置工作项附件关联日期?

Azure DevOps工作项迁移:评论与附件关联的日期冲突问题及解决方案

修改System.ChangedDate是否可行?

不可行。Azure DevOps的System.ChangedDate是系统管控的只读字段,用于维护工作项修订的时间顺序,通过REST API提交的修改该字段的PATCH操作会被系统自动忽略,这是平台的设计限制,无法绕过。

可行的替代方案

针对你遇到的“评论日期需为过去值,但附件ID需提前获取”的矛盾,推荐以下两种方案:

方案1:调整操作顺序(优先添加带附件URL的历史评论)

核心思路是让修订版本的时间顺序符合递增要求:

  • 先上传附件,获取附件的唯一ID和访问URL(附件上传后立即存在于Azure DevOps存储中,无需关联工作项即可通过URL访问)
  • 使用添加讨论评论的API,设置createdDate为原评论的历史日期,同时在评论内容中插入附件的URL(格式示例:![文档截图](https://dev.azure.com/xxx/xxx/_apis/wit/attachments/{attachmentId}?fileName=xxx.png))
  • 最后执行附件关联操作,该操作生成的修订日期为当前时间,由于晚于评论的历史日期,不会触发“Dates must be increasing with each revision”报错

这种方案既能保留评论的原始日期,又能在评论中正确关联附件链接,同时符合Azure DevOps的修订时间规则。

方案2:将评论与附件关联合并为单个修订(仅适用于无需严格保留评论历史日期的场景)

如果对评论的历史日期要求不高,可以将两个操作合并到同一个PATCH请求中:

  • 上传附件获取ID后,在同一个工作项更新请求中同时执行两个操作:
    1. 关联附件到工作项(op: add, path: /relations/-, value: {"rel": "AttachedFile", "url": "附件URL", "attributes": {"name": "附件名"}})
    2. 添加评论内容(op: add, path: /fields/System.History, value: "带附件链接的评论内容")
  • 该请求会生成一个单一修订,日期为当前操作时间,无需处理日期冲突,但无法保留评论的原始历史日期

关于{"op":"test","path":"/rev","value":3}的作用

这是REST API中的乐观锁控制操作,用于避免并发冲突:

  • test操作会检查当前工作项的修订版本号是否等于指定的value(此处为3)
  • 如果工作项在你发起请求前已被其他操作修改,修订号会变化,此时整个PATCH请求会返回409 Conflict错误,防止你的更新覆盖他人的修改
  • 这是保证工作项更新原子性的常用手段,确保你操作的是预期的工作项版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:20:23