【问题标题】:how to get all fields details of a workitem by wiql c# asp.net?如何通过wiql c#asp.net获取工作项的所有字段详细信息?
【发布时间】:2018-07-25 21:57:48
【问题描述】:

基本上我的 TFS 的层次结构是这样的

P1
->任务1
->任务2
->任务3
->任务4
p1 包含以下字段 故事所有者,故事作者,分配给,状态,优先级,标题
并且 P1 包含 4 个任务,我想要 p1 字段(故事所有者、故事作者、分配给、状态、优先级和标题)的任务的所有详细信息。

我没有得到 p1 字段及其任务详细信息(故事所有者、故事作者、分配给、状态、优先级和标题)的代码。

var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("tfs url"));
                WorkItemStore workItemStore = new WorkItemStore(tpc);

                Query query = new Query(workItemStore, "SELECT * FROM WorkItems WHERE [System.TeamProject] = @project", new Dictionary<string, string>() { { "project", projectname } });

                WorkItemCollection wic = query.RunQuery();
var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://apactfs.cbre.com:8080/tfs/cbre.apac.applications"));
                WorkItemStore workItemStore = new WorkItemStore(tpc);

                Query query = new Query(workItemStore, "SELECT * FROM WorkItems WHERE [System.TeamProject] = @project", new Dictionary<string, string>() { { "project", projectname } });

                WorkItemCollection wic = query.RunQuery();
foreach (WorkItem item in wic)
                {

                    info += String.Format("{0}\n", item.Title);
                }

【问题讨论】:

    标签: c# asp.net tfs wiql


    【解决方案1】:

    您可以使用以下查询获取字段:-

    WorkItemCollection wic = query.RunQuery();
    foreach (WorkItem item in wic)
    {
         info += String.Format("{0}\n", item.Title);
         var r = item.Fields.OfType<Microsoft.TeamFoundation.WorkItemTracking.Client.Field>()
                      .Select(x => new
                      {
                          Name = x.Name,
                          Value = x.Value
                          //You can fetch more details here...
                      });
    }
    

    请注意,仅出于演示目的,我在这里定义了一个变量。您应该创建一个自定义对象并填充它。

    此外,如果您遇到与字段、层次结构等相关的任何问题,请始终调试代码,它会让您清楚地了解数据是如何流动的。基于此,您可以创建自定义对象并继续。

    【讨论】:

    【解决方案2】:

    你必须先通过一跳查询获取任务列表,然后获取它的详细信息。

    TfsTeamProjectCollection TTPC = new TfsTeamProjectCollection(new Uri("http://xxx:8080/tfs/xxxCollection/"));
                WorkItemStore wis = TTPC.GetService<WorkItemStore>();
                string project = "projectname";
                string workitemid = "1";
                string wiql = $"SELECT [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags] FROM WorkItemLinks WHERE (Source.[System.TeamProject] = '{project}' and Source.[System.Id] = {workitemid}) and (Target.[System.TeamProject] = '{project}' and Target.[System.WorkItemType] = 'Task') ORDER BY [System.Id] mode(MustContain)";
                Query query = new Query(wis,wiql);
                WorkItemLinkInfo[] result = query.RunLinkQuery();
                List<WorkItem> tasks = new List<WorkItem> { };
                foreach (WorkItemLinkInfo wili in result)
                {
                    if (wili.SourceId == 0)
                    {
                        //Get the parent work item here.
                    }
                    else
                    {
                        //Get the details for the linked tasks and add to tasks list.
                        tasks.Add(wis.GetWorkItem(wili.TargetId));
                    }
                }
    

    【讨论】:

    • 我想知道一个ID是否通过c#代码获得了父ID?
    • @AkhilJain 如果 SouceID == 0,那么它没有父 ID。
    猜你喜欢
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多