【问题标题】:Visual Studio REST API Iteration and Area ID'sVisual Studio REST API 迭代和区域 ID
【发布时间】:2015-06-15 12:09:02
【问题描述】:

我正在使用 VSO REST API,并且对如何分配迭代和区域 ID 有疑问。具体来说,为什么当我将工作项分配给根Iteration或Area时,当我查询分类节点时没有返回为WIT返回的ID?

例如,假设我在查询 /DefaultCollection/my project/_apis/wit/classificationnodes?$depth=2 时有这个层次结构

  • 我的项目:id=1234
    • 区域 1:id=5678
      • 区域 2:id=9012

然后我使用 /DefaultCollection/_apis/wit/workItems/1?$expand=all 查询工作项

如果工作项位于区域 1 或区域 2,则 System.AreaId 字段与预期相同(分别为 5678 和 9012)。但是,如果我将工作项分配给我的项目,则 System.AreaID 是我查询所有分类节点时未包含的某个值。 ID 之间似乎存在某种关系,因为它们是串行的(例如,分类节点查询返回的 ID 是区域的 1232 和迭代的 1233),但我似乎找不到查询的方法获取工作项查询返回的实际 ID。

事实上,当我查询所有分类节点时,不仅为工作项返回的 ID 不存在,如果我将工作项分配给根迭代和区域,则为两个字段返回的 ID 是相同的值不包括在分类节点查询中。

我需要的是一种查看工作项并找出它所属的区域和迭代的方法。我可能可以对返回的路径字段字符串做一些事情,但这似乎容易出错,因为用户可以更改它们。

****编辑**** 以上似乎是 REST API 中的一个错误,但对于遇到这篇文章的任何人来说,有一种方法可以通过路径字符串获取可用的迭代 ID。像这样构建您的 REST 调用:

/DefaultCollection/[项目名称]/_apis/wit/classificationnodes/iterations/Release 1/Sprint 1(等等)

【问题讨论】:

  • 为什么需要区域或迭代 ID?价值用处不大……
  • 我正在编写一个工具,它需要从工作项服务挂钩事件中反向查询 VSO。在回拨期间,我需要能够将工作项关联到一个区域,并将迭代关联到我的数据库中的映射项。使用用户可编辑的字符串(路径)作为识别数据库中的一行(映射区域或迭代)的方法似乎是不明智的。
  • @LaneGoolsby 需要注意的是,默认的迭代路径,当没有设置(这里设置的是项目名称而不是/Release x/ Sprint Y)时访问会报错。跨度>

标签: tfs azure-devops


【解决方案1】:

我从来没有用 ID 做过这个。我只使用路径。在分类服务中,您可以很容易地通过路径获取节点。

例如,使用 REST API - 您可以访问此 url 以获取有关特定迭代的数据:

/DefaultCollection/[Project Name]/_apis/wit/classificationnodes/iterations/[Release X]/[Sprint Y]

请注意,尝试访问默认迭代路径(项目名称而不是特定迭代)将返回错误:

/DefaultCollection/[Project Name]/_apis/wit/classificationnodes/iterations/[Project Name]

会给:

{"$id":"1","innerException":null,"message":"VS402485: The node name is not recognized: [Project Name]","typeName":"Microsoft.TeamFoundation.WorkItemTracking.Server.Metadata.WorkItemTrackingTreeNodeNotFoundException, Microsoft.TeamFoundation.WorkItemTracking.Server","typeKey":"WorkItemTrackingTreeNodeNotFoundException","errorCode":0,"eventId":3200}

因此,如果您进行批处理工作,则必须在查询 api 之前对其进行过滤。

【讨论】:

  • 我正在编写一个工具,它需要从工作项服务挂钩事件中反向查询 VSO。在回拨期间,我需要能够将工作项与区域相关联,并将迭代与数据库中的映射项相关联。使用用户可编辑的字符串(路径)作为识别数据库中的一行(映射区域或迭代)的方法似乎是不明智的。
  • 在一个区域从一个路径移动到另一个路径真的是同一个节点吗?
  • 一旦我弄清楚了 REST API 想要查询结构的方式,您关于通过路径获取节点的注释就起作用了。谢谢。
  • 对于根项目,删除 /{path} /DefaultCollection/[Project Name]/_apis/wit/classificationnodes/iterations?api-version=xx /DefaultCollection/[Project Name]/_apis/ wit/classificationnodes/areas?api-version=xx
【解决方案2】:

标识区域的方法有三种(我发布的所有内容同样适用于迭代)。路径(字符串)、ID(整数)和 Guid。它们中的每一个都以不同的方式使用,并具有不同的分支。

例如重命名一个区域,不会改变它的身份,因此不会更新工作项(工作项中返回的路径是动态的)。

也可以删除并重新创建相同的路径,但它会有不同的 ID。

GUID 主要用于 Excel 报告(例如 SharePoint 门户的父级)

根据您希望事物的反应方式确定要使用的适当元素。

我没有看到你提到的 ID 有任何问题,如果你能创建一个简单的复制品,我很乐意看看。

david(dot)corbin(at)dynconcepts(dot)com

【讨论】:

  • 我找到了一种通过查询 REST API 并跟踪 REST 调用路径来获取迭代 ID 的方法。这种方法确实给出了预期的 ID。但是,我最初遇到的问题看起来像是一个错误。复制非常简单。创建一个工作项并将其分配给根迭代(通常以项目命名)。然后使用 $expand=all 查询工作项,System.IterationId 的字段值有一个数值,我无法将其与实际迭代关联起来。
猜你喜欢
  • 2015-08-16
  • 2013-05-12
  • 2017-08-08
  • 1970-01-01
  • 2021-03-07
  • 2011-02-24
  • 1970-01-01
  • 2018-05-28
  • 2011-09-25
相关资源
最近更新 更多