zoukankan      html  css  js  c++  java
  • 帮助类-从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 = 14)
            {
                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('\')[0];
                }
            }
        }
    }
  • 相关阅读:
    关于 CS1595 MS的知识库还是不全面,反正它给我的解决方法不能用,偶只有这样做了....
    被一贴,一个以前写的邮件发送的小类库。记住了,不是内裤
    [下载]活学活用DataGrid控件与ADO.NET
    不同浏览器透明度的写法
    通过文件读取oep值
    菜单
    CWnd::OnContextMenu函数(右键单击弹出快捷菜单)
    poj 3349(hash)
    poj 3009(dfs+回溯 模拟)
    poj 3026 (bfs+prim)
  • 原文地址:https://www.cnblogs.com/a14907/p/6689166.html
Copyright © 2011-2022 走看看