如何使用C# VS2019在TFS 2019中更新查询?

问题描述 投票:0回答:1

https:/blog.jongallant.com201107修改-tfs-query-with-c。

我在博客上找到了建议使用StoredQuery的博客,现在看来已经过时了,我不能使用project.StoredQueries和Update()方法来处理StoredQuery。

所以,如果我想更新tfs上现有的查询文本以满足一些特殊条件,如何管理?谢谢,谢谢

c# tfs
1个回答
0
投票

这里是 官方样本链接Github/Microsoft.

        [ClientSampleMethod]
        public QueryHierarchyItem UpdateQuery()
        {
            Guid projectId = ClientSampleHelpers.FindAnyProject(this.Context).Id;
            Guid queryId = this.Context.GetValue<Guid>("$sampleQueryId");

            QueryHierarchyItem queryUpdate = new QueryHierarchyItem()
            {               
                Wiql = "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Bug' AND [System.State] = 'Active' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc"
            };

            VssConnection connection = Context.Connection;
            WorkItemTrackingHttpClient workItemTrackingClient = connection.GetClient<WorkItemTrackingHttpClient>();

            try
            {
                QueryHierarchyItem query = workItemTrackingClient.UpdateQueryAsync(queryUpdate, projectId, queryId.ToString()).Result;

                Console.WriteLine("Query updated successfully");
                Console.WriteLine("Id:         {0}", query.Id);
                Console.WriteLine("Name:       {0}", query.Name);
                Console.WriteLine("Path:       {0}", query.Path);

                return query;
            }
            catch (AggregateException ex)
            {
                Console.WriteLine("Error updating query: " + ex.InnerException.Message);
                return null;
            }                
        }

我认为 UpdateQueryAsync 方法从 WorkItemTrackingHttpClient 类是你要找的。

更新1:

再找一个好例子 ashamraiTFRestApi. 由于你只需要更新查询,你可以尝试这样的代码。

using Microsoft.TeamFoundation.Build.WebApi;
using Microsoft.TeamFoundation.Core.WebApi;
using Microsoft.TeamFoundation.SourceControl.WebApi;
using Microsoft.TeamFoundation.TestManagement.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.WebApi;
using System;
using System.Net;

namespace UpdateQuery
{
    class Program
    {
        static readonly string TFUrl = "http://xxx:8080/tfs/xxx/"; // for devops azure 
        static readonly string UserAccount = "xxx";
        static readonly string UserPassword = "xxx";
        static readonly string UserPAT = "xxx";

        static WorkItemTrackingHttpClient WitClient;
        static BuildHttpClient BuildClient;
        static ProjectHttpClient ProjectClient;
        static GitHttpClient GitClient;
        static TfvcHttpClient TfvsClient;
        static TestManagementHttpClient TestManagementClient;

        static void Main(string[] args)
        {
            ConnectWithDefaultCreds(TFUrl);
            string teamProject = "YourProjectName";
            string newQuery = @"SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = @project" +
                " and [System.WorkItemType] = 'Task'";
            EditQuery(teamProject,"My Queries/TestQuery", newQuery);
        }


        /// <summary>
        /// Update Existing Query
        /// </summary>
        static void EditQuery(string project, string queryPath, string newWiqlStr)
        {
            QueryHierarchyItem query = WitClient.GetQueryAsync(project, queryPath).Result;
            query.Wiql = newWiqlStr;
            query = WitClient.UpdateQueryAsync(query, project, queryPath).Result;
        }


        #region create new connections
        static void InitClients(VssConnection Connection)
        {
            WitClient = Connection.GetClient<WorkItemTrackingHttpClient>();
            BuildClient = Connection.GetClient<BuildHttpClient>();
            ProjectClient = Connection.GetClient<ProjectHttpClient>();
            GitClient = Connection.GetClient<GitHttpClient>();
            TfvsClient = Connection.GetClient<TfvcHttpClient>();
            TestManagementClient = Connection.GetClient<TestManagementHttpClient>();
        }

        static void ConnectWithDefaultCreds(string ServiceURL)
        {
            VssConnection connection = new VssConnection(new Uri(ServiceURL), new VssCredentials());
            InitClients(connection);
        }

        static void ConnectWithCustomCreds(string ServiceURL, string User, string Password)
        {
            VssConnection connection = new VssConnection(new Uri(ServiceURL), new WindowsCredential(new NetworkCredential(User, Password)));
            InitClients(connection);
        }

        static void ConnectWithPAT(string ServiceURL, string PAT)
        {
            VssConnection connection = new VssConnection(new Uri(ServiceURL), new VssBasicCredential(string.Empty, PAT));
            InitClients(connection);
        }
        #endregion
    }
}

要安装包你可以在项目文件中查看我的内容。

<ItemGroup>
    <PackageReference Include="Microsoft.AspNet.WebApi.Client">
      <Version>5.2.7</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.TeamFoundation.DistributedTask.Common.Contracts">
      <Version>16.170.0-preview</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.TeamFoundationServer.Client">
      <Version>16.170.0-preview</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.Tpl.Dataflow">
      <Version>4.5.24</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.VisualStudio.Services.Client">
      <Version>16.170.0-preview</Version>
    </PackageReference>
    <PackageReference Include="Newtonsoft.Json">
      <Version>12.0.3</Version>
    </PackageReference>
  </ItemGroup>

我这边用VS2019 16.6就可以了 .net fx 4.7.2 console app来更新TFS 2019.1中的查询。希望以上内容都能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.