public async Task Create(AzureDevOpsWorkItem azureDevOpsWorkItem, CancellationToken cancellationToken) { azureDevOpsWorkItem.Files ??= new File[0]; var attachments = new List <AttachmentReference>(azureDevOpsWorkItem.Files.Length); foreach (var file in azureDevOpsWorkItem.Files) { if (file.Data.CanSeek) { file.Data.Seek(0, SeekOrigin.Begin); } var requestAttachment = await WorkItemTrackingHttpClient.CreateAttachmentAsync( file.Data, fileName : file.Name, project : azureDevOpsWorkItem.Project, cancellationToken : cancellationToken); attachments.Add(requestAttachment); await file.Data.DisposeAsync(); } var jsonPatchDocument = new JsonPatchDocument(); jsonPatchDocument.AddRange(azureDevOpsWorkItem.GetFields().Select(x => new JsonPatchOperation { Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add, Path = x.field, From = null, Value = x.value })); jsonPatchDocument.AddRange(attachments.Select(x => new JsonPatchOperation { Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add, Path = "/relations/-", From = null, Value = new { Rel = "AttachedFile", x.Url } })); Options.Value.OnBeforeSend?.Invoke(ServiceProvider, azureDevOpsWorkItem); var workItem = await WorkItemTrackingHttpClient.CreateWorkItemAsync(jsonPatchDocument, azureDevOpsWorkItem.Project, azureDevOpsWorkItem.Type, cancellationToken : cancellationToken); azureDevOpsWorkItem.Url = new Uri(workItem.Url); Options.Value.OnAfterSend?.Invoke(ServiceProvider, azureDevOpsWorkItem); }
public AzureDevOpsWorkItem MaterializeToBug() { var azureDevOpsWorkItem = new AzureDevOpsWorkItem { Project = Project, Type = "Bug", Files = Files.ToArray() }; azureDevOpsWorkItem.SetProperty("/fields/System.Title", Title); azureDevOpsWorkItem.SetProperty("/fields/Microsoft.VSTS.TCM.ReproSteps", DescriptionBuilder.ToString()); if (Tags != null) { azureDevOpsWorkItem.SetProperty("/fields/System.Tags", String.Join(",", Tags)); } return(azureDevOpsWorkItem); }