帮助类-从tfs获取数据
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获取数据的更多相关文章
- java操作JSON字符串转换成对象的时候如何可以不建立实体类也能获取数据
引入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson& ...
- WebForm.aspx 页面通过 AJAX 访问WebForm.aspx.cs类中的方法,获取数据
WebForm.aspx 页面通过 AJAX 访问WebForm.aspx.cs类中的方法,获取数据 WebForm1.aspx 页面 (原生AJAX请求,写法一) <%@ Page Langu ...
- WebForm.aspx 页面通过 AJAX 访问WebForm.aspx.cs类中的方法,获取数据(转)
WebForm.aspx 页面通过 AJAX 访问WebForm.aspx.cs类中的方法,获取数据 WebForm1.aspx 页面 (原生AJAX请求,写法一) <%@ Page Langu ...
- 从SQLite获取数据完成一个产品信息展示
在ios实际开发当中,我们常常用到Core Data做为数据储存首选.但在处理一些大量复杂的数据值且数据之间相互关联的时候,这就不得不使用关系型数据库来实现.例如一个导航程序,自身应该包含大量的地图自 ...
- Thymeleaf+SpringMVC,如何从模板中获取数据
Thymeleaf+SpringMVC,如何从模板中获取数据 在一个典型的SpringMVC应用中,带@Controller注解的类负责准备数据模型Map的数据和选择一个视图进行渲染.这个模型Map对 ...
- 一个自定义 HBase Filter -“通过RowKeys来高性能获取数据”
摘要: 大家在使用HBase和Solr搭建系统中经常遇到的一个问题就是:“我通过SOLR得到了RowKeys后,该怎样去HBase上取数据”.使用现有的Filter性能差劲,网上也没有现成的自定义Fi ...
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Json--Android中数据文件解析(Json解析--从服务器端获取数据并且解析,显示在客户端上面)
前面学习过了使用SAX解析XML数据(点击进入:SAX解析XML数据),今天学习Json解析: 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据 ...
- EL表达式获取数据
EL 全名为Expression Language. EL主要作用 获取数据: •EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.(某个web域 ...
随机推荐
- [luogu2296][寻找道路]
直接赋题目..... 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- CF Educational Codeforces Round 57划水记
因为是unrated于是就叫划水记了,而且本场也就用了1h左右. A.B:划水去了,没做 C:大水题,根据初三课本中圆的知识,可以把角度化成弧长,而这是正多边形,所以又可以化成边数,于是假设读入为a, ...
- 第三篇-ubuntu18.04下截图快捷键
ubuntu自带的截图工具感觉能够满足基本的截图功能,可以不必安装另外的截图软件. 一般用到的截图类型有三种:全屏.当前活动窗口.自定义区域,其中自定义区域截图是最灵活也是我们用的最多的方式.在ubu ...
- 关于form与表单操作
form表单自动提交规则 form表单中只有一个type=text的input,在input中按enter键,会自动提交: form表单中有多个type=text的input,且无type=submi ...
- post请求中data参数的应用
一.data为参数,json是自动的把参数转换成了json格式,一般建议用json ,url是请求地址. 二,以一个网站来做解释,看登陆的请求 抓包看一下: 用在代码里面看一下: 如果不转的话,那么用 ...
- callee和斐波那契数列
如果一对兔子每月生一对兔子:一对新生兔,从第二个月起就开始生兔子:假定每对兔子都是一雌一雄,试问一对兔子,第n个月能繁殖成多少对兔子? ———————————————————————————————— ...
- mysql优化好文
https://segmentfault.com/a/1190000006158186
- (replace find)nyoj113-字符串替换
113-字符串替换 内存限制:64MB 时间限制:3000ms 特判: No通过数:171 提交数:388 难度:2 题目描述: 编写一个程序实现将字符串中的所有"you"替换成& ...
- Qt ------ window下工程项目打包成一个exe程序
最近,在学习QT5的过程中,想尝试着把自己写的工程程序给打包发布出来,在任何一台windows系统都能运行,这样就不会限于电脑需不需要安装QT安装包了. 首先,先介绍自己使用的环境.我使用的QT版本是 ...
- websocket实现简单的通信
websocket server端 #coding=utf8 #!/usr/bin/python import struct,socket import hashlib import threadin ...