将TFS REST API与存储的查询一起使用时是否会编译?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将TFS REST API与存储的查询一起使用时是否会编译?相关的知识,希望对你有一定的参考价值。

这里提到:Using the TFS REST API to get all work items in an iteration和我已经在https://www.visualstudio.com/en-us/docs/integrate/api/wit/queries#get-a-query-or-folder的VS文档一起工作了

我们尝试根据TFS服务器上存储的查询生成更改日志文本文件。在REST API之前,我们使用的是VS 2012/2013 TFS库,但现在正在转向REST。

现在通过阅读文档,我看到在查询工作项时我应该为最多200个工作项(https://www.visualstudio.com/en-us/docs/integrate/api/wit/wiql#get-work-items)执行此操作

如果我正确理解文档,那么我需要6个http查询来存储返回607个工作项的存储查询。

  1. 按名称获取存储查询 - > http://server/Project/_apis/wit/queries/Shared%20Queries/Change%20Log?api-version=1.0&$expand=all,返回查询的WIQL URL
  2. 查询WIQL - >返回607个ID
  3. 为前200个工作项创建工作项查询
  4. 接下来的200
  5. 接下来的200
  6. 为接下来的7

然后组装这些工作项并根据查询号提供的显示列配置对它们进行格式化。 1。

通过测试200个工作项限制,我发现内部部署安装实际上允许更多的工作项。目前,最大工作项数量由GET请求长度2096定义(在TFS 2017上测试)。

这是如何执行存储查询的确认方法吗?

答案

是的,这是正确的方法。

发送REST API的简单C#代码:

String MyURI = "[REST API URL]";
            WebRequest WReq = WebRequest.Create(MyURI);
            WReq.Credentials =
                new NetworkCredential("[user name]", "[password]", "[domain]");

            WebResponse response = WReq.GetResponse();
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Get the stream containing content returned by the server.
            Stream dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
            // Display the content.
            Console.WriteLine(responseFromServer);

另一方面,你可以run the query with WIQL string

关于获取存储查询的WIQL字符串,可以使用TFS .net客户端API。

NetworkCredential cred = new NetworkCredential("[user name]", "[password]", "[domain]");
            TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri("[collection URL"), cred);
            tpc.EnsureAuthenticated();
            WorkItemStore wis = tpc.GetService(typeof(WorkItemStore)) as WorkItemStore;
 QueryHierarchy queryRoot = wis.Projects["[team project]"].QueryHierarchy;
            QueryFolder queryFolder = queryRoot["Shared Queries"] as QueryFolder;
            QueryDefinition qd = queryFolder["PBIS"] as QueryDefinition;
            string tt = qd.QueryText;

关于使用Extended Client package的调用查询REST API,您可以参考这个简单的代码:

var u = new Uri("[collection url]");
VssCredentials c = new VssCredentials(new Microsoft.VisualStudio.Services.Common.WindowsCredential(new NetworkCredential("v-stache", "Hua543@Hua543", "fareast")));
            var connection = new VssConnection(u, c);
            var workitemClient = connection.GetClient<WorkItemTrackingHttpClient>();
 var result = workitemClient.QueryByWiqlAsync(new Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.Wiql() { Query = "select[System.Id] from WorkItems where [System.TeamProject] = 'ScrumStarain2' and [System.WorkItemType] = 'Product Backlog Item' and [System.State] <> ''" }, "ScrumStarain2").Result;

以上是关于将TFS REST API与存储的查询一起使用时是否会编译?的主要内容,如果未能解决你的问题,请参考以下文章

通过 REST API 将测试结果发布到 TFS 2018 测试用例

通过 TFS REST API 将工作项添加到板列

使用 TFS 2015 REST API 进行队列构建的 409 冲突响应

为啥用于获取 TFVC 变更集的 TFS Rest API 仅返回 256 个项目?

如果基于 cookie 的身份验证与 REST API 一起使用,那么相同的 API 如何与移动应用程序一起使用?

将 Paypal Rest API 与 Node 一起使用