帮助类-从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域 ...
随机推荐
- Django(十四)分页器(paginator)及自定义分页D
http://www.mamicode.com/info-detail-1724597.html http://www.cnblogs.com/wupeiqi/articles/5246483.htm ...
- java List集合
List集合包括四种类,分别是ArrayList.LinkedList.Vector.Stack. ArrayList:元素的存储是顺序存储,可以根据数组的下标查询,查询速度快,但是在删除和插入元素时 ...
- jquery 前端 跨域 jsonp
1.jsonp 支持get:可以跨域: 2.java 在controller中增加header: /** * 获取用户信息 */ @ResponseBody @RequestMapping(value ...
- (递推)codeVs1011 && 洛谷P1028 数的计算
题目描述 Description 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1. 不 ...
- javaWeb中使用ajax上传文件
javaWeb上传图片 上传文件所必要的两个jar包:commons-fileupload.jar.commons-io.jar. jar包下载:github路径 核心代码: String withP ...
- 洛谷P1228 分治
https://www.luogu.org/problemnew/show/P1228 我真傻,真的,我单知道这种题目可以用dfs剪枝过,没有想到还能构造分治,当我敲了一发dfs上去的时候,只看到一个 ...
- XML异常
1.com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1 字节的 UTF-8 序列的字节 1 无效 ...
- HDFS-JavaAPI
一.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
- TranslateMessage消息翻译和DispatchMessage消息分发
TranslateMessage函数将虚拟键消息转换成字符消息.比如: 消息WM_KEYDOWN和WM_KEYUP组合产生一个WM_CHAR或WM_DEADCHAR消息. 消息WM_SYSKEYDOW ...
- vue表单校验提交报错TypeError: Cannot read property 'validate' of undefined
TypeError: Cannot read property 'validate' of undefined at VueComponent.submitForm (plat_users.html: ...