【问题标题】:Programatically forcing field values for a TFS WorkItem以编程方式强制 TFS 工作项的字段值
【发布时间】:2019-02-14 23:40:45
【问题描述】:

我正在编写一个实用程序来读取遗留错误跟踪系统中的所有缺陷,并将它们导入 TFS (2008/2010)。我正在使用 TFS API 创建新的 WorkItems,设置它们的字段,然后保存它们。但是我无法修改“创建者”和“创建日期”字段,因为它们是由系统设置的。 (还有其他字段我希望能够为其强制值,例如将提交者设置为不是有效 TFS 用户的人)

// these fail with "The value for the field 'Created By' cannot be changed."
defectWorkItem.Fields["Created By"].Value = defect.Submitter;
defectWorkItem.Fields["Created Date"].Value = defect.SubmitDate;

很明显,如果我不能设置这些字段,我最终会发现所有遗留错误看起来像是同一个人在同一日期创建的。

有没有一种方法可以使用 API,但强制更改通常受保护的字段?我已经研究过直接访问 TFS 数据库表,但架构看起来很复杂,我认为尝试自己修改那里的数据会很冒险。

【问题讨论】:

    标签: c# tfs tfs-sdk workitem


    【解决方案1】:

    如果您是服务帐户并打开绕过规则功能,则允许您设置 Created DateCreated By 字段。

    您可以在创建WorkItemStore 类的实例时选择绕过规则,方法是使用此标志:WorkItemStoreFlags.BypassRules

    请注意,您只能为工作项的第一次修订设置这些字段。

    【讨论】:

    • 谢谢,这听起来正是我所需要的。如果我可以让它工作,我会尝试并将其标记为答案
    • 你知道这个标志是否是 TFS 2012 的新标志吗?它不在以前版本的库中。
    • 我一直在尝试这个,有点奇怪。首先,您不能在第一次保存时设置这些字段,只能在后续保存时设置。其次,它不会让我更改 System.CreatedBy,即使我可以使用这种技术更改 System.CreatedDate 和 Microsoft.VSTS.Common.ActivatedDate。
    • Created By 如您所说,在第一次修订后无法通过这种方式更改。 (错误:TF26194:“创建者”字段的值无法更改)有什么解决方案吗?
    【解决方案2】:

    只是一个建议:在迁移时在工作项描述的开头插入此文本:

    • 从系统 XXX 迁移
    • 原创创作日期:2012年1月1日
    • 原创作者:John Doe

    【讨论】:

    • 是的,如果我根本无法修改创建的日期,我会这样做,但这意味着人们无法使用他们习惯于旧系统的查询跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多