Adding columns to scrum board - tfs

I am using TFS2013 and have spent a lot of effort editing the Task WIT process to allow two new states for my tasks... "Testing" and "Blocked"... I have edited the Task.xml file on the server and successfully added the two new states and the valid transitions to and from these states.
The states do show up when editing a task and the flow to and from the new states seem to work fine.
The problem is I cannot figure out how to add these new states as swimlanes on the task board. All of the Microsoft documentation states the columns are defined by the process states.
Please not this is the "In-Sprint" task board... NOT the Kanban board (that one is easy to edit)
Here is the XMl that I have added to the Task WIT Xml :
<STATE value="Testing">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<EMPTY />
</FIELD>
<FIELD refname="Microsoft.VSTS.Common.ClosedBy">
<ALLOWEXISTINGVALUE />
<EMPTY />
</FIELD>
</FIELDS>
</STATE>
<STATE value="Blocked">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<EMPTY />
</FIELD>
<FIELD refname="Microsoft.VSTS.Common.ClosedBy">
<ALLOWEXISTINGVALUE />
<EMPTY />
</FIELD>
</FIELDS>
</STATE>
......
<TRANSITION from="Active" to="Testing">
<REASONS>
<DEFAULTREASON value="Development Completed" />
</REASONS>
</TRANSITION>
<TRANSITION from="Testing" to="Closed">
<REASONS>
<DEFAULTREASON value="Testing Passed" />
</REASONS>
</TRANSITION>
<TRANSITION from="Testing" to="Active">
<REASONS>
<DEFAULTREASON value="Testing failed - Fixing" />
</REASONS>
</TRANSITION>
<TRANSITION from="Testing" to="New">
<REASONS>
<DEFAULTREASON value="Testing failed - Ready for fix" />
</REASONS>
</TRANSITION>
<TRANSITION from="Active" to="Blocked">
<REASONS>
<DEFAULTREASON value="Impediment Encountered" />
</REASONS>
</TRANSITION>
<TRANSITION from="Blocked" to="Active">
<REASONS>
<DEFAULTREASON value="Impediment Removed" />
</REASONS>
</TRANSITION>
<TRANSITION from="Blocked" to="Closed">
<REASONS>
<DEFAULTREASON value="Closed due to Impediment" />
</REASONS>
</TRANSITION>

Have you added the new states to the process configuration?
If you use "witadmin exportprocessconfiguration" you can add your additional stated to the column mapping. You need to tell TFS wither those states should allign to "ToDo", "InProgress", or "Done" modes.
Once you have modified and uploaded this it should work.

Related

Quickfixj 1.5.x/1.6.x custom message with repeating group - compilation issue

i am trying to add a custom message and compile quickfixj and am running into an issue where last few fields that i've added are not being picked up (they all have field number > 93000 if it matters)
code generation is ok but compilation fails, i am sure i am missing something obvious, searched for similar issues reported by others but didn't find any, can someone please help
#
public static class NoAccounts extends Group {
static final long serialVersionUID = 20050617;
private static final int[] ORDER = {1, 51006, 90002, 90003, 51005, 90001, 93000, , , , , , , 0};
#
Here is what i've added
<message name="GetAccountsRsp" msgtype="UsE" msgcat="app">
<field name="RequestId" required="Y"/>
<field name="ResponseStatus" required="N"/>
<field name="ErrorMessage" required="N"/>
<component name="AccountGrp" required="N"/>
<field name="Bookmark" required="N"/>
<field name="LastFragment" required="Y"/>
</message>
<component name="AccountGrp">
<group name="NoAccounts" required="N">
<field name="Account" required="N"/>
<field name="RiskNodeID" required="N"/>
<field name="Name" required="N"/>
<field name="AutomaticMoveAccountId" required="N"/>
<field name="Owner" required="N"/>
<field name="JSCCAccountType" required="N"/>
<component name="AccountExtension" required="N"/>
</group>
</component>
<component name="AccountExtension">
<field name="JpxAccountType" required="N"/>
<field name="IsOmnibus" required="N"/>
<field name="IsGross" required="N"/>
<field name="ClientId" required="N"/>
<field name="TradingMemberId" required="N"/>
<field name="ClearingMemberId" required="N"/>
<field name="IsConcentration" required="N"/>
</component>
<field number="50007" name="Bookmark" type="STRING"/>
<field number="50025" name="RequestId" type="STRING"/>
<field number="51005" name="Owner" type="STRING"/>
<field number="51006" name="RiskNodeID" type="STRING"/>
<field number="51009" description="ClearingMemberId" type="STRING" />
<field number="51011" description="TradingMemberId" type="STRING" />
<field number="51015" name="ResponseStatus" type="STRING">
<value enum="0" description="ACCEPTED" />
<value enum="1" description="REJECTED" />
</field>
<field number="51016" name="ErrorMessage" type="STRING"/>
<field number="51019" name="NoAccounts" type="NUMINGROUP"/>
<field number="90001" name="JSCCAccountType" type="STRING">
<value enum="1" description="DEFAULT_CLEARING_HOUSE" />
<value enum="2" description="CLEARING_HOUSE" />
<value enum="3" description="NORMAL" />
<value enum="4" description="CONCENTRATION" />
</field>
<field number="90002" name="Name" type="STRING"/>
<field number="90003" name="AutomaticMoveAccountId" type="STRING"/>
<field number="93000" name="JpxAccountType" type="STRING">
<value enum="1" description="HOUSE_ACCOUNT_TYPE" />
<value enum="2" description="AFFILIATE_ACCOUNT_TYPE" />
<value enum="3" description="CLIENT_ACCOUNT_TYPE" />
</field>
<field number="93001" description="IsOmnibus" type="BOOLEAN">
<value enum="N" description="FALSE"/>
<value enum="Y" description="TRUE"/>
</field>
<field number="93002" description="IsGross" type="BOOLEAN">
<value enum="N" description="FALSE"/>
<value enum="Y" description="TRUE"/>
</field>
<field number="93003" description="ClientId" type="STRING" />
<field number="93015" description="IsConcentration" type="BOOLEAN">
<value enum="N" description="FALSE"/>
<value enum="Y" description="TRUE"/>
</field>
<field number="96005" name="ContractPeriod" type="INT"/>
please ignore, stupid error, I've added 'description' attribute instead of 'name' attribute to the new fields I've added, when I include in group/component source is generated without these causing an issue during compilation. lesson learned - double check dictionary to avoid issues during recompilation

Multiple conditions on TFS field

I need to set a TFS field as required based on two conditions. For example i want to set the field state as required if
Field "IsValid" value is not true
Field "Test Type" value is "Analysis"
Is it possible to set multiple conditions in TFS?
Even if it sounds too late, here's a tip that worked for me. It's a little tedious so I'll try to be clear.
Here is my context :
First I'm working with TFS 2018 RTM (16.122.27102.1) but i don't think it's important in that case.
I added a new field : an "end user description" on User Stories or BUGs to generate a change log based on a simple query.
I wanted this HTML Field to be mandatory only when
the Work Item is "Closed"
the reason is "Work finished"
the activity is "Development"
a new boolean field "Ignore for change log" is not True
Workaround :
I created a new field : "Custom.EndUserDescriptionMandatory" (Integer).
The order is important.
The idea is that when a Field that plays on the condition is changed, that new field is set to 1.
After that when the value does not respond to the required condition, that new field is set to 0.
Here is the XML for the rules :
<FIELD name="Mandatory user description" refname="Custom.EndUserDescriptionMandatory" type="Integer">
<DEFAULT from="value" value="0" />
<WHENCHANGED field="Custom.ChangeLogIgnore">
<COPY from="value" value="1" />
</WHENCHANGED>
<WHENCHANGED field="Custom.EndUserDescription">
<COPY from="value" value="1" />
</WHENCHANGED>
<WHENCHANGED field="System.Reason">
<COPY from="value" value="1" />
</WHENCHANGED>
<WHENCHANGED field="Microsoft.VSTS.Common.Activity">
<COPY from="value" value="1" />
</WHENCHANGED>
<WHENCHANGED field="System.State">
<COPY from="value" value="1" />
</WHENCHANGED>
<WHENNOT value="Closed" field="System.State">
<COPY from="value" value="0" />
</WHENNOT>
<WHENNOT value="Work finished" field="System.Reason">
<COPY from="value" value="0" />
</WHENNOT>
<WHEN value="true" field="Custom.ChangeLogIgnore">
<COPY from="value" value="0" />
</WHEN>
<WHENNOT value="" field="Custom.EndUserDescription">
<COPY from="value" value="0" />
</WHENNOT>
<WHENNOT value="Development" field="Microsoft.VSTS.Common.Activity">
<COPY from="value" value="0" />
</WHENNOT>
<HELPTEXT>(Internal use) allows to know whether Custom.EndUserDescription is mandatory or not</HELPTEXT>
</FIELD>
Finally I added a rule to the Workflow :
<STATE value="Closed">
<FIELDS>
<FIELD refname="Custom.EndUserDescription">
<WHENNOT value="0" field="Custom.EndUserDescriptionMandatory">
<REQUIRED />
</WHENNOT>
</FIELD>
</FIELDS>
</STATE>
I hope that will help.
In simple terms: It's not supported now.
Here has been a featured request in Voice of VS. You can also vote for it.
Allow nested when, whennot, whenchanged, and whennotchanged in TFS
work item definitions
https://visualstudio.uservoice.com/forums/330519-team-services/suggestions/5760933-allow-nested-when-whennot-whenchanged-and-whenn

error 400 bad request with XEP-0055?

I got possible fields from my server:
<iq xmlns="jabber:client" from="vjud.company.com" to="testuser#company.com/iPhone" id="search1" type="result"><query xmlns="jabber:iq:search">
<instructions>You need an x:data capable client to search</instructions>
<x xmlns="jabber:x:data" type="form">
<title>Search users in vjud.company.com</title>
<instructions>Fill in the form to search for any matching Jabber User (Add * to the end of field to match substring)
</instructions>
<field type="text-single" label="User" var="user"/>
<field type="text-single" label="Full Name" var="fn"/>
<field type="text-single" label="Name" var="first"/>
<field type="text-single" label="Middle Name" var="middle"/>
<field type="text-single" label="Family Name" var="last"/>
<field type="text-single" label="Nickname" var="nick"/>
<field type="text-single" label="Birthday" var="bday"/>
<field type="text-single" label="Country" var="ctry"/>
<field type="text-single" label="City" var="locality"/>
<field type="text-single" label="Email" var="email"/>
<field type="text-single" label="Organization Name" var="orgname"/>
<field type="text-single" label="Organization Unit" var="orgunit"/>
</x>
</query>
</iq>
Suppose I want to search a user with JID admin#company.com
Composed request wil look like this:
XMPPIQ *iq2 = [[XMPPIQ alloc] init];
[iq2 addAttributeWithName:#"type" stringValue:#"set"];
[iq2 addAttributeWithName:#"from" stringValue:#"testuser#company.com"];
[iq2 addAttributeWithName:#"to" stringValue:#"vjud.company.com"];
[iq2 addAttributeWithName:#"id" stringValue:#"search1"];
XMPPElement *query2 = [XMPPElement elementWithName:#"query"];
[query2 setXmlns:#"jabber:iq:search"];
XMPPElement *user = [XMPPElement elementWithName:#"user"];
[user setStringValue:#"admin"];
[iq2 addChild:query2];
[query addChild:user];
The error stanza:
<iq xmlns="jabber:client" from="vjud.company.com" to="testuser#company.com/iPhone" type="error" id="search1">
<query xmlns="jabber:iq:search"/>
<error code="400" type="modify">
<bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
So, basically there are 2 questions:
Why there is no </query> element in response?
Is it the actual reason of the error?
-The server's response should look like this-
Big thanks to #legoscia user, in case request was composed right, you will get something like this(notice <item> element):
<iq xmlns="jabber:client" from="vjud.company.com" to="testuser#company.com/iPhone" id="search1" type="result»>
<query xmlns="jabber:iq:search"><x xmlns="jabber:x:data" type="result»>
<title>Search Results for vjud.company.com</title>
<reported>
<field type="text-single" label="Jabber ID" var="jid»/>
<field type="text-single" label="Full Name" var="fn»/>
<field type="text-single" label="Name" var="first»/>
<field type="text-single" label="Middle Name" var="middle»/>
<field type="text-single" label="Family Name" var="last"/><field type="text-single" label="Nickname" var="nick»/>
<field type="text-single" label="Birthday" var="bday»/>
<field type="text-single" label="Country" var="ctry»/>
<field type="text-single" label="City" var="locality»/>
<field type="text-single" label="Email" var="email»/>
<field type="text-single" label="Organization Name" var="orgname"/><field type="text-single" label="Organization Unit" var="orgunit»/>
</reported>
<item>
<field var="jid»>
<value>admin#company.com</value>
</field>
<field var="fn"><value/></field>
<field var="last"><value/></field>
<field var="first"><value/></field>
<field var="middle"><value/></field>
<field var="nick"><value/></field>
<field var="bday"><value/></field>
<field var="ctry"><value/></field>
<field var="locality"><value/></field>
<field var="email"><value/></field>
<field var="orgname"><value/></field>
<field var="orgunit"><value/></field></item>
</x>
</query>
</iq>
If there is no matches,you will just receive <reported> element with lots of fields. You may want to have look at this as well.
This search service doesn't support "plain" XEP-0055 search fields, but requires you to submit the x:data form returned in the response to the "get" request; see XEP-0004.
You can tell this by the fact that the result doesn't contain any suggested search fields as children of the query element (see example 2 of XEP-0055), and also the <instructions/> element says so. This means that you need to look at the <x xmlns="jabber:x:data" type="form"> element and submit it.
Thus, you need to send something like:
<iq type='set'
from='juliet#capulet.com/balcony'
to='characters.shakespeare.lit'
id='search4'
xml:lang='en'>
<query xmlns='jabber:iq:search'>
<x xmlns='jabber:x:data' type='submit'>
<field var='user'>
<value>admin</value>
</field>
</x>
</query>
</iq>
(This is example 8 from XEP-0055, modified to search for the user with username "admin".)

TFS2013 Requiring Comments on transitions to certain states

I'm creating a TFS 2013 Kanban board. I want to require an additional comment when the user switches the State to "Blocked From Progress"
Based on this post (http://social.msdn.microsoft.com/Forums/vstudio/en-US/9b672f4c-3054-481a-856d-4da650f25f74/how-to-require-comments-during-state-transition?forum=tfsprocess) I can require comments on all state changes. How do I limit it to just a transition to the "Blocked From Progress" State? Here's a section of code from my exported User Story xml file:
<FIELD name="HistoryHelper" refname="Demo.HistoryHelper" type="String">
<WHENNOT field="System.State" value="Blocked From Progress">
<COPY from="value" value="1" />
</WHENNOT>
<WHEN field="System.History" value="">
<COPY from="value" value="0" />
</WHEN>
<WHENNOT field="System.History" value="">
<COPY from="value" value="1" />
</WHENNOT>
<WHENCHANGED field="System.State">
<PROHIBITEDVALUES>
<LISTITEM value="0" />
</PROHIBITEDVALUES>
</WHENCHANGED>
</FIELD>
This is almost exactly the code from the above link, but I've added a check for the value of the State. Those lines don't seem to change the behavior at all. I've tried them at different places in the XML to no avail. Also, I've tried nesting a inside a and got errors. I don't know if there's a way to do an AND inside a WHEN.
EDIT
In addition to the accepted answer, I updated the new Field definition to be as follows:
<FIELD name="Blocked Reason" refname="CustomerProjects.BlockedReason" type="HTML" >
<WHENNOT field="System.State" value="Blocked From Progress">
<COPY from="value" value="" />
<READONLY />
</WHENNOT>
</FIELD>
I think a good solution for this would be to create a new field called "Blocked Reason" and then make it required on transitions into the "Blocked From Progress" state. You'd implement this like:
<Fields>
...
<FIELD name="Blocked Reason" refname="<company>.BlockedReason" type="HTML" />
...
</FIELDS>
<WORKFLOW>
...
<TRANSITIONS>
...
<TRANSITION from="<somestate>" to="Blocked From Progress">
...
<FIELDS>
<FIELD refname="<company>.BlockedReason">
<REQUIRED />
</FIELD>
</FIELDS>
</TRANSITION>
...
</TRANSITIONS>
...
</WORKFLOW>
You'd need to set that for each possible transition into the "Blocked From Progress" state. If you wanted you could also remove the text from the field using the tag on transitions out of the "Blocked From Progress" state.

TFS - Integration platform. Migrating system.created and changed date to custom fields

We are trying to import work items from TFS 2010 to 2012. we defined 2 custom fields called "Legacy Created Date" and "Legacy Changed Date" in our fields for all the work item types.
The reason why we had to create these 2 fields for created date and changed date is because after the migration, the created date and changed date are changed to the migration time and the old created/changed dates are lost.
We also included these 2 fields in the migration xml like this:
The above 2 statements are included for all work item types. No matter what we tried, these 2 fields are coming in empty post-migration.
We confirmed that the 2 custom fileds are available in the work item type templates [by using TFS power tools and opening the WIT from server]
Any help pls?
Thx much!
***UPDATE - ENTIRE MAPPING 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>
*****UPDATE - Partial success [not thru integration platform]
I gave up on integration platform trying to sync created date and changed date on revisions. I am now focussing my efforts on directly querying the TFS_defaultcollection DB and getting the dates. Here is the sql..
select * from WorkItemswere where id = order by rev
This will give all the revisions for a given ID. We can write a post migration script to loop thru all work items and update the "created date" [The CreatedDate column in WorkItemsWere will give that] and the revised date and changed date columns will have all the dates u need. However, the challenge is updating the "changed dates" [I am updating the Created date via the TFS API. Starightforward. Just run console app as a "service account" TFS user, "open" the work item, modify the created date and "save" it].
I am querying the source systems WorkItemsWere table, getting the Changed and Revision dates by each "Rev" and updating the target systems "WorkItemsWere" [It's important that the source and target systems are locked so no updats are happening during this script]. After the script ran, I picked a workitem on a taregt system and checked it's history. All the history disappeared!!.. So, bad idea directly updating the changed/revision dates in DB. However, I found a workaround. If you just update the "revision date" and NOT the "changed date", it does show the history. [without the 'Rev #"]. This is an ok workaround for us. Will keep everyone posted.
I was able to solve it by directly updating the tables WorkItemsWere and WorkItemsLongtext in TFS. Specifically, the columns Revised date and changed date in WorkItemsWere and Changed Date in workitemslongtext.
I just wrote a script that loops thru all work items and gets all the revisions from the old TFS instance. Get the revised date/changed dates from WorkItemsWeere table and update the dates in the target system. works like a charm.
After some digging, it looks like the TFS Integration Platform treats these two fields in a special, and by special I mean that they ignore them when the user tries mapping them in the configuration file. Here is a link to a forum post that outlines this specifically: http://social.msdn.microsoft.com/Forums/en-US/tfsintegration/thread/e310e35b-e1b7-4f60-a2bf-15ad5016e736/. Again, this doesn't mean these values disappear, they should be held in the history comments of the new work items in the target TFS environment (as noted in my comment).

Resources