using JC.Helper;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.Framework.Common;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.DirectoryServices;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Web; namespace DJRS.UI.Common
{
public class TFSHelper
{
#region 初始化变量
private string _TFSUserName;
private string _TFSPWD;
private string _TFSURL;
public string TFSUserName
{
get
{
if (string.IsNullOrEmpty(_TFSUserName))
{
_TFSUserName = AppSettingHelper.Get<string>("TFSUserName");
}
return _TFSUserName;
}
}
public string TFSPWD
{
get
{
if (string.IsNullOrEmpty(_TFSPWD))
{
_TFSPWD = AppSettingHelper.Get<string>("TFSPWD");
}
return _TFSPWD;
}
}
public string TFSURL
{
get
{
if (string.IsNullOrEmpty(_TFSURL))
{
_TFSURL = AppSettingHelper.Get<string>("TFSURL");
}
return _TFSURL;
}
}
#endregion
/// <summary>
/// 获取最近两个星期的任务和bug
/// </summary>
/// <param name="projectName"></param>
/// <param name="userName"></param>
/// <param name="days">查询最近多少天的数据(默认14天,也就是两个星期内的)</param>
public List<WorkItemView> GetRecentTaskAndBug(string projectName, string userName, int days = )
{
TfsTeamProjectCollection server = null;
try
{
var ret = new List<WorkItemView>();
//返回id,创建时间,创建人,描述
Uri tfsUri = new Uri(TFSURL);
NetworkCredential networkCredential = new NetworkCredential(TFSUserName, TFSPWD);
ICredentials credential = (ICredentials)networkCredential;
server = new TfsTeamProjectCollection(tfsUri, credential);
var workStore = server.GetService<WorkItemStore>(); string sql = "";
if (string.IsNullOrEmpty(projectName))
{
sql = $@"select [System.Id], [工作项类型], [System.Title], [System.AssignedTo], [System.State], [zzz.BugModule]
from WorkItems
where ((([System.WorkItemType] = '任务' or[System.WorkItemType] = '用户情景') and[System.State] <> '已删除' and[System.AssignedTo] = '{userName}' and[System.CreatedDate] >= @today - {days}) or([System.WorkItemType] = 'Bug' and not[System.Title] contains '版本生成失败:' and(ever[System.ChangedBy] = '{userName}' or[System.AssignedTo] = '{userName}') and[System.State] <> '已删除' and[System.CreatedDate] >= @today - {days})) order by[System.CreatedDate] desc";
}
else
{
sql = @"select [System.Id], [工作项类型], [System.Title], [System.AssignedTo], [System.State], [zzz.BugModule]
from WorkItems
where
[System.TeamProject] = '" + projectName + $"' and((([System.WorkItemType] = '任务' or[System.WorkItemType] = '用户情景') and[System.State] <> '已删除' and[System.AssignedTo] = '{userName}' and[System.CreatedDate] >= @today - {days}) or([System.WorkItemType] = 'Bug' and not[System.Title] contains '版本生成失败:' and(ever[System.ChangedBy] = '{userName}' or[System.AssignedTo] = '{userName}') and[System.State] <> '已删除' and[System.CreatedDate] >= @today - {days})) order by[System.CreatedDate] desc";
} var res = workStore.Query(sql);
foreach (WorkItem item in res)
{
var obj = new WorkItemView();
if (item.Fields.Contains("标题")) obj.标题 = (string)item.Fields["标题"].Value;
if (item.Fields.Contains("工作项类型")) obj.工作项类型 = (string)item.Fields["工作项类型"].Value;
if (item.Fields.Contains("团队项目")) obj.团队项目 = (string)item.Fields["团队项目"].Value;
if (item.Fields.Contains("ID")) obj.ID = (int)item.Fields["ID"].Value;
if (item.Fields.Contains("区域路径")) obj.区域路径 = (string)item.Fields["区域路径"].Value;
if (item.Fields.Contains("迭代路径")) obj.迭代路径 = (string)item.Fields["迭代路径"].Value;
if (item.Fields.Contains("指派给")) obj.指派给 = (string)item.Fields["指派给"].Value;
if (item.Fields.Contains("创建者")) obj.创建者 = (string)item.Fields["创建者"].Value;
if (item.Fields.Contains("创建日期")) obj.创建日期 = (DateTime?)item.Fields["创建日期"]?.Value;
if (item.Fields.Contains("激活者")) obj.激活者 = (string)item.Fields["激活者"].Value;
if (item.Fields.Contains("激活日期")) obj.激活日期 = (DateTime?)item.Fields["激活日期"]?.Value;
if (item.Fields.Contains("关闭者")) obj.关闭者 = (string)item.Fields["关闭者"].Value;
if (item.Fields.Contains("关闭日期")) obj.关闭日期 = (DateTime?)item.Fields["关闭日期"]?.Value;
if (item.Fields.Contains("解决者")) obj.解决者 = (string)item.Fields["解决者"].Value;
if (item.Fields.Contains("解决日期")) obj.解决日期 = (DateTime?)item.Fields["解决日期"]?.Value;
if (item.Fields.Contains("所属模块")) obj.所属模块 = (string)item.Fields["所属模块"].Value;
if (item.Fields.Contains("重现步骤")) obj.重现步骤 = (string)item.Fields["重现步骤"].Value;
ret.Add(obj);
} return ret;
}
finally
{
server.Dispose();
}
} /// <summary>
/// 获取项目的模块
/// </summary>
public List<string> GetModuleInProject(string projectName)
{
TfsTeamProjectCollection server = null;
try
{
var res = new List<string>(); Uri tfsUri = new Uri(TFSURL);
NetworkCredential networkCredential = new NetworkCredential(TFSUserName, TFSPWD);
ICredentials credential = (ICredentials)networkCredential;
server = new TfsTeamProjectCollection(tfsUri, credential);
var workStore = server.GetService<WorkItemStore>();
var project = workStore.Projects[projectName]; WorkItemType bugType = project.WorkItemTypes["Bug"];
WorkItem itemw = new WorkItem(bugType);
var allowVals = itemw.Fields["所属模块"].AllowedValues;
foreach (string val in allowVals)
{
res.Add(val);
} return res;
}catch (Exception ex)
{
return new List<string>();
}
finally
{
server.Dispose();
}
}
/// <summary>
/// 获取tfs中的项目名列表
/// </summary>
public List<string> GetProjects()
{
TfsTeamProjectCollection server = null;
WorkItemStore workStore = null;
try
{
Uri tfsUri = new Uri(TFSURL);
NetworkCredential networkCredential = new NetworkCredential(TFSUserName, TFSPWD);
ICredentials credential = (ICredentials)networkCredential;
server = new TfsTeamProjectCollection(tfsUri, credential); workStore = server.GetService<WorkItemStore>(); var res = new List<string>();
TfsConfigurationServer configserver = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri);
ReadOnlyCollection<CatalogNode> collectNodes =
configserver.CatalogNode.QueryChildren(new[] { CatalogResourceTypes.ProjectCollection },
false, CatalogQueryOptions.None);
foreach (CatalogNode collect in collectNodes)
{
Guid collectid = new Guid(collect.Resource.Properties["InstanceId"]);
TfsTeamProjectCollection teamproject = configserver.GetTeamProjectCollection(collectid);
ReadOnlyCollection<CatalogNode> projNodes = collect.QueryChildren(new[] { CatalogResourceTypes.TeamProject },
false, CatalogQueryOptions.None);
foreach (CatalogNode projnode in projNodes)
{
res.Add(projnode.Resource.DisplayName);
}
} return res;
}
catch (Exception ex)
{
while (ex.InnerException != null)
{
ex = ex.InnerException;
}
throw ex;
}
finally
{
server.Dispose();
}
}
/// <summary>
/// 获取tfs中的项目名列表
/// </summary>
public List<string> GetAllProjects()
{
TfsTeamProjectCollection server = null;
WorkItemStore workStore = null;
try
{
Uri tfsUri = new Uri(TFSURL);
NetworkCredential networkCredential = new NetworkCredential(TFSUserName, TFSPWD);
ICredentials credential = (ICredentials)networkCredential;
server = new TfsTeamProjectCollection(tfsUri, credential); workStore = server.GetService<WorkItemStore>();
var res = new List<string>(); foreach (Project item in workStore.Projects)
{
res.Add(item.Name);
} return res;
}
catch (Exception ex)
{
while (ex.InnerException != null)
{
ex = ex.InnerException;
}
throw ex;
}
finally
{
server.Dispose();
}
}
/// <summary>
/// 获取项目成员
/// </summary>
public List<TeamMember> GetProjectMembers(string projectName)
{
TfsTeamProjectCollection server = null;
try
{
Uri tfsUri = new Uri(TFSURL);
NetworkCredential networkCredential = new NetworkCredential(TFSUserName, TFSPWD);
ICredentials credential = (ICredentials)networkCredential;
server = new TfsTeamProjectCollection(tfsUri, credential);
var teamService = server.GetService<TfsTeamService>();
var ms = teamService.QueryTeams(projectName);
HashSet<TeamMember> ls = new HashSet<TeamMember>(new TeamMember());
foreach (var item in ms)
{
var members = item.GetMembers(server, MembershipQuery.Direct);
Console.WriteLine(item.Name);
foreach (var m in members)
{
if (m.IsContainer)
{
continue;
}
ls.Add(new TeamMember { UniqueName = m.UniqueName, DisplayName = m.DisplayName, TeamName = item.Name });
} } return ls.ToList();
}
finally
{
server.Dispose();
}
} }
public class TeamMember : IEqualityComparer<TeamMember>
{
public string TeamName { get; set; }
public string DisplayName { get; set; }
public string UniqueName { get; set; } public bool Equals(TeamMember x, TeamMember y)
{
return x.UniqueName == y.UniqueName;
} public int GetHashCode(TeamMember obj)
{
return obj.UniqueName.GetHashCode();
}
}
public class WorkItemView
{
public int ID { get; set; }
public string 标题 { get; set; }
public string 工作项类型 { get; set; }
public string 团队项目 { get; set; }
public string 区域路径 { get; set; }
public string 迭代路径 { get; set; }
public string 指派给 { get; set; }
public string 创建者 { get; set; }
public DateTime? 创建日期 { get; set; }
public string 激活者 { get; set; }
public DateTime? 激活日期 { get; set; }
public string 关闭者 { get; set; }
public DateTime? 关闭日期 { get; set; }
public string 解决者 { get; set; }
public DateTime? 解决日期 { get; set; }
public string 所属模块 { get; set; }
public string 重现步骤 { get; set; }
public string 项目名
{
get
{
return 迭代路径.Split('\\')[];
}
}
}
}

帮助类-从tfs获取数据的更多相关文章

  1. java操作JSON字符串转换成对象的时候如何可以不建立实体类也能获取数据

    引入依赖 <dependency>    <groupId>com.alibaba</groupId>    <artifactId>fastjson& ...

  2. WebForm.aspx 页面通过 AJAX 访问WebForm.aspx.cs类中的方法,获取数据

    WebForm.aspx 页面通过 AJAX 访问WebForm.aspx.cs类中的方法,获取数据 WebForm1.aspx 页面 (原生AJAX请求,写法一) <%@ Page Langu ...

  3. WebForm.aspx 页面通过 AJAX 访问WebForm.aspx.cs类中的方法,获取数据(转)

    WebForm.aspx 页面通过 AJAX 访问WebForm.aspx.cs类中的方法,获取数据 WebForm1.aspx 页面 (原生AJAX请求,写法一) <%@ Page Langu ...

  4. 从SQLite获取数据完成一个产品信息展示

    在ios实际开发当中,我们常常用到Core Data做为数据储存首选.但在处理一些大量复杂的数据值且数据之间相互关联的时候,这就不得不使用关系型数据库来实现.例如一个导航程序,自身应该包含大量的地图自 ...

  5. Thymeleaf+SpringMVC,如何从模板中获取数据

    Thymeleaf+SpringMVC,如何从模板中获取数据 在一个典型的SpringMVC应用中,带@Controller注解的类负责准备数据模型Map的数据和选择一个视图进行渲染.这个模型Map对 ...

  6. 一个自定义 HBase Filter -“通过RowKeys来高性能获取数据”

    摘要: 大家在使用HBase和Solr搭建系统中经常遇到的一个问题就是:“我通过SOLR得到了RowKeys后,该怎样去HBase上取数据”.使用现有的Filter性能差劲,网上也没有现成的自定义Fi ...

  7. Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. Json--Android中数据文件解析(Json解析--从服务器端获取数据并且解析,显示在客户端上面)

    前面学习过了使用SAX解析XML数据(点击进入:SAX解析XML数据),今天学习Json解析: 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据 ...

  9. EL表达式获取数据

    EL 全名为Expression Language. EL主要作用 获取数据: •EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.(某个web域 ...

随机推荐

  1. tomcat发布项目,运行不了

    工作中经常出现项目本来运行得好好的,从SVN上面更新代码后就不行了 这个问题有时候是因为编译不成功,处理步骤如下: 1.clean整个项目,重新编译 2.如果还是不行,则把编译中认为是error的设置 ...

  2. django系列 1 :python+django环境搭建 +mac提示找不到manage.py命令

    1.安装python3 2.设置python3的环境变量 3.进入命令行模式,输入 pip install django 1.10.3 4.验证是否安装完成 pip show django 5.dja ...

  3. HDU 1560 DNA sequence (迭代加深搜索)

    The twenty-first century is a biology-technology developing century. We know that a gene is made of ...

  4. 解决Nginx出现403 forbidden (13: Permission denied)报错的四种方法

    我是在在本地用虚拟机中通过yum安装nginx的,安装一切正常,但是访问时报403, 于是查看nginx日志,路径为/var/log/nginx/error.log.打开日志发现报错Permissio ...

  5. mysql同步复制异常的常见操作-传统复制方式

    mysql同步复制异常的常见操作-传统复制方式 一.传统复制方式是基于非gtid的,常见的错误有1032和1062 1032是主键冲突,1062是从库中没有找到对应的记录. 可以查看出现错误的binl ...

  6. bzoj2733 离线+并查集+主席树

    https://www.lydsy.com/JudgeOnline/problem.php?id=2733 网上清一色的合并线段树题解,我又不会,只能自己胡来,没想到Rush过去了 永无乡包含 n 座 ...

  7. eclipse新建maven项目默认jre为1.5的问题

    在maven的settings.xml中添加如下内容解决 <profiles> <profile> <id>jdk-1.8</id> <activ ...

  8. u-boot(四)命令实现

    目录 u-boot(四)命令实现 分析run_command 小结 自定义一个命令 代码 makefile title: u-boot(四)命令实现 tags: linux date: 2018-09 ...

  9. Java_去除字符串空格

    String ss = " happy new year "; System.out.println(ss + "------" + ss.length()); ...

  10. Windows Azure中国版试用

    Winodws Azure刚出来那会都没怎么关注,就在一些网页新闻上见过一些报道,之前阿里云在博客里搞过推广,拿什么豆可以换,当时也就是看了一下没去用过. 有次在一群里别人说Windows Azure ...