VSTS创建新工作项

5

我正在使用VSTS REST API并尝试创建一个新的WorkItem。但是我只能从VSTS获取现有的WorkItem并更新该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);

但是我如何创建一个新的工作项并上传它呢?
4个回答

6

你离正确答案很近。你需要调用UpdateWorkItemTemplateAsync而不是UpdateWorkItemAsync。

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;

这肯定是方法命名不当的问题,但是文档显示,“创建工作项”是针对项目范围内的WorkItemType的PATCH操作,似乎被映射到UpdateWorkItemTemplateAsync()。 - daveidmx
方法 'Microsoft.TeamFoundation.WorkItemTracking.WebApi.WorkItemTrackingHttpClientBase.UpdateWorkItemTemplateAsync' 已过时:'请改用 CreateWorkItem'。 - Rob Johnston

4
似乎他们忘记了CreateWorkItemAsync方法。所有其他更新方法都有相应的创建方法。 为了创建工作项,您可以使用以下代码片段。
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。使用它来提取新项的id。

1
CreateWorkItemAsync()方法在.NET客户端REST API的预发布版本中可用。截至2016年1月27日,该版本为14.92.1-preview。因此,您可以使用以下命令进行安装:Install-Package Microsoft.TeamFoundationServer.Client -Pre - bpsilver

1
从v16.135.0开始(可能更早),WorkItemTrackingHttpClient对象上有一个CreateWorkItemAsync方法。
    //
    // Summary:
    //     [Preview API] Creates a single work item.
    //
    // Parameters:
    //   document:
    //     The JSON Patch document representing the work item
    //
    //   project:
    //     Project ID
    //
    //   type:
    //     The work item type of the work item to create
    //
    //   validateOnly:
    //     Indicate if you only want to validate the changes without saving the work item
    //
    //   bypassRules:
    //     Do not enforce the work item type rules on this update
    //
    //   suppressNotifications:
    //     Do not fire any notifications for this change
    //
    //   userState:
    //
    //   cancellationToken:
    //     The cancellation token to cancel operation.
    public virtual Task<WorkItem> CreateWorkItemAsync(JsonPatchDocument document, Guid project, String type, Boolean? validateOnly = null, Boolean? bypassRules = null, Boolean? suppressNotifications = null, Object userState = null, CancellationToken cancellationToken = default(CancellationToken));

1

是的,我尝试使用“添加”操作,但在VSTS中没有创建新的WorkItem。 - Thomas Gassmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接