public QueryHierarchyItem CreateFolder() { Guid projectId = ClientSampleHelpers.FindAnyProject(this.Context).Id; string queryPath = "Shared Queries"; QueryHierarchyItem postedQuery = new QueryHierarchyItem() { Name = "Sample Folder", IsFolder = true }; VssConnection connection = Context.Connection; WorkItemTrackingHttpClient workItemTrackingClient = connection.GetClient <WorkItemTrackingHttpClient>(); try { QueryHierarchyItem query = workItemTrackingClient.CreateQueryAsync(postedQuery, projectId, queryPath).Result; Console.WriteLine("Folder Successfully Created"); 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 creating folder: " + ex.InnerException.Message); return(null); } }
public static async Task <QueryHierarchyItem> AddQueryAsync(this WorkItemTrackingHttpClient source, TeamProject project, QueryHierarchyItem query, CancellationToken cancellationToken) { //Have to build up the path to the query var queryPath = new QueryPath(query.Path); if (queryPath.Parent != null && !queryPath.Parent.IsRoot) { await source.AddFolderAsync(project, queryPath.Parent, cancellationToken : cancellationToken).ConfigureAwait(false); } //Clone the query var newQuery = new QueryHierarchyItem() { Clauses = query.Clauses, Columns = query.Columns, FilterOptions = query.FilterOptions, IsPublic = query.IsPublic, LinkClauses = query.LinkClauses, Name = query.Name, QueryType = query.QueryType, SortColumns = query.SortColumns, SourceClauses = query.SourceClauses, TargetClauses = query.TargetClauses, Wiql = query.Wiql }; return(await source.CreateQueryAsync(newQuery, project.Id, queryPath.Parent?.FullPath, cancellationToken : cancellationToken).ConfigureAwait(false)); }
public void Setup(string queryName, IEnumerable <string> tfsProjectNames, string query) { foreach (var tfsProjectName in tfsProjectNames) { var queryHierarchyItems = _witClient.GetQueriesAsync(tfsProjectName, depth: 2).Result; var myQueriesFolder = queryHierarchyItems.FirstOrDefault(qhi => qhi.Name.Equals("My Queries")); if (myQueriesFolder == null) { continue; } QueryHierarchyItem togglQuery = null; if (myQueriesFolder.Children != null) { togglQuery = myQueriesFolder.Children.FirstOrDefault(qhi => qhi.Name.Equals(queryName)); } if (togglQuery != null) { continue; } togglQuery = new QueryHierarchyItem { Name = queryName, Wiql = query, IsFolder = false }; var result = _witClient.CreateQueryAsync(togglQuery, tfsProjectName, myQueriesFolder.Name).Result; } }
public static async Task GetTask(VssConnection connection, string projeto) { WorkItemTrackingHttpClient witClient = connection.GetClient <WorkItemTrackingHttpClient>(); //WorkItem workitem = await witClient.GetWorkItemAsync(4621); List <QueryHierarchyItem> queryHierarchyItems = witClient.GetQueriesAsync(projeto, depth: 2).Result; QueryHierarchyItem myQueriesFolder = queryHierarchyItems.FirstOrDefault(qhi => qhi.Name.Equals("Shared Queries")); if (myQueriesFolder != null) { string queryName = "Integra"; // See if our 'REST Sample' query already exists under 'My Queries' folder. QueryHierarchyItem newBugsQuery = null; if (myQueriesFolder.Children != null) { newBugsQuery = myQueriesFolder.Children.FirstOrDefault(qhi => qhi.Name.Equals(queryName)); } if (newBugsQuery == null) { // if the 'REST Sample' query does not exist, create it. newBugsQuery = new QueryHierarchyItem() { Name = queryName, Wiql = "SELECT [System.Id],[System.WorkItemType],[System.Title],[System.AssignedTo],[System.State],[System.Tags] FROM WorkItems WHERE [System.TeamProject] = @project AND [System.WorkItemType] = 'Bug' AND [System.State] = 'New'", IsFolder = false }; newBugsQuery = witClient.CreateQueryAsync(newBugsQuery, projeto, myQueriesFolder.Name).Result; } WorkItemQueryResult result = witClient.QueryByIdAsync(newBugsQuery.Id).Result; if (result.WorkItems.Any()) { int skip = 0; const int batchSize = 100; IEnumerable <WorkItemReference> workItemRefs; do { workItemRefs = result.WorkItems.Skip(skip).Take(batchSize); if (workItemRefs.Any()) { // get details for each work item in the batch List <WorkItem> workItems = witClient.GetWorkItemsAsync(workItemRefs.Select(wir => wir.Id)).Result; foreach (WorkItem workItem in workItems) { var teste = workItem; } } skip += batchSize; }while (workItemRefs.Count() == batchSize); } } }
/// <summary> /// Create new query /// </summary> /// <param name="project"></param> /// <param name="queryPath"></param> /// <param name="QueryName"></param> /// <param name="wiqlStr"></param> static void AddQuery(string project, string queryPath, string QueryName, string wiqlStr) { QueryHierarchyItem query = new QueryHierarchyItem(); query.QueryType = QueryType.Flat; query.Name = QueryName; query.Wiql = wiqlStr; query = WitClient.CreateQueryAsync(query, project, queryPath).Result; }
public QueryHierarchyItem CreateQuery() { Guid projectId = ClientSampleHelpers.FindAnyProject(this.Context).Id; string queryPath = "My Queries"; QueryHierarchyItem postedQuery = new QueryHierarchyItem() { Name = "Sample Query", Wiql = "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Bug' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc" }; VssConnection connection = Context.Connection; WorkItemTrackingHttpClient workItemTrackingClient = connection.GetClient <WorkItemTrackingHttpClient>(); try { QueryHierarchyItem query = workItemTrackingClient.CreateQueryAsync(postedQuery, projectId, queryPath).Result; // Save the ID of the newly created query for use in later samples this.Context.SetValue <Guid>("$sampleQueryId", query.Id); Console.WriteLine("Query Successfully Created"); Console.WriteLine("Id: {0}", query.Id); Console.WriteLine("Name: {0}", query.Name); Console.WriteLine("Path: {0}", query.Path); return(query); } catch (AggregateException ex) { if (ex.InnerException.Message.Contains("TF237018")) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Error creating query: Query name in specified path already exists"); Console.ForegroundColor = ConsoleColor.White; } return(null); } }
public static WorkItemQueryResult ExecuteItemsSelectionWQery(VssConnection _connection, string tag) { var teamProjectName = "WorkPractice"; VssConnection connection = _connection; WorkItemTrackingHttpClient witClient = connection.GetClient <WorkItemTrackingHttpClient>(); //Получить 2 уровня элементов иерархии запросов List <QueryHierarchyItem> queryHierarchyItems = witClient.GetQueriesAsync(teamProjectName, depth: 2).Result; // Найдите папку 'My Queries' folder QueryHierarchyItem myQueriesFolder = queryHierarchyItems.FirstOrDefault(qhi => qhi.Name.Equals("My Queries")); if (myQueriesFolder != null) { string queryName = tag + "SomeQueri"; // See if our 'REST Sample' query already exists under 'My Queries' folder. QueryHierarchyItem newBugsQuery = null; if (myQueriesFolder.Children != null) { newBugsQuery = myQueriesFolder.Children.FirstOrDefault(qhi => qhi.Name.Equals(queryName)); } if (newBugsQuery == null) { // if the 'REST Sample' query does not exist, create it. newBugsQuery = new QueryHierarchyItem() { Name = queryName, Wiql = "SELECT [System.Id],[System.WorkItemType],[System.Title],[System.AssignedTo],[System.State],[System.Tags] FROM WorkItems WHERE [System.TeamProject] = @project AND [System.WorkItemType] = 'Task' AND [System.State] = 'Done' AND [System.Tags] Contains '" + tag + "' ", IsFolder = false }; newBugsQuery = witClient.CreateQueryAsync(newBugsQuery, teamProjectName, myQueriesFolder.Name).Result; } // Выполняется запрос и получается егоо результат return(witClient.QueryByIdAsync(newBugsQuery.Id).Result);; } return(null); }
public static async Task <QueryHierarchyItem> AddFolderAsync(this WorkItemTrackingHttpClient source, TeamProject project, QueryPath folderPath, CancellationToken cancellationToken) { var folder = await source.GetFolderAsync(project, folderPath.FullPath, cancellationToken).ConfigureAwait(false); if (folder != null) { return(folder); } //Ensure the parent folder exists, unless it is a root path cancellationToken.ThrowIfCancellationRequested(); if (folderPath.Parent != null && !folderPath.Parent.IsRoot) { await source.AddFolderAsync(project, folderPath.Parent, cancellationToken).ConfigureAwait(false); } var query = new QueryHierarchyItem() { Name = folderPath.Name, IsFolder = true }; cancellationToken.ThrowIfCancellationRequested(); return(await source.CreateQueryAsync(query, project.Id, folderPath.Parent?.FullPath, cancellationToken : cancellationToken).ConfigureAwait(false)); }
void ConnectToOnLineTfsAndCreateQuries(string projectName) { List <QueryHierarchyItem> queryHierarchyItems = _workItemTrackingClient.GetQueriesAsync(projectName, depth: 2).Result; QueryHierarchyItem sharedQueriesFolder = queryHierarchyItems.FirstOrDefault(qhi => qhi.Name.Equals(QuieriesFolder, StringComparison.InvariantCulture)); if (sharedQueriesFolder != null) { _queriesFolder = sharedQueriesFolder.Children?.FirstOrDefault(qhi => qhi.Name.Equals(QueriesFolderName, StringComparison.InvariantCulture)); if (_queriesFolder == null) { QueryHierarchyItem queriesFolder = new QueryHierarchyItem { IsFolder = true, HasChildren = true, Name = QueriesFolderName }; _queriesFolder = _workItemTrackingClient.CreateQueryAsync(queriesFolder, projectName, sharedQueriesFolder.Name).Result; } } }
public static List <WorkItem> getBugs(VssConnection connection) { // Create instance of WorkItemTrackingHttpClient using VssConnection WorkItemTrackingHttpClient witClient = connection.GetClient <WorkItemTrackingHttpClient>(); List <WorkItem> bugList = new List <WorkItem>(); // Get 2 levels of query hierarchy items List <QueryHierarchyItem> queryHierarchyItems = witClient.GetQueriesAsync(teamProjectName, depth: 2).Result; // Search for 'My Queries' folder QueryHierarchyItem myQueriesFolder = queryHierarchyItems.FirstOrDefault(qhi => qhi.Name.Equals("My Queries")); if (myQueriesFolder != null) { string queryName = "REST Sample"; // See if our 'REST Sample' query already exists under 'My Queries' folder. QueryHierarchyItem newBugsQuery = null; if (myQueriesFolder.Children != null) { newBugsQuery = myQueriesFolder.Children.FirstOrDefault(qhi => qhi.Name.Equals(queryName)); } if (newBugsQuery == null) { // if the 'REST Sample' query does not exist, create it. newBugsQuery = new QueryHierarchyItem() { Name = queryName, Wiql = "SELECT [System.Id],[System.WorkItemType],[System.Title],[System.AssignedTo],[System.State],[System.Tags] FROM WorkItems WHERE [System.TeamProject] = @project AND [System.WorkItemType] = 'Bug' AND [System.State] = 'New'", IsFolder = false }; newBugsQuery = witClient.CreateQueryAsync(newBugsQuery, teamProjectName, myQueriesFolder.Name).Result; } // run the 'REST Sample' query WorkItemQueryResult result = witClient.QueryByIdAsync(newBugsQuery.Id).Result; if (result.WorkItems.Any()) { int skip = 0; const int batchSize = 100; IEnumerable <WorkItemReference> workItemRefs; do { workItemRefs = result.WorkItems.Skip(skip).Take(batchSize); if (workItemRefs.Any()) { // get details for each work item in the batch List <WorkItem> workItems = witClient.GetWorkItemsAsync(workItemRefs.Select(wir => wir.Id)).Result; foreach (WorkItem workItem in workItems) { bugList.Add(workItem); // write work item to console Console.WriteLine("{0} {1}", workItem.Id, workItem.Fields["System.Title"]); } } skip += batchSize; }while (workItemRefs.Count() == batchSize); } else { Console.WriteLine("No bugs were returned from query."); } } return(bugList); }
public static void SampleREST() { Uri collectionUri = new Uri("https://vso-lis.visualstudio.com"); string personalAccessToken = "Its my Personal"; string teamProjectName = "SDB20"; // Create a connection object, which we will use to get httpclient objects. This is more robust // then newing up httpclient objects directly. Be sure to send in the full collection uri. // For example: http://myserver:8080/tfs/defaultcollection // We are using default VssCredentials which uses NTLM against a Team Foundation Server. See additional provided // examples for creating credentials for other types of authentication. VssConnection connection = new VssConnection(collectionUri, new VssCredentials()); // Create instance of WorkItemTrackingHttpClient using VssConnection WorkItemTrackingHttpClient witClient = connection.GetClient <WorkItemTrackingHttpClient>(); // Get 2 levels of query hierarchy items List <QueryHierarchyItem> queryHierarchyItems = witClient.GetQueriesAsync(teamProjectName, depth: 2).Result; // Search for 'My Queries' folder QueryHierarchyItem myQueriesFolder = queryHierarchyItems.FirstOrDefault(qhi => qhi.Name.Equals("My Queries")); if (myQueriesFolder != null) { string queryName = "REST Sample"; // See if our 'REST Sample' query already exists under 'My Queries' folder. QueryHierarchyItem newBugsQuery = null; if (myQueriesFolder.Children != null) { newBugsQuery = myQueriesFolder.Children.FirstOrDefault(qhi => qhi.Name.Equals(queryName)); } if (newBugsQuery == null) { // if the 'REST Sample' query does not exist, create it. newBugsQuery = new QueryHierarchyItem() { Name = queryName, Wiql = "SELECT [System.Id],[System.WorkItemType],[System.Title],[System.AssignedTo],[System.State],[System.Tags] FROM WorkItems WHERE [System.TeamProject] = @project AND [System.WorkItemType] = 'Bug' AND [System.State] = 'New'", IsFolder = false }; newBugsQuery = witClient.CreateQueryAsync(newBugsQuery, teamProjectName, myQueriesFolder.Name).Result; } // run the 'REST Sample' query WorkItemQueryResult result = witClient.QueryByIdAsync(newBugsQuery.Id).Result; if (result.WorkItems.Any()) { int skip = 0; const int batchSize = 100; IEnumerable <WorkItemReference> workItemRefs; do { workItemRefs = result.WorkItems.Skip(skip).Take(batchSize); if (workItemRefs.Any()) { // get details for each work item in the batch List <WorkItem> workItems = witClient.GetWorkItemsAsync(workItemRefs.Select(wir => wir.Id)).Result; foreach (WorkItem workItem in workItems) { // write work item to console Console.WriteLine("{0} {1}", workItem.Id, workItem.Fields["System.Title"]); } } skip += batchSize; }while (workItemRefs.Count() == batchSize); } else { Console.WriteLine("No work items were returned from query."); } } }