以编程方式将工作项关联到拉取请求
Associate Work Items to a Pull Request Programmatically
我可以获得 (https://www.visualstudio.com/en-us/docs/integrate/api/git/pull-requests#get-a-pull-request) 个拉取请求、管理审阅者并完成它。该分支有一个需要工作项的策略,但它失败了,因为拉取请求不会自动添加与底层提交关联的工作项。
针对带有错误参数的拉取请求在 PATCH 上查找
"You can only update reviewers, descriptions, titles, merge status,
and status"
我可以使用拉取请求 url + /workitems 获取工作项列表,但是 POST,集合不支持 PUT 和 PATCH。
我没有看到将工作项与拉取请求相关联的方法?
不支持通过 REST API 或客户端 SDK API 将工作项关联到拉取请求。
解决方法是您可以 link 将请求拉入工作项。 https://www.visualstudio.com/en-us/docs/integrate/api/wit/work-items#add-a-link(拉取请求 URL 可以在您 link 另一个工作项之后的响应中找到,因此您可以 link 一个工作项手动拉取请求,然后 link 另一个工作项通过 REST API 并检查响应)
您可以像 starain 提到的那样通过更新工作项链接将工作项关联到拉取请求。
不确定你使用的是哪种代码语言,我添加了一个C#代码示例供你参考:
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.SourceControl.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.VisualStudio.Services.WebApi.Patch.Json;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
namespace PRWIl
{
class Program
{
static void Main(string[] args)
{
string tfsurl = "https://xxx.visualstudio.com/";
TfsTeamProjectCollection ttpc = new TfsTeamProjectCollection(new Uri(tfsurl));
GitHttpClient ghc = ttpc.GetClient<GitHttpClient>();
string project = "ProjectName";
string repoid = "repositoryid";
int pullrequestid = 1;
int workitemid = 1;
GitPullRequest gpr = ghc.GetPullRequestAsync(project,repoid,pullrequestid).Result;
WorkItemTrackingHttpClient withc = ttpc.GetClient<WorkItemTrackingHttpClient>();
JsonPatchDocument json = new JsonPatchDocument();
string pullrequesturl = "vstfs:///Git/PullRequestId/" + gpr.Repository.ProjectReference.Id + "%2F" + gpr.Repository.Id + "%2F" + gpr.PullRequestId;
json.Add(new JsonPatchOperation
{
Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add,
Path = "/relations/-",
Value = new WorkItemRelation() {Rel = "ArtifactLink", Url = pullrequesturl }
});
WorkItem result = withc.UpdateWorkItemAsync(json,workitemid).Result;
}
}
}
现在可以实现了。这是示例代码片段:
List<GitPullRequest> pullRequests = gitClient.GetPullRequestsAsync(
repoId, GetPullRequestSearchCriteria(devBranch)).Result.Where
p => p.ClosedDate > masterPullRequest.ClosedDate).ToList();
List<ResourceRef> resourceRef = new List<ResourceRef>();
foreach (GitPullRequest pullRequest in pullRequests)
{
resourceRef.AddRange(gitClient.GetPullRequestAsync(
repoId, pullRequest.PullRequestId, includeWorkItemRefs: true).Result.WorkItemRefs);
}
GitPullRequest gitPullRequest = new GitPullRequest()
{
Title = "Sprint 9",
TargetRefName = masterBranch,
SourceRefName = devBranch,
WorkItemRefs = resourceRef.ToArray()
};
GitPullRequest g = gitClient.CreatePullRequestAsync(gitPullRequest, repoId).Result;
我可以获得 (https://www.visualstudio.com/en-us/docs/integrate/api/git/pull-requests#get-a-pull-request) 个拉取请求、管理审阅者并完成它。该分支有一个需要工作项的策略,但它失败了,因为拉取请求不会自动添加与底层提交关联的工作项。
针对带有错误参数的拉取请求在 PATCH 上查找
"You can only update reviewers, descriptions, titles, merge status, and status"
我可以使用拉取请求 url + /workitems 获取工作项列表,但是 POST,集合不支持 PUT 和 PATCH。
我没有看到将工作项与拉取请求相关联的方法?
不支持通过 REST API 或客户端 SDK API 将工作项关联到拉取请求。
解决方法是您可以 link 将请求拉入工作项。 https://www.visualstudio.com/en-us/docs/integrate/api/wit/work-items#add-a-link(拉取请求 URL 可以在您 link 另一个工作项之后的响应中找到,因此您可以 link 一个工作项手动拉取请求,然后 link 另一个工作项通过 REST API 并检查响应)
您可以像 starain 提到的那样通过更新工作项链接将工作项关联到拉取请求。
不确定你使用的是哪种代码语言,我添加了一个C#代码示例供你参考:
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.SourceControl.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.VisualStudio.Services.WebApi.Patch.Json;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
namespace PRWIl
{
class Program
{
static void Main(string[] args)
{
string tfsurl = "https://xxx.visualstudio.com/";
TfsTeamProjectCollection ttpc = new TfsTeamProjectCollection(new Uri(tfsurl));
GitHttpClient ghc = ttpc.GetClient<GitHttpClient>();
string project = "ProjectName";
string repoid = "repositoryid";
int pullrequestid = 1;
int workitemid = 1;
GitPullRequest gpr = ghc.GetPullRequestAsync(project,repoid,pullrequestid).Result;
WorkItemTrackingHttpClient withc = ttpc.GetClient<WorkItemTrackingHttpClient>();
JsonPatchDocument json = new JsonPatchDocument();
string pullrequesturl = "vstfs:///Git/PullRequestId/" + gpr.Repository.ProjectReference.Id + "%2F" + gpr.Repository.Id + "%2F" + gpr.PullRequestId;
json.Add(new JsonPatchOperation
{
Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add,
Path = "/relations/-",
Value = new WorkItemRelation() {Rel = "ArtifactLink", Url = pullrequesturl }
});
WorkItem result = withc.UpdateWorkItemAsync(json,workitemid).Result;
}
}
}
现在可以实现了。这是示例代码片段:
List<GitPullRequest> pullRequests = gitClient.GetPullRequestsAsync(
repoId, GetPullRequestSearchCriteria(devBranch)).Result.Where
p => p.ClosedDate > masterPullRequest.ClosedDate).ToList();
List<ResourceRef> resourceRef = new List<ResourceRef>();
foreach (GitPullRequest pullRequest in pullRequests)
{
resourceRef.AddRange(gitClient.GetPullRequestAsync(
repoId, pullRequest.PullRequestId, includeWorkItemRefs: true).Result.WorkItemRefs);
}
GitPullRequest gitPullRequest = new GitPullRequest()
{
Title = "Sprint 9",
TargetRefName = masterBranch,
SourceRefName = devBranch,
WorkItemRefs = resourceRef.ToArray()
};
GitPullRequest g = gitClient.CreatePullRequestAsync(gitPullRequest, repoId).Result;