WIQL查询不包括" System.AssignedTo"领域

时间:2017-01-26 21:07:34

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

我有这个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>();
  }

但是&#34; AssignedTo&#34;和&#34;描述&#34;字段未显示在工作项中&#39;字典字段集。为什么会这样,我该如何解决这个问题呢?

2 个答案:

答案 0 :(得分:2)

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

POST /test/name/_search
{
  "query": {
    "match": {
      "vital.full_name": {          <-- fix this
        "query": "Tom Doe",
        "operator": "and"
      }
    }
  }
}

POST /test/name/_search
{
  "query": {
    "match": {
      "vital.full_name": {          <-- fix this
        "query": "Tom Do",
        "operator": "and"
      }
    }
  }
}

答案 1 :(得分:0)

查询结果将只包含非空字段,即没有人分配给工作项,该字段根本不在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);

            }