https:/blog.jongallant.com201107修改-tfs-query-with-c。
我在博客上找到了建议使用StoredQuery的博客,现在看来已经过时了,我不能使用project.StoredQueries和Update()方法来处理StoredQuery。
所以,如果我想更新tfs上现有的查询文本以满足一些特殊条件,如何管理?谢谢,谢谢
这里是 官方样本链接 从 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中的查询。希望以上内容都能帮到你。