C# 如何在TFS WIQL项目的团队迭代中获得所有用户?
我希望在一个项目中获得所有有迭代的用户。 假设“Precient”项目有9个不同的用户,有20个迭代,所以我希望项目中所有迭代都有不同的用户C# 如何在TFS WIQL项目的团队迭代中获得所有用户?,c#,tfs,tfs-workitem,wiql,C#,Tfs,Tfs Workitem,Wiql,我希望在一个项目中获得所有有迭代的用户。 假设“Precient”项目有9个不同的用户,有20个迭代,所以我希望项目中所有迭代都有不同的用户WIQL C#。这与问题有关。 但这并不能完全帮助我您可以通过RESTAPI或NETAPI获得。这是NetAPI的示例 您可以从“项目有效用户”组获取所有用户 您可以从项目根迭代中获得所有迭代 using Microsoft.TeamFoundation.Client; using Microsoft.TeamFoundation.Framework.Cl
WIQL C#
。这与问题有关。
但这并不能完全帮助我您可以通过RESTAPI或NETAPI获得。这是NetAPI的示例
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);
}
}
}
使用Microsoft.TeamFoundation.Client;
使用Microsoft.TeamFoundation.Framework.Client;
使用Microsoft.TeamFoundation.Framework.Common;
使用Microsoft.TeamFoundation.Server;
使用Microsoft.TeamFoundation.WorkItemTracking.Client;
使用制度;
使用System.Collections.Generic;
名称空间GetUserіAndItearions
{
班级计划
{
公共类迭代
{
公共字符串路径;
公共DateTime DateFrom;
公共日期时间日期到;
}
静态void Main(字符串[]参数)
{
string\u teamProject=“您的项目名称”;
尝试
{
TfsatmProjectCollection\u tpc=新TfsatmProjectCollection(新Uri(“http://your_server:8080/tfs/DefaultCollection"));
GetAllUsers(_tpc,_teamProject);
获取头韵(_tpc,_teamProject);
}
捕获(例外情况除外)
{
Console.WriteLine(“错误:+ex.Message”);
控制台写入线(例如StackTrace);
}
}
私有静态void GetAllIterations(TfsTeamProjectCollection pTpc,字符串pProjectName)
{
列表_its=新列表();
WorkItemStore_wistore=pTpc.GetService();
var_css=pTpc.GetService();
foreach(节点_wistore.Projects[pProjectName].IterationRootNodes中的节点)
FillIterations(_css,_节点,_its);
Console.WriteLine(“迭代:”);
foreach(迭代_itin _its)Console.WriteLine(“{0}:{1}-{2}”,_it.Path,
(_it.DateFrom==DateTime.MinValue)?“0:_it.DateFrom.ToShortDateString(),(_it.DateTo==DateTime.MinValue)?“0:_it.DateTo.ToShortDateString());
}
私有静态无效填充迭代(ICommonStructureService4 pCss、节点pNode、列表)
{
var_nodeInfo=pCss.GetNode(pNode.Uri.AbsoluteUri);
Add(新迭代{Path=_nodeInfo.Path,
DateFrom=(\u nodeInfo.StartDate==null)?DateTime.MinValue:(DateTime)\u nodeInfo.StartDate,
DateTo=(\u nodeInfo.FinishDate==null)?DateTime.MinValue:(DateTime)\u nodeInfo.FinishDate});
if(pNode.HasChildNodes)
foreach(pNode.ChildNodes中的节点_Node)
填充迭代(PCS、节点、凹坑);
}
私有静态void GetAllUsers(TfsTeamProjectCollection pTpc,字符串pProjectName)
{
List listUsers=新列表();
WorkItemStore_wistore=pTpc.GetService();
var_gss=pTpc.GetService();
var\u teamProject=\u wistore.Projects[pProjectName];
字符串_validGroupName=“[”+pProjectName+“]\\项目有效用户”;
TeamFoundationIdentity _group=_gss.ReadIdentity(IdentitySearchFactor.DisplayName、_validGroupName、MembershipQuery.Expanded、ReadIdentityOptions.ExtendedProperties);
列表_memebersIds=新列表();
foreach(var _group.Members中的成员)_memebersIds.Add(_member.Identifier);
var_members=_gss.readIdentifications(IdentitySearchFactor.Identifier,_memebersIds.ToArray(),MembershipQuery.extended,ReadIdentityOptions.ExtendedProperties);
如果(!\u成员[0].IsContainer)listUsers.Add(\u成员[0].DisplayName),则foreach(var\u成员位于\u成员中);
Console.WriteLine(“用户:”);
foreach(listUsers中的var_user)Console.WriteLine(“{0}”,u user);
}
}
}
它无法通过WIQL从团队获取用户。WIQL是一种工作项查询语言,用于查询bug、任务和其他类型的工作项。返回值应为工作项 您需要使用api作为@Shamray来检索用户。下面的博客也提供了一个例子:
我有没有办法不用PAT(令牌)使用rest api?我正在使用TFS 2015!!请编写C#代码,通过REST api连接TFS,并获取项目的所有用户和迭代。您可以在api中使用windows凭据进行基本身份验证。您应该参考的RESTAPI。关于如何在C#代码中使用REST api,请参考此网站:请提供您尝试过的代码,并准确解释哪些代码没有按预期工作。需要您的帮助吗