0
votes

Impossible d'accéder au champ attribué au champ d'un élément de travail DevOps Azure

Je crée une application de console dans Visual Studio pour obtenir les détails de l'élément de travail à partir d'un projet Azure Devops. Je ne suis pas en mesure d'accéder au champ code> attribué code> d'un élément de travail.

J'ai essayé d'utiliser le code dans Microsoft Page pour interroger des éléments de travail avec quelques modifications et son affichage d'une exception lorsque j'essaie d'accéder au champ attribué code>. p>

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"]);
             }

          }
       }
    }
}


2 commentaires

Pouvez-vous masquer votre tapot, pas une bonne idée de la mettre en ligne avec tout le monde pour voir


C'est un chemin invalide.


3 Réponses :


0
votes

C'est parce que lorsque vous obtenez les éléments de travail que vous spécifiez champs = null code>.

Vous devez simplement donner l'identifiant sans aucun paramètre supplémentaire: p>

var workItems = workItemTrackingHttpClient.GetWorkItemsAsync(arr).Result;


1 commentaires

Toujours la même exception et le code ci-dessus dans la question est capable d'imprimer d'autres champs si je retire le champ attribué au champ.



0
votes

C'était le nouveau code:

vide statique principal (chaîne [] arg. { xxx


0 commentaires

0
votes

system.collections.generic.keynotfoundexception sera jeté si le champ attribué au champ n'est pas attribué.

Vérifiez si le champ attribué au champ est attribué dans l'élément de travail interrogé.

Votre code est correct, sauf que je ne peux pas compiler workitemquereryresult.workitemsul.orkitems.count () , je l'ai jeté à Ilist <> ((IList ) WorkitemquereryResult.workitems) .Count ()

 Entrez la description de l'image ici


5 commentaires

Oui, l'exception est partie après que j'ai changé un élément de travail affecté au champ de non assigné. Mais je reçois une référence dans la sortie de la console au lieu du nom d'affichage ou que l'élément de travail est attribué. Je reçois Microsoft.Visualstudio.Services.webapi.ididentityRef


Vous devez la convertir en premier. Par exemple: Jobject Identity = Jobject.fromObject (Workitem.fields ["System.Assignedto"]); Console.writeline (identité ["displayName"]);


Merci, ça a fonctionné. Y a-t-il de toute façon que je puisse inclure le domaine attribué si les workitems ne sont pas affectés


Je crains que cela ne puisse être fait que dans le code. Le code ci-dessous est par exemple


workitem.fields.justergevalue ("system.assignedto", out objet identiquementojbect); if (identityojbect == null) {identityojbect = nouveau {displayName = "non assigné"}; } Identité jobject = jobject.fromObject (identityojbect); Console.writeline ("{0} {1} {2}", workitem.id, workitem.fields ["system.title], identité [" displayName "]);