2017-08-16 1 views
0

J'ai une application ASP .NET MVC qui permet aux utilisateurs de créer des éléments de travail en appelant l'API. Après avoir créé l'élément de travail, je redirige vers une page qui affiche les éléments de travail actuels (un autre appel d'API). Toutefois, la demande d'API pour extraire les éléments de travail est traitée plus rapidement que la création de l'élément de travail, ce qui entraîne l'affichage de l'élément de travail qui vient d'être créé. J'utilise actuellement thread.sleep pour les tests, mais je voudrais des conseils sur la bonne façon de gérer cela.Team Services - La création d'éléments de travail via l'API prend plus de temps que la récupération des éléments de travail courants

Ceci est mon bouton action initiée par le soumettre contrôleur après avoir créé un élément de travail

WICreator addNewWI = new WICreator(); 
addNewWI.CreateWorkItem(model.SystemTitle, model.SystemDescription); 
Thread.Sleep(2000); 
return RedirectToAction("WorkItems", "Home"); 

Et voici l'appel à l'API pour créer un élément de travail

public void CreateWorkItem(string title, string description) 
    { 
     string personalAccessToken = "xxx" 
     string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "xxx", personalAccessToken))); 
     string project = "xx" 
     string path = "xx" 

     Object[] patchDocument = new Object[3]; 
     patchDocument[0] = new { op = "add", path = "/fields/System.Title", value = title }; 
     patchDocument[1] = new { op = "add", path = "/fields/System.AreaPath", value = path }; 
     patchDocument[2] = new { op = "add", path = "/fields/System.Description", value = description }; 

     using (var client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials); 

      var patchValue = new StringContent(JsonConvert.SerializeObject(patchDocument), Encoding.UTF8, "application/json-patch+json"); 

      var method = new HttpMethod("PATCH"); 
      var request = new HttpRequestMessage(method, "https://xx.xx.com/xx/_apis/wit/workitems/xxxapi-version=1.0") { Content = patchValue }; 
      var response = client.SendAsync(request).Result; 

      if (response.IsSuccessStatusCode) 
      { 
       var result = response.Content.ReadAsStringAsync().Result; 
      } 
     } 
    } 
+0

Vous devez montrer le code pour WICreator –

+0

@ScottChamberlain mis à jour avec la méthode –

Répondre

0

La réponse de création d'emplois item contient les informations nécessaires pour un nouvel item de travail, donc un workflow simple pour traiter ce problème est:

  1. Enregistrer la réponse de la création d'élément de travail à un objet et envoyer à l'action en utilisant TempData
  2. récupérer des éléments de travail de serveur
  3. Vérifiez TempData est nulle ou non
  4. Vérifiez s'il y a le même ID d'élément de travail dans le résultat de l'étape 2 si TeamData a une valeur
  5. Si pas les mêmes données dans le résultat de l'étape 2, ajouter les données de TempData au modèle qui passe pour voir
+0

E Xactly ce dont j'avais besoin. Je vous remercie! –