1

我们正在尝试将工作项从 TFS 2010 导入到 2012。我们在所有工作项类型的字段中定义了 2 个自定义字段,称为“旧版创建日期”和“旧版更改日期”。我们必须为创建日期和更改日期创建这两个字段的原因是因为迁移后,创建日期和更改日期更改为迁移时间,并且旧的创建/更改日期丢失。我们还在迁移 xml 中包含了这两个字段,如下所示:

所有工作项类型都包含上述 2 个语句。无论我们尝试什么,这两个字段在迁移后都是空的。

我们确认 2 个自定义文件在工作项类型模板中可用 [通过使用 TFS 电动工具并从服务器打开 WIT]

有什么帮助吗?谢谢!

***更新 - 整个映射 XML * ***

<SettingXml>
<WITSessionCustomSetting>
  <Settings />
  <WorkItemTypes>
    <WorkItemType LeftWorkItemTypeName="User Story" RightWorkItemTypeName="Product Backlog Item" fieldMap="UserStoryToProductBacklogItemFieldMap" />
  </WorkItemTypes>
  <FieldMaps>
    <FieldMap name="UserStoryToProductBacklogItemFieldMap">
      <MappedFields>
        <MappedField MapFromSide="Left" LeftName="System.CreatedDate" RightName="Contoso.Field.LegacyCreatedDate" />
        <MappedField MapFromSide="Left" LeftName="System.ChangedDate" RightName="Contoso.Field.LegacyChangedDate" />
        <MappedField MapFromSide="Left" LeftName="System.AreaPath" RightName="System.AreaPath" />
        <MappedField MapFromSide="Left" LeftName="System.AssignedTo" RightName="System.AssignedTo" />
        <MappedField MapFromSide="Left" LeftName="System.AttachedFileCount" RightName="System.AttachedFileCount" />
        <MappedField MapFromSide="Left" LeftName="System.AuthorizedAs" RightName="System.AuthorizedAs" />
        <MappedField MapFromSide="Left" LeftName="System.ChangedBy" RightName="System.ChangedBy" />
        <MappedField MapFromSide="Left" LeftName="Microsoft.VSTS.Common.ClosedDate" RightName="Microsoft.VSTS.Common.ClosedDate" />
        <MappedField MapFromSide="Left" LeftName="Contoso.Field.Contact" RightName="Contoso.Field.Contact" />
        <MappedField MapFromSide="Left" LeftName="System.CreatedBy" RightName="System.CreatedBy" />
        <MappedField MapFromSide="Left" LeftName="Contoso.Field.CustomerName" RightName="Contoso.Field.CustomerName" />
        <MappedField MapFromSide="Left" LeftName="System.Description" RightName="System.Description" />
        <MappedField MapFromSide="Left" LeftName="Contoso.Field.DocSourceUpdateRequired" RightName="Contoso.Field.DocSourceUpdateRequired" />
        <MappedField MapFromSide="Left" LeftName="System.ExternalLinkCount" RightName="System.ExternalLinkCount" />
        <MappedField MapFromSide="Left" LeftName="System.History" RightName="System.History" />
        <MappedField MapFromSide="Left" LeftName="System.HyperLinkCount" RightName="System.HyperLinkCount" />
        <MappedField MapFromSide="Left" LeftName="Microsoft.VSTS.Build.IntegrationBuild" RightName="Microsoft.VSTS.Build.IntegrationBuild" />
        <MappedField MapFromSide="Left" LeftName="Contoso.Field.InternalProduct" RightName="Contoso.Field.InternalProduct" />
        <MappedField MapFromSide="Left" LeftName="System.IterationId" RightName="System.IterationId" />
        <MappedField MapFromSide="Left" LeftName="System.IterationPath" RightName="System.IterationPath" />
        <MappedField MapFromSide="Left" LeftName="System.NodeName" RightName="System.NodeName" />
        <MappedField MapFromSide="Left" LeftName="System.Reason" RightName="System.Reason" />
        <MappedField MapFromSide="Left" LeftName="Contoso.Field.Regulatory" RightName="Contoso.Field.Regulatory" />
        <MappedField MapFromSide="Left" LeftName="System.RelatedLinkCount" RightName="System.RelatedLinkCount" />
        <MappedField MapFromSide="Left" LeftName="Contoso.Field.ReleaseNoteRequired" RightName="Contoso.Field.ReleaseNoteRequired" />
        <MappedField MapFromSide="Left" LeftName="Contoso.Field.ResolutionDetails" RightName="Contoso.Field.ResolutionDetails" />
        <MappedField MapFromSide="Left" LeftName="System.Rev" RightName="System.Rev" />
        <MappedField MapFromSide="Left" LeftName="System.RevisedDate" RightName="System.RevisedDate" />
        <MappedField MapFromSide="Left" LeftName="Contoso.Field.SFDCCaseID" RightName="Contoso.Field.SFDCCaseID" />
        <MappedField MapFromSide="Left" LeftName="Contoso.Field.SFDCCaseNumber" RightName="Contoso.Field.SFDCCaseNumber" />
        <MappedField MapFromSide="Left" LeftName="Contoso.Field.SFDCOrganizationID" RightName="Contoso.Field.SFDCOrganizationID" />
        <MappedField MapFromSide="Left" LeftName="Contoso.Field.SFDCSyncResult" RightName="Contoso.Field.SFDCSyncResult" />
        <MappedField MapFromSide="Left" LeftName="System.State" RightName="System.State" valueMap="userstory_ValueMap" />
        <MappedField MapFromSide="Left" LeftName="System.TeamProject" RightName="System.TeamProject" />
        <MappedField MapFromSide="Left" LeftName="System.Title" RightName="System.Title" />
        <MappedField MapFromSide="Left" LeftName="System.WorkItemType" RightName="System.WorkItemType" />
        <MappedField MapFromSide="Left" LeftName="Microsoft.VSTS.Common.Priority" RightName="Microsoft.VSTS.Common.BacklogPriority" />
        <MappedField MapFromSide="Left" LeftName="Contoso.Field.TestNote" RightName="Microsoft.VSTS.Common.AcceptanceCriteria" />
        <MappedField MapFromSide="Left" LeftName="Microsoft.VSTS.CMMI.Blocked" RightName="Microsoft.VSTS.CMMI.Blocked" />
        <MappedField MapFromSide="Left" LeftName="System.ID" RightName="Contoso.Field.ExternalId" />
      </MappedFields>
    </FieldMap>
  </FieldMaps>
  <ValueMaps>
    <ValueMap name="userstory_ValueMap">
      <Value LeftValue="Unconfirmed" RightValue="New" />
      <Value LeftValue="Need Info" RightValue="New" />
      <Value LeftValue="Info Provided" RightValue="New" />
      <Value LeftValue="Confirmed" RightValue="Approved" />
      <Value LeftValue="Construction" RightValue="Committed" />
      <Value LeftValue="Resolved" RightValue="Committed - Developed" />
      <Value LeftValue="Built" RightValue="Committed - Developed" />
      <Value LeftValue="In Test" RightValue="Committed - Developed" />
      <Value LeftValue="Verified" RightValue="Committed - Tested" />
      <Value LeftValue="Closed" RightValue="Done" />
    </ValueMap>
  </ValueMaps>
</WITSessionCustomSetting>

*****更新 - 部分成功 [不是通过集成平台] 我放弃了在集成平台上尝试同步创建日期和更改日期的修订。我现在的工作重点是直接查询 TFS_defaultcollection 数据库并获取日期。这是 sql.. select * from WorkItemswere where id = order by rev 这将给出给定 ID 的所有修订。我们可以编写一个迁移后脚本来循环遍历所有工作项并更新“创建日期”[WorkItemsWere 中的 CreatedDate 列将给出该日期],修改日期和更改日期列将包含您需要的所有日期。但是,挑战在于更新“更改日期”[我正在通过 TFS API 更新创建日期。星光熠熠。只需以“服务帐户”TFS 用户身份运行控制台应用程序,“打开”工作项,修改创建日期并“保存”它]。我正在查询源系统 WorkItemsWere 表,按每个“Rev”获取 Changed 和 Revision 日期并更新目标系统“WorkItemsWere”[锁定源系统和目标系统非常重要,因此在此脚本期间不会发生更新]。脚本运行后,我在 taregt 系统上选择了一个工作项并检查了它的历史记录。所有的历史都消失了!!..所以,直接更新数据库中的更改/修订日期是个坏主意。但是,我找到了一种解决方法。如果您只是更新“修订日期”而不是“更改日期”,它会显示历史记录。[没有'Rev #"]。这对我们来说是一个好的解决方法。会让每个人都知道。按每个“Rev”获取 Changed 和 Revision 日期并更新目标系统“WorkItemsWere”[锁定源系统和目标系统非常重要,因此在此脚本期间不会发生更新]。脚本运行后,我在 taregt 系统上选择了一个工作项并检查了它的历史记录。所有的历史都消失了!!..所以,直接更新数据库中的更改/修订日期是个坏主意。但是,我找到了一种解决方法。如果您只是更新“修订日期”而不是“更改日期”,它会显示历史记录。[没有'Rev #"]。这对我们来说是一个好的解决方法。会让每个人都知道。按每个“Rev”获取 Changed 和 Revision 日期并更新目标系统“WorkItemsWere”[锁定源系统和目标系统非常重要,因此在此脚本期间不会发生更新]。脚本运行后,我在 taregt 系统上选择了一个工作项并检查了它的历史记录。所有的历史都消失了!!..所以,直接更新数据库中的更改/修订日期是个坏主意。但是,我找到了一种解决方法。如果您只是更新“修订日期”而不是“更改日期”,它会显示历史记录。[没有'Rev #"]。这对我们来说是一个好的解决方法。会让每个人都知道。锁定源系统和目标系统非常重要,因此在此脚本期间不会发生更新]。脚本运行后,我在 taregt 系统上选择了一个工作项并检查了它的历史记录。所有的历史都消失了!!..所以,直接更新数据库中的更改/修订日期是个坏主意。但是,我找到了一种解决方法。如果您只是更新“修订日期”而不是“更改日期”,它会显示历史记录。[没有'Rev #"]。这对我们来说是一个好的解决方法。会让每个人都知道。锁定源系统和目标系统非常重要,因此在此脚本期间不会发生更新]。脚本运行后,我在 taregt 系统上选择了一个工作项并检查了它的历史记录。所有的历史都消失了!!..所以,直接更新数据库中的更改/修订日期是个坏主意。但是,我找到了一种解决方法。如果您只是更新“修订日期”而不是“更改日期”,它会显示历史记录。[没有'Rev #"]。这对我们来说是一个好的解决方法。会让每个人都知道。它确实显示了历史。[没有'Rev #"]。这对我们来说是一个好的解决方法。会让每个人都知道。它确实显示了历史。[没有'Rev #"]。这对我们来说是一个好的解决方法。会让每个人都知道。

4

2 回答 2

1

我能够通过直接更新 TFS 中的表 WorkItemsWere 和 WorkItemsLongtext 来解决它。具体来说,WorkItemsWere 中的列修订日期和更改日期以及 workitemslongtext 中的更改日期。我刚刚编写了一个循环遍历所有工作项并从旧 TFS 实例获取所有修订的脚本。从 WorkItemsWeere 表中获取修改日期/更改日期并更新目标系统中的日期。奇迹般有效。

于 2013-03-03T01:04:20.983 回答
0

经过一番挖掘,看起来 TFS 集成平台对这两个字段进行了特殊处理,我所说的特殊是指当用户尝试将它们映射到配置文件中时它们会忽略它们。这是一个论坛帖子的链接,其中专门概述了这一点: http: //social.msdn.microsoft.com/Forums/en-US/tfsintegration/thread/e310e35b-e1b7-4f60-a2bf-15ad5016e736/。同样,这并不意味着这些值会消失,它们应该保存在目标 TFS 环境中新工作项的历史注释中(如我的注释中所述)。

于 2013-02-25T17:42:18.433 回答