2016-01-15 3 views
4

Я использую API VSTS REST, и я пытаюсь создать новый WorkItem. Но я могу получить существующий WorkItem из VSTS и обновить WorkItem.VSTS Создать новый WorkItem

 var listDoNotUpdate = new List<string>(); 
     listDoNotUpdate.Add("System.BoardColumn"); 
     listDoNotUpdate.Add("System.BoardColumnDone"); 
     var wi = await this.Client.GetWorkItemAsync(4000); 
     wi.Fields["System.Title"] = "Test"; 
     wi.Fields["System.Description"] = "Test"; 
     wi.Fields["Microsoft.VSTS.Common.AcceptanceCriteria"] = "Test"; 
     var doc = new JsonPatchDocument(); 
     foreach (var field in wi.Fields) 
     { 
      if (!listDoNotUpdate.Contains(field.Key)) 
      { 
       doc.Add(new JsonPatchOperation 
       { 
        Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Replace, 
        Path = string.Concat("/fields/", field.Key), 
        Value = field.Value 
       }); 
      } 
     } 

     await this.Client.UpdateWorkItemAsync(doc, 4000); 

Но как я могу создать новый WorkItem и загрузить его?

ответ

2

Кажется, они забыли метод CreateWorkItemAsync. Все другие методы обновления имеют соответствующий метод Create. Чтобы создать элемент работы в любом случае, вы можете использовать следующий фрагмент

var client = new RestClient(string.Format(
    CultureInfo.InvariantCulture, 
    "https://{0}.visualstudio.com/defaultcollection/{1}/_apis/", 
    "<vstsAccount>", 
    "<project>")); 
client.Authenticator = new HttpBasicAuthenticator("accessToken", "<accessToken>"); 
var json = @"[{'op': 'add','path': '/fields/System.Title','value': 'Title of your work item'}]"; 
var request = new RestRequest("wit/workitems/$Product Backlog Item?api-version=1.0", Method.PATCH); 
request.AddParameter("application/json-patch+json", json, ParameterType.RequestBody); 
request.AddHeader("Accept", "application/json"); 
var response = client.Execute(request); 

Ответ будет содержать JSON нового элемента работы. Используйте его для извлечения идентификатора нового элемента.

+1

'CreateWorkItemAsync()' доступен в предварительной версии .NET-клиента для REST API. По состоянию на 1/27/16, это версия 14.92.1-preview. Итак: 'Install-Package Microsoft.TeamFoundationServer.Client -Pre' – bpsilver

4

Вы близко. Вместо вызова UpdateWorkItemAsync вам необходимо вызвать UpdateWorkItemTemplateAsync.

var collectionUri = "https://{account}.visualstudio.com"; 
var teamProjectName = "{project}"; 
var workItemType = "{workItemType}"; 
var client = new WorkItemTrackingHttpClient(new Uri(collectionUri), new VssClientCredentials()); 

var document = new JsonPatchDocument(); 
document.Add(
    new JsonPatchOperation() 
    { 
     Path = "/fields/System.Title", 
     Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add, 
     Value = "Title" 
    }); 

var wi = client.UpdateWorkItemTemplateAsync(
    document, 
    teamProjectName, 
    workItemType).Result; 
+0

Это случай слабо названных методов, но да [doc] (https://www.visualstudio.com/integrate/api/wit/work -items) показывает, что «create work item» - это PATCH в отношении объекта WorkItemType в области Project, который, как представляется, сопоставляется с UpdateWorkItemTemplateAsync(). – daveidmx

Смежные вопросы