无法访问 Azure DevOps 工作项的分配给字段
Not able to access the Assigned To field of a Azure DevOps Work Item
我正在 visual studio 中创建控制台应用程序以从 Azure DevOps 项目获取工作项详细信息。我无法访问工作项的 AssignedTo
字段。
我尝试使用 Microsoft 页面中的代码来查询有一些更改的工作项,但当我尝试访问 AssignedTo
字段时它显示异常。
static void Main(string[] args)
{
string _uri = "https://dev.azure.com/xyz";
string _personalAccessToken =
"xpdrix7nyspotj3l4gotvvk4cpp2z6l65g5r";
string _project = "FirstProject";
Uri uri = new Uri(_uri);
string personalAccessToken = _personalAccessToken;
string project = _project;
VssBasicCredential credentials = new VssBasicCredential("",
_personalAccessToken);
//create a wiql object and build our query
Wiql wiql = new Wiql()
{
Query = "Select *" +
"From WorkItems " +
"Where [System.TeamProject] = '" + project + "' " +
"Order By [State] Asc, [Changed Date] Desc"
};
//create instance of work item tracking http client
sing (WorkItemTrackingHttpClient workItemTrackingHttpClient =
new WorkItemTrackingHttpClient(uri, credentials))
{
//execute the query to get the list of work items in the results
WorkItemQueryResult workItemQueryResult =
workItemTrackingHttpClient.QueryByWiqlAsync(wiql).Result;
//some error handling
if (workItemQueryResult.WorkItems.Count() != 0)
{
//need to get the list of our work item id's and put them
//into an array
List<int> list = new List<int>();
foreach (var item in workItemQueryResult.WorkItems)
{
list.Add(item.Id);
}
int[] arr = list.ToArray();
//build a list of the fields we want to see
string[] fields = new string[3];
fields[0] = "System.Id";
fields[1] = "System.Title";
fields[2] = "System.AssignedTo";
WorkItemExpand workItemExpand = WorkItemExpand.All;
//get work items for the id's found in query
var workItems =
workItemTrackingHttpClient.GetWorkItemsAsync(arr, fields=null, workItemQueryResult.AsOf,workItemExpand).Result;
Console.WriteLine("Query Results: {0} items found", workItems.Count);
//loop though work items and write to console
foreach (var workItem in workItems)
{
Console.WriteLine("{0}{1}{2}", workItem.Id, workItem.Fields["System.Title"], workItem.Fields["System.AssignedTo"]);
}
}
}
}
}
错误是:
System.Collections.Generic.KeyNotFoundException
HResult=0x80131577
Message=The given key was not present in the dictionary.
Source=mscorlib
StackTrace:
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at ScrumBoard.Program.Main(String[] args) in
C:\Users\Naresh\source\repos\ScrumBoard\ScrumBoard\Program.cs:line 84
这是因为您在获取工作项时指定了fields = null
。
您只需提供 ID,无需任何其他参数:
var workItems = workItemTrackingHttpClient.GetWorkItemsAsync(arr).Result;
现在您将获得所有字段,包括 System.AssignedTo
。
这是新代码:
static void Main(string[] arg
{
string _uri = "https://dev.azure.com/xyz";
string _personalAccessToken =
"xpdrix7nyspotj3l4gotvvk4cpp2z6l65g5rd4pfbrl7nskq";
string _project = "FirstProject";
/// <summary>
/// Execute a WIQL query to reutnr a list of bugs using the .NET client library
/// </summary>
/// <returns>List of Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem</returns>
Uri uri = new Uri(_uri);
string personalAccessToken = _personalAccessToken;
string project = _project;
VssBasicCredential credentials = new VssBasicCredential("", _personalAccessToken);
//create a wiql object and build our query
Wiql wiql = new Wiql()
{
Query = "Select *" +
"From WorkItems " +
"Where [System.TeamProject] = '" + project + "' " +
"Order By [State] Asc, [Changed Date] Desc"
};
//create instance of work item tracking http client
using (WorkItemTrackingHttpClient workItemTrackingHttpClient = new WorkItemTrackingHttpClient(uri, credentials))
{
//execute the query to get the list of work items in teh results
WorkItemQueryResult workItemQueryResult = workItemTrackingHttpClient.QueryByWiqlAsync(wiql).Result;
//some error handling
if (workItemQueryResult.WorkItems.Count() != 0)
{
//need to get the list of our work item id's and put them into an array
List<int> list = new List<int>();
foreach (var item in workItemQueryResult.WorkItems)
{
list.Add(item.Id);
}
int[] arr = list.ToArray();
//get work items for the id's found in query
var workItems = workItemTrackingHttpClient.GetWorkItemsAsync(arr).Result;
Console.WriteLine("Query Results: {0} items found", workItems.Count);
//loop though work items and write to console
foreach (var workItem in workItems)
{
Console.WriteLine("{0} {1} {2}", workItem.Id, workItem.Fields["System.Title"], workItem.Fields["System.AssignedTo"]);
}
}
}
Console.ReadLine();
}
System.Collections.Generic.KeyNotFoundException
如果 assigned to
字段未分配,将抛出异常。
请检查您查询的工作项中是否分配了 assigned to
字段。
你的代码没问题,除了我无法编译 workItemQueryResult.WorkItems.Count()
,我将它转换为 IList<>。 ((IList<WorkItemReference>)workItemQueryResult.WorkItems).Count()
我正在 visual studio 中创建控制台应用程序以从 Azure DevOps 项目获取工作项详细信息。我无法访问工作项的 AssignedTo
字段。
我尝试使用 Microsoft 页面中的代码来查询有一些更改的工作项,但当我尝试访问 AssignedTo
字段时它显示异常。
static void Main(string[] args)
{
string _uri = "https://dev.azure.com/xyz";
string _personalAccessToken =
"xpdrix7nyspotj3l4gotvvk4cpp2z6l65g5r";
string _project = "FirstProject";
Uri uri = new Uri(_uri);
string personalAccessToken = _personalAccessToken;
string project = _project;
VssBasicCredential credentials = new VssBasicCredential("",
_personalAccessToken);
//create a wiql object and build our query
Wiql wiql = new Wiql()
{
Query = "Select *" +
"From WorkItems " +
"Where [System.TeamProject] = '" + project + "' " +
"Order By [State] Asc, [Changed Date] Desc"
};
//create instance of work item tracking http client
sing (WorkItemTrackingHttpClient workItemTrackingHttpClient =
new WorkItemTrackingHttpClient(uri, credentials))
{
//execute the query to get the list of work items in the results
WorkItemQueryResult workItemQueryResult =
workItemTrackingHttpClient.QueryByWiqlAsync(wiql).Result;
//some error handling
if (workItemQueryResult.WorkItems.Count() != 0)
{
//need to get the list of our work item id's and put them
//into an array
List<int> list = new List<int>();
foreach (var item in workItemQueryResult.WorkItems)
{
list.Add(item.Id);
}
int[] arr = list.ToArray();
//build a list of the fields we want to see
string[] fields = new string[3];
fields[0] = "System.Id";
fields[1] = "System.Title";
fields[2] = "System.AssignedTo";
WorkItemExpand workItemExpand = WorkItemExpand.All;
//get work items for the id's found in query
var workItems =
workItemTrackingHttpClient.GetWorkItemsAsync(arr, fields=null, workItemQueryResult.AsOf,workItemExpand).Result;
Console.WriteLine("Query Results: {0} items found", workItems.Count);
//loop though work items and write to console
foreach (var workItem in workItems)
{
Console.WriteLine("{0}{1}{2}", workItem.Id, workItem.Fields["System.Title"], workItem.Fields["System.AssignedTo"]);
}
}
}
}
}
错误是:
System.Collections.Generic.KeyNotFoundException HResult=0x80131577 Message=The given key was not present in the dictionary. Source=mscorlib StackTrace: at System.Collections.Generic.Dictionary`2.get_Item(TKey key) at ScrumBoard.Program.Main(String[] args) in C:\Users\Naresh\source\repos\ScrumBoard\ScrumBoard\Program.cs:line 84
这是因为您在获取工作项时指定了fields = null
。
您只需提供 ID,无需任何其他参数:
var workItems = workItemTrackingHttpClient.GetWorkItemsAsync(arr).Result;
现在您将获得所有字段,包括 System.AssignedTo
。
这是新代码:
static void Main(string[] arg
{
string _uri = "https://dev.azure.com/xyz";
string _personalAccessToken =
"xpdrix7nyspotj3l4gotvvk4cpp2z6l65g5rd4pfbrl7nskq";
string _project = "FirstProject";
/// <summary>
/// Execute a WIQL query to reutnr a list of bugs using the .NET client library
/// </summary>
/// <returns>List of Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem</returns>
Uri uri = new Uri(_uri);
string personalAccessToken = _personalAccessToken;
string project = _project;
VssBasicCredential credentials = new VssBasicCredential("", _personalAccessToken);
//create a wiql object and build our query
Wiql wiql = new Wiql()
{
Query = "Select *" +
"From WorkItems " +
"Where [System.TeamProject] = '" + project + "' " +
"Order By [State] Asc, [Changed Date] Desc"
};
//create instance of work item tracking http client
using (WorkItemTrackingHttpClient workItemTrackingHttpClient = new WorkItemTrackingHttpClient(uri, credentials))
{
//execute the query to get the list of work items in teh results
WorkItemQueryResult workItemQueryResult = workItemTrackingHttpClient.QueryByWiqlAsync(wiql).Result;
//some error handling
if (workItemQueryResult.WorkItems.Count() != 0)
{
//need to get the list of our work item id's and put them into an array
List<int> list = new List<int>();
foreach (var item in workItemQueryResult.WorkItems)
{
list.Add(item.Id);
}
int[] arr = list.ToArray();
//get work items for the id's found in query
var workItems = workItemTrackingHttpClient.GetWorkItemsAsync(arr).Result;
Console.WriteLine("Query Results: {0} items found", workItems.Count);
//loop though work items and write to console
foreach (var workItem in workItems)
{
Console.WriteLine("{0} {1} {2}", workItem.Id, workItem.Fields["System.Title"], workItem.Fields["System.AssignedTo"]);
}
}
}
Console.ReadLine();
}
System.Collections.Generic.KeyNotFoundException
如果 assigned to
字段未分配,将抛出异常。
请检查您查询的工作项中是否分配了 assigned to
字段。
你的代码没问题,除了我无法编译 workItemQueryResult.WorkItems.Count()
,我将它转换为 IList<>。 ((IList<WorkItemReference>)workItemQueryResult.WorkItems).Count()