azure-devops - 使用 .NET API 在 Azure DevOps 中批量创建许多工作项时出现错误 VS403357
问题描述
我正在尝试使用 Azure DevOps .NET API 在 AzureDevOps 存储库中批量创建 WorkItem,但是当我提交批处理请求时,我收到一条错误消息:“VS403357:批处理中的工作项预计为唯一,但在多个请求中找到 ID 为 -1 的工作项。”
这是我的代码:
public void ExecuteWorkItemMigration(int[] workItemIds, IProgress<ProgressResult> progress = null)
{
var wiql = "SELECT * FROM WorkItems";
var query = new Query(_workItemStore, wiql, workItemIds);
var workItemCollection = query.RunQuery();
string projectName = MainSettings.AzureDevOpsSettings.ProjectName;
List<WitBatchRequest> batchRequests = new List<WitBatchRequest>();
foreach (WorkItemTfs tfsWorkItem in workItemCollection)
{
JsonPatchDocument document = CreateJsonPatchDocument(tfsWorkItem);
string workItemType = GetWorkItemType(tfsWorkItem);
WitBatchRequest wibr = _azureDevopsWorkItemTrackingClient.CreateWorkItemBatchRequest(projectName, workItemType,
document, true, true);
batchRequests.Add(wibr);
}
List<WitBatchResponse> results = _azureDevopsWorkItemTrackingClient.ExecuteBatchRequest(batchRequests).Result;
}
private static JsonPatchDocument CreateJsonPatchDocument(WorkItemTfs tfsWorkItem, int id = -1)
{
var document = new JsonPatchDocument();
document.Add(
new JsonPatchOperation
{
Path = "/id",
Operation = Operation.Add,
Value = id
});
document.Add(
new JsonPatchOperation
{
Path = "/fields/System.Title",
Operation = Operation.Add,
Value = tfsWorkItem.Title
});
if (tfsWorkItem.Fields.Contains("ReproSteps"))
document.Add(
new JsonPatchOperation
{
Path = "/fields/Microsoft.VSTS.TCM.ReproSteps",
Operation = Operation.Add,
Value = tfsWorkItem.Fields["ReproSteps"].Value
});
}
关于我需要做什么才能使其正常工作的任何建议?我曾尝试提交不同的唯一 ID,但似乎并不能阻止错误的发生。
解决方案
您需要使用唯一的否定ID 来创建 WorkItem ID。
像这样的东西:
public void ExecuteWorkItemMigration(int[] workItemIds, IProgress<ProgressResult> progress = null)
{
var wiql = "SELECT * FROM WorkItems";
var query = new Query(_workItemStore, wiql, workItemIds);
var workItemCollection = query.RunQuery();
string projectName = MainSettings.AzureDevOpsSettings.ProjectName;
List<WitBatchRequest> batchRequests = new List<WitBatchRequest>();
int id = -1;
foreach (WorkItemTfs tfsWorkItem in workItemCollection)
{
JsonPatchDocument document = CreateJsonPatchDocument(tfsWorkItem, id--);
string workItemType = GetWorkItemType(tfsWorkItem);
WitBatchRequest wibr = _azureDevopsWorkItemTrackingClient.CreateWorkItemBatchRequest(projectName, workItemType,
document, true, true);
batchRequests.Add(wibr);
}
List<WitBatchResponse> results = _azureDevopsWorkItemTrackingClient.ExecuteBatchRequest(batchRequests).Result;
}
推荐阅读
- ubuntu - Ubuntu 上的 Nuxt.js:找不到插件 app/.nuxt/components/plugin.js
- visual-studio-code - 打开vscode时如何保持所有文件夹折叠?
- flutter - 你能在飞镖中制作一个多值对象类型的地图吗
- java - wait() 是否释放所有锁?
- angular - 错误类型错误:无法读取 SafeSubscriber.settingsService.create.subscribe.loading [as _next] 处未定义的属性“重置”
- google-apps-script - 遍历工作表中的行并比较另一个工作表中的值
- reactjs - 输入'号码 | {百分比:数字;}' 不可分配给类型 'string | 号码 | 未定义的 ts(2322)
- ethereum - 如果我的互联网在合约部署期间中断,会发生什么?我还会失去汽油费吗?
- minio - 无法将 sklearn 模型记录到 minio (s3) 服务器
- node.js - 如何通过集群分发在node js中订阅websocket接收到的信息?