我们正尝试将工作项从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 .. 从WorkItemswere中选择*,其中id = order by rev 这将给出给定ID的所有修订。我们可以编写一个迁移后脚本来循环遍历所有工作项并更新“创建日期”[WorkItems中的CreatedDate列将会给出],修改日期和更改日期列将包含您需要的所有日期。但是,挑战是更新“更改日期”[我正在通过TFS API更新创建日期。 Starightforward。只需将控制台应用程序作为“服务帐户”TFS用户运行,“打开”工作项,修改创建日期并“保存”它。 我正在查询源系统WorkItemsWere表,获取每个“Rev”的更改日期和修订日期并更新目标系统“WorkItemsWere”[源系统和目标系统锁定非常重要,因此在此脚本期间不会发生更新]。脚本运行后,我在taregt系统上选择了一个工作项并检查了它的历史记录。所有的历史都消失了!! ..所以,直接更新DB中的更改/修订日期的坏主意。但是,我找到了一个解决方法。如果您只更新“修订日期”而不是“更改日期”,则会显示历史记录。 [没有'Rev#“]。这对我们来说是一个很好的解决方法。会让每个人都发布。
答案 0 :(得分:1)
我能够通过直接更新TFS中的WorkItemsWere和WorkItemsLongtext表来解决它。具体来说,列在Workitemslong中的WorkItemsWere和Changed Date中修改了日期和更改日期。 我刚刚编写了一个循环遍历所有工作项的脚本,并获取旧TFS实例的所有修订版。从WorkItemsWeere表中获取修订日期/更改日期,并更新目标系统中的日期。就像一个魅力。
答案 1 :(得分:0)
经过一番挖掘后,看起来TFS集成平台将这两个字段视为特殊字段,特别是我指的是当用户尝试在配置文件中映射它们时它们会忽略它们。以下是论坛帖子的链接,具体概述了这一点:http://social.msdn.microsoft.com/Forums/en-US/tfsintegration/thread/e310e35b-e1b7-4f60-a2bf-15ad5016e736/。同样,这并不意味着这些值会消失,它们应该保存在目标TFS环境中新工作项的历史记录中(如我的评论中所述)。