как получить всех пользователей вместе с командной итерацией проекта TFS WIQL?

я хочу, чтобы все пользователи с итерацией в проекте. Допустим, проект «Precient» имеет 9 отдельных пользователей с 20 итерациями, поэтому мне нужны отдельные пользователи со всеми итерациями в проекте WIQL C#. Это связано с вопросом. Запрос WIQL, чтобы получить все команда и пользователи в проекте?
но не помогает мне в полной мере


person Community    schedule 22.03.2018    source источник
comment
Пожалуйста, предоставьте код, который вы пробовали, и объясните, что именно не сработало, как ожидалось.   -  person Mary    schedule 14.04.2018


Ответы (2)


Вы можете получить это через REST API или Net API. Это образец для Net API.

  1. Вы можете получить всех пользователей из группы «Действительные пользователи проекта».
  2. Вы можете получить все итерации из корневых итераций проекта.

    using Microsoft.TeamFoundation.Client;
    using Microsoft.TeamFoundation.Framework.Client;
    using Microsoft.TeamFoundation.Framework.Common;
    using Microsoft.TeamFoundation.Server;
    using Microsoft.TeamFoundation.WorkItemTracking.Client;
    using System;
    using System.Collections.Generic;
    
    namespace GetUserіAndItearions
    {
        class Program
        {
            public class Iteration
            {
                public string Path;
                public DateTime DateFrom;
                public DateTime DateTo;
            }
    
            static void Main(string[] args)
            {
                string _teamProject = "Your_Project_Name";
    
                try
                {
                    TfsTeamProjectCollection _tpc = new TfsTeamProjectCollection(new Uri("http://your_server:8080/tfs/DefaultCollection"));
    
                    GetAllUsers(_tpc, _teamProject);
                    GetAllIterations(_tpc, _teamProject);
    
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error: " + ex.Message);
                    Console.WriteLine(ex.StackTrace);
                }
            }
    
            private static void GetAllIterations(TfsTeamProjectCollection pTpc, string pProjectName)
            {
                List<Iteration> _its = new List<Iteration>();
                WorkItemStore _wistore = pTpc.GetService<WorkItemStore>();
    
                var _css = pTpc.GetService<ICommonStructureService4>();
    
    
                foreach (Node _node in _wistore.Projects[pProjectName].IterationRootNodes)
                    FillIterations(_css, _node, _its);
    
    
                Console.WriteLine("Iterations:");
                foreach (Iteration _it in _its) Console.WriteLine("{0}:{1}-{2}", _it.Path, 
                    (_it.DateFrom == DateTime.MinValue) ? "0" : _it.DateFrom.ToShortDateString(), (_it.DateTo== DateTime.MinValue) ? "0" : _it.DateTo.ToShortDateString());
            }
    
            private static void FillIterations(ICommonStructureService4 pCss, Node pNode, List<Iteration> pIts)
            {
                var _nodeInfo = pCss.GetNode(pNode.Uri.AbsoluteUri);
    
                pIts.Add(new Iteration { Path = _nodeInfo.Path,
                    DateFrom = (_nodeInfo.StartDate == null) ? DateTime.MinValue : (DateTime)_nodeInfo.StartDate,
                    DateTo = (_nodeInfo.FinishDate == null) ? DateTime.MinValue : (DateTime)_nodeInfo.FinishDate });
    
                if (pNode.HasChildNodes)
                    foreach (Node _node in pNode.ChildNodes)
                        FillIterations(pCss, _node, pIts);
            }
    
            private static void GetAllUsers(TfsTeamProjectCollection pTpc, string pProjectName)
            {
                List<string> listUsers = new List<string>();
    
                WorkItemStore _wistore = pTpc.GetService<WorkItemStore>();
                var _gss = pTpc.GetService<IIdentityManagementService>();
    
                var _teamProject = _wistore.Projects[pProjectName];
                string _validGroupName = "[" + pProjectName + "]\\Project Valid Users";
    
                TeamFoundationIdentity _group = _gss.ReadIdentity(IdentitySearchFactor.DisplayName, _validGroupName, MembershipQuery.Expanded, ReadIdentityOptions.ExtendedProperties);
    
                List<string> _memebersIds = new List<string>();
                foreach (var _member in _group.Members) _memebersIds.Add(_member.Identifier);
    
                var _members = _gss.ReadIdentities(IdentitySearchFactor.Identifier, _memebersIds.ToArray(), MembershipQuery.Expanded, ReadIdentityOptions.ExtendedProperties);
    
                foreach (var _member in _members) if (!_member[0].IsContainer) listUsers.Add(_member[0].DisplayName);
    
                Console.WriteLine("Users:");
                foreach (var _user in listUsers) Console.WriteLine("{0}", _user);
            }
    
        }
    }
    
person Shamrai Aleksander    schedule 22.03.2018
comment
нужна помощь здесь stackoverflow.com/questions/52025525/ - person ; 26.08.2018

Он не может получить пользователей из Team через WIQL. WIQL — это язык запросов к рабочим элементам, который используется для поиска ошибок, задач и других типов рабочих элементов. Возвращаемое значение должно быть рабочим элементом.

Вам нужно использовать api как @Shamray для получения пользователей. В следующем блоге также приведен пример:

http://blogs.microsoft.co.il/shair/2012/05/20/tfs-api-part-44-vs11-teams-and-team-members/

person Cece Dong - MSFT    schedule 23.03.2018
comment
есть ли способ использовать rest API без PAT (токен)? - person ; 23.03.2018
comment
я использую TFS 2015 !! Пожалуйста, напишите код C# для подключения TFS с помощью REST API и получения всех пользователей и итерации проекта. - person ; 23.03.2018
comment
Вы можете использовать Basic аутентификацию с вашими учетными данными Windows в вашем API. Остальные API вы должны найти в Получить список команд, Получить участников команды, Получить итерации команды. Информацию о том, как использовать REST API в коде C#, см. на этом веб-сайте: docs.microsoft.com/en-us/vsts/integrate/get-started/ - person Cece Dong - MSFT; 26.03.2018