【问题标题】:WIQL Query not including "System.AssignedTo" FieldWIQL 查询不包括“System.AssignedTo”字段
【发布时间】:2017-06-12 11:41:27
【问题描述】:

我有这个 WIQL,它的目的是找到分配给工作项的用户。

var wiql = string.Format("SELECT [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State]" +
                           " FROM WorkItems" +
                           " WHERE ([System.TeamProject] = '{0}')" +
                           " AND ([System.WorkItemType] = 'Task' OR [System.WorkItemType] = 'Bug')" + 
                           " ORDER BY [System.Id]", projectName);

我正在执行它......

Wiql wiql = new Wiql() { Query = wiqlQueryString };

  using (var workItemTrackingHttpClient = new WorkItemTrackingHttpClient(VstsAccess.AccessUri, VstsAccess.AccessCredentials))
  {
    var workItemQueryResult = workItemTrackingHttpClient.QueryByWiqlAsync(wiql).Result;

    if (workItemQueryResult != null && workItemQueryResult.WorkItemRelations.Any())
    {
      List<int> sourceIdList = new List<int>();
      foreach (var item in workItemQueryResult.WorkItemRelations)
        sourceIdList.Add(item.Target.Id);

      int[] arr = sourceIdList.ToArray();
      string[] fields = { "System.Id", "System.WorkItemType", "System.AssignedTo", "System.Title", "System.Description", "System.State", "System.IterationPath", "System.TeamProject", "System.ChangedDate", "System.ChangedBy", "System.CreatedDate" };
      return workItemTrackingHttpClient.GetWorkItemsAsync(arr, fields, workItemQueryResult.AsOf).Result;
    }
    else
      return new List<WorkItem>();
  }

但“AssignedTo”和“Description”字段未显示在工作项的字典字段集中。为什么会这样,我该如何解决?

【问题讨论】:

    标签: c# .net tfs wiql azure-devops-rest-api


    【解决方案1】:

    查询结果将仅包含非空字段,即没有人分配给工作项,该字段根本不会在Fields 字典中。

    您需要对这些字段实施自定义检查,并根据您的逻辑将它们分配给某些东西:

                int[] arr = ids.ToArray();
    
                string[] fields = new string[] {
                    "System.Id", 
                    "System.Title",
                    "System.State",
                    "System.AssignedTo"
                };
    
                var workItems = await workItemTrackingHttpClient.GetWorkItemsAsync(arr, fields, workItemQueryResult.AsOf);
    
                List<WorkItemData> list = new List<WorkItemData>();
    
                foreach (var workItem in workItems)
                {
                    var wi = new WorkItemData(workItem.Id.Value);
    
                    wi.Title = workItem.Fields["System.Title"].ToString();
                    wi.State = workItem.Fields["System.State"].ToString();
                    wi.AssignedTo = workItem.Fields.ContainsKey("System.AssignedTo") ? workItem.Fields["System.AssignedTo"].ToString() : "";
    
                    list.Add(wi);
    
                }
    

    【讨论】:

      【解决方案2】:

      您可以使用下面的代码查询工作项,它具有“AssignedTo”和“Description”字段值。

      WorkItemStore workItemStore = teamProjectCollection.GetService<WorkItemStore>();
      string queryString = string.Format("SELECT [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State]" +
                                 " FROM WorkItems" +
                                 " WHERE ([System.TeamProject] = '{0}')" +
                                 " AND ([System.WorkItemType] = 'Task' OR [System.WorkItemType] = 'Bug')" +
                                 " ORDER BY [System.Id]", "Mtt-Scrum"); ;
      
      // Create and run the query.
      Query query = new Query(workItemStore, queryString);
      WorkItemCollection witCollection = query.RunQuery();
      
      foreach (Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem workItem in witCollection)
      {
          ......
      }
      

      【讨论】:

      • 这几乎一直有效!我希望得到包含在其中的电子邮件?我怎么能那样做?我需要一个唯一标识符来准确区分案例的分配和创建者,而不仅仅是显示名称。
      猜你喜欢
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      相关资源
      最近更新 更多