Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio TFS-如何将子任务小时数与父任务小时数相加_Visual Studio_Tfs_Tfs Aggregator - Fatal编程技术网

Visual studio TFS-如何将子任务小时数与父任务小时数相加

Visual studio TFS-如何将子任务小时数与父任务小时数相加,visual-studio,tfs,tfs-aggregator,Visual Studio,Tfs,Tfs Aggregator,TFS Web client在backlog选项卡下提供了一个“board”视图,该视图根据用户故事的子任务的剩余工时总和显示用户故事的剩余工时总和 我也尝试过导出到Excel并使用透视表,但工作项之间没有明显的链接(据我所知) 我看到了这个问题,但我不知道这是否是同一个想法 此外,项目可能类似,但尚未收到回复 可以在VisualStudioTFS中开箱即用吗 它需要编码吗 有可用的插件吗?我已经看过Github上的TFSAggregator,这可能会奏效,但如果可能的话,我希望避免使用服务器

TFS Web client在backlog选项卡下提供了一个“board”视图,该视图根据用户故事的子任务的剩余工时总和显示用户故事的剩余工时总和

我也尝试过导出到Excel并使用透视表,但工作项之间没有明显的链接(据我所知)

我看到了这个问题,但我不知道这是否是同一个想法

此外,项目可能类似,但尚未收到回复

可以在VisualStudioTFS中开箱即用吗

它需要编码吗


有可用的插件吗?我已经看过Github上的TFSAggregator,这可能会奏效,但如果可能的话,我希望避免使用服务器端插件。

您可以使用Project汇总估计和实际的工作量。因为MicrosoftProject有一个调度引擎,它会自动生成汇总任务。汇总为父项的所有子工作项提供选择字段的汇总值

。。。这甚至是他们的示例用例之一

示例使用
  • 当一个子项移动到“进行中”时,将Bug、PBI(或任何父项)的状态更新为“进行中”
  • 当所有子项移动到“完成”或“删除”时,将Bug、PBI(或任何父项)的状态更新为“完成”
  • 用所有任务的“剩余工时”之和更新Bug、PBI等的“剩余工时”
  • 更新Sprint上的“剩余工作”及其子代的所有“剩余工作”的总和(即Sprint中pbi的任务和bug)
  • 汇总单个工作项的总计(即
    开发估算+测试估算=总计估算

我已经能够做到这一点,但是当任务的状态值设置为“已删除”时会出现问题,不应为该任务计算汇总值。在策略文件中,我得到了这样的if条件:

    <rule name="RollupTasks" appliesTo="Task"><![CDATA[
    string wfState = (string) self.Fields["State"].Value;
    if (wfState="Removed" && self.HasParent()) ...

但那没用。我也试过:

    <rule name="RollupTasks" appliesTo="Task"><![CDATA[
    if (self.HasParent() && self[System.State]="Removed") ...


…但这似乎不起作用。我接近了吗?

我确实看到了,但尽可能避免使用服务器端插件。SammyB不想使用服务器端插件,因此这是一个解决方法。:-)听起来有可能,但编辑策略文件可能是一项挑战。策略文件在服务器上还是在页面上可编辑?您应该使用不等式(
!=
)跳过删除状态。@SammyB:策略文件驻留在服务器上。@GiulioVian:所以如果我们使用上面的第二个代码块,您的答案会让我找到正确的代码块(我想)。我确实希望
[System.State]=“删除”
,因为这与
sef.HasParent
一起提供了链接的用户故事,但是-我应该使用
parent.[System.State]
,而不是
self.[System.State]
。很愚蠢的错误,但我的假设正确吗?下一次有机会我会去测试一下,然后再报告。非常感谢。要将子项值聚合到跳过某些子项的父项,必须进行测试以避免不必要的计算——这是
if(self.HasParent()&&((string)self[“System.State”])!=“Removed”)
test;但是您还必须跳过聚合不需要的子项,例如,
var sum=self.Parent.children.Where(c=>((string)c[“System.State”])!=“Removed”).sum(c=>c.GetField(
field
”,0.0);