You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Visual Studio扩展实现Azure DevOps工作项字段实时值自动复制?

实现Visual Studio中工作项字段实时复制的扩展方案

核心思路

通过Visual Studio扩展,借助Work Item Tracking客户端API监听字段的变更、失去焦点事件,实时读取源字段的当前输入值并写入目标字段,避开WITD whenchange 仅能读取保存前旧值的局限。

具体实现步骤

1. 创建Visual Studio扩展项目

  • 打开Visual Studio,创建Visual Studio Package项目(选择「Extensibility」分类下的模板)。
  • 引用必要程序集:
    • Microsoft.TeamFoundation.Client
    • Microsoft.TeamFoundation.WorkItemTracking.Client
    • Microsoft.VisualStudio.TeamFoundation.WorkItemTracking

2. 监听工作项加载事件

在Package类中注册工作项打开/编辑事件,获取当前工作项实例:

using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.TeamFoundation.WorkItemTracking;
using Microsoft.TeamFoundation.WorkItemTracking.Client;

public sealed class WorkItemFieldCopyExtension : Package
{
    protected override void Initialize()
    {
        base.Initialize();
        var witService = GetService<IWorkItemTrackingService>();
        witService.WorkItemOpened += OnWorkItemOpened;
    }

    private void OnWorkItemOpened(object sender, WorkItemEventArgs e)
    {
        RegisterFieldSyncHandlers(e.WorkItem);
    }
}

3. 绑定字段同步事件

针对目标工作项,监听源字段的值变更、失去焦点事件,完成实时复制:

private void RegisterFieldSyncHandlers(WorkItem workItem)
{
    // 替换为你的源、目标字段引用名
    const string SourceFieldRef = "System.Title";
    const string TargetFieldRef = "Custom.Description";

    // 监听字段值变更
    workItem.FieldChanged += (sender, e) =>
    {
        if (e.FieldReferenceName == SourceFieldRef)
        {
            var currentValue = workItem.Fields[SourceFieldRef].Value;
            workItem.Fields[TargetFieldRef].Value = currentValue;
        }
    };

    // 监听源字段控件失去焦点
    var formService = GetService<IWorkItemFormService>();
    var sourceControl = formService.GetControl(workItem.Id, SourceFieldRef);
    sourceControl?.LostFocus += (sender, e) =>
    {
        var currentValue = workItem.Fields[SourceFieldRef].Value;
        workItem.Fields[TargetFieldRef].Value = currentValue;
    };
}

4. 测试与部署

  • 按F5启动实验性Visual Studio实例,打开Team Explorer中的工作项验证同步效果。
  • 确认源字段值变更或失去焦点时,目标字段实时同步当前输入值。
  • 通过「Build」菜单的「Publish Extension」打包,部署到目标Visual Studio环境。

关键注意事项

  • 确保字段引用名(RefName)正确,可在Azure DevOps工作项类型定义中查看。
  • 验证用户对目标字段的修改权限,避免赋值失败。
  • 若目标字段也有变更监听,需添加逻辑防止循环触发同步。

内容的提问来源于stack exchange,提问作者Subrahmanya Bhat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:42:46