TFS 2012当更改的副本复制以前的值而不是当前值时

TFS 2012当更改的副本复制以前的值而不是当前值时,tfs,tfs-workitem,Tfs,Tfs Workitem,在TFS 2012中,我编辑了任务工作项,以便在更改原始估计时,它自动将原始估计复制到剩余估计字段 我的代码: <FieldDefinition name="Remaining Work" refname="Microsoft.VSTS.Scheduling.RemainingWork" type="Double" reportable="measure"> <WHENCHANGED field="Microsoft.VSTS.Scheduling.OriginalEsti

在TFS 2012中,我编辑了任务工作项,以便在更改原始估计时,它自动将原始估计复制到剩余估计字段

我的代码:

<FieldDefinition name="Remaining Work" refname="Microsoft.VSTS.Scheduling.RemainingWork" type="Double" reportable="measure">
  <WHENCHANGED field="Microsoft.VSTS.Scheduling.OriginalEstimate">
    <COPY from="field" field="Microsoft.VSTS.Scheduling.OriginalEstimate" />
  </WHENCHANGED>
  <HELPTEXT>An estimate of the number of units of work remaining to complete this task</HELPTEXT>
</FieldDefinition>

完成此任务剩余工作单元数的估计值
但是,当您在任务的“原始估计”字段中输入值并单击“保存”时,它会复制上一个值,而不是当前值

如何修复它,使其在保存任务时复制新值,而不是以前保存的值

编辑:这是从整个文件视图中提取的xml,而不是仅从该项的TFS power tools视图中提取的xml。出于某种原因,它显示了
,而不是


完成此任务剩余工作单元数的估计值

我们已经完成了这项任务,使用了从工作项从“新”移动到“进行中”的转换

<Transition from="New" to="In Progress">
  <REASONS>
    <DEFAULTREASON value="In Progress">
      <FIELDS>
        <FIELD refname="System.AssignedTo">
          <COPY from="currentuser" />
        </FIELD>
        <FIELD refname="Microsoft.VSTS.Scheduling.OriginalEstimate">
          <WHEN field="Microsoft.VSTS.Scheduling.OriginalEstimate" value="">
            <COPY from="field" field="Microsoft.VSTS.Scheduling.RemainingWork" />
          </WHEN>
        </FIELD>
      </FIELDS>
    </DEFAULTREASON>
  </REASONS>
</Transition>


如果原始估算字段没有设置值,它将使用剩余工时中存储的值。

基本上,您无法以您尝试的方式执行您尝试执行的操作。为了使其工作,您需要有效地保存工作项两次。触发WHENCHANGED时存储在TFS中的值仍然是旧值。在保存操作完成之前,不会保存新值(因此实际上无法访问)。这实际上是预期的行为


建议的将两个字段的同步放入状态转换的替代方案将起作用。您还可以在保存操作完成后使用TFS API实现此类功能。

您使用而不是定义字段的原因是什么?还有其他规则可能会更新RemainingWork或OriginaleSimitate字段吗?我从TFS power tools视图中提取了该项的xml,但当我查看整个文件时,它是而不是。我不知道为什么。没有其他字段会根据对完整xml.OK的搜索来更改它。您能否查看工作项的详细历史记录,并查看是否有任何条目显示字段值发生变化?根据历史记录,它传递的是以前的值,而不是当前的新值,例如原始估计值旧1新2剩余工作旧0新1
<Transition from="New" to="In Progress">
  <REASONS>
    <DEFAULTREASON value="In Progress">
      <FIELDS>
        <FIELD refname="System.AssignedTo">
          <COPY from="currentuser" />
        </FIELD>
        <FIELD refname="Microsoft.VSTS.Scheduling.OriginalEstimate">
          <WHEN field="Microsoft.VSTS.Scheduling.OriginalEstimate" value="">
            <COPY from="field" field="Microsoft.VSTS.Scheduling.RemainingWork" />
          </WHEN>
        </FIELD>
      </FIELDS>
    </DEFAULTREASON>
  </REASONS>
</Transition>