帮助类-从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域 ...
随机推荐
- cookie 常用操作
Cookie:指网站为了辨别用户身份.进行会话跟踪而储存在用户本地的 key/value 型数据(通常经过加密), cookie key/value 型数据可以由服务器端自己定义. Cookie是由服 ...
- C# Winfom 中ListBox的简单用法
https://www.cnblogs.com/xielong/p/6744805.html Winform控件ListBox的用法 1.如何添加listBox的值 this.listBox1.Ite ...
- 第十六节、特征描述符BRIEF(附源码)
我们已经知道SIFT算法采用128维的特征描述子,由于描述子用的是浮点数,所以它将会占用512字节的空间.类似的SUFR算法,一般采用64维的描述子,它将占用256字节的空间.如果一幅图像中有1000 ...
- 第三十三节,目标检测之选择性搜索-Selective Search
在基于深度学习的目标检测算法的综述 那一节中我们提到基于区域提名的目标检测中广泛使用的选择性搜索算法.并且该算法后来被应用到了R-CNN,SPP-Net,Fast R-CNN中.因此我认为还是有研究的 ...
- parallels tools 安装
│ - kernel-devel-2.6.32-358.el6.x86_64 │ │ - dkms
- 深入理解JS函数中this指针的指向
函数在执行时,会在函数体内部自动生成一个this指针.谁直接调用产生这个this指针的函数,this就指向谁. 怎么理解指向呢,我认为指向就是等于.例如直接在js中输入下面的等式: console.l ...
- 微信小程序:分页和加载更多
直接上代码吧.不足之处,多多指教,一起进步 1.wxml页面的最后敲上,css自己定义 <view class="loadmore" mtype="{{mtype} ...
- js 各种事件 如:点击事件、失去焦点、键盘事件等
事件驱动: 我们点击按钮 按钮去掉用相应的方法. demo: <input type="button" v ...
- ATPCS规则
title: ATPCS规则 tags: ARM date: 2018-10-14 17:03:23 --- ATPCS规则 ARM指令集E004armproc.chm ATPCS介绍与使用.pdf ...
- 数据库基础SQL知识面试题一
数据库基础SQL知识面试题一 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如标题所示,本篇博客主要介绍基础知识的面试题.大家可以用来测试面试者的技术水平,由于个人水平所限,难免 ...