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. POJ 2823 Sliding Window (单调队列)

    单调队列 加了读入挂比不加更慢.... 而且这份代码要交c++ 有大神G++跑了700ms..... orzorzorz #include<iostream> #include<cs ...

  2. 怎么在linux下创建一个可运行脚本?

    1.touch hello.sh 2.vim hello.sh键入i插入#!/bin/shecho hello world;键入:esc:wq3.chmod 700 hello.sh 4. 执行./h ...

  3. 数据库工具类 JdbcUtils

    什么时候自己创建工具类 如果一个功能经常用到 我们建议把这个功能做成工具类 创建JdbcUtils包含三个方法 1: 把几个字符串 定义为常量 2:得到数据库连接getConnection(); 3 ...

  4. Ajax和Json的介绍(一)

    Ajax简介: 优点: 1.Ajax是一种网页开发技术,异步JavaScript和XML;(这样叫的原因是是因为ajax传递数据是用json格式的,而json和xml又类似,都是以键值对,josn是& ...

  5. Symbol特殊用途

    1. Symbol.iterator 定义对象的迭代器 一般我们遍历一个对象用for...in es6新增了一个for...of 但是对象却不能用 因为对象没有“迭代器”,那么我们给它定制一个 有了迭 ...

  6. Java Web之Servlet的三大作用域对象

    Servlet的作用域是干嘛的?答案就是共享数据而存在的,如图: 下面通过代码演示来具体讲解一下三大作用域 我们新建两个类 package main.com.vae.scope; import jav ...

  7. python 面向对象(四)反射

    ####################总结########## 1. isinstance: 判断xxx是否是xxx类型的(向上判断) type: 返回xx对象的数据类型 issubclass: 判 ...

  8. layui打印html页面转成pdf

    <!DOCTYPE html><html lang="zh"><head>     <meta charset="UTF-8&q ...

  9. 批量获取oracle的表和表字段注释【原】

    批量获取oracle的表和表字段注释 --用户表注释表 SELECT * FROM USER_TAB_COMMENTS WHERE TABLE_NAME LIKE 'WEB_ISC_%'; --显示指 ...

  10. MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具

    MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具集成Visual Studio 2013 MVC 5 Scaffolder + ...