我们正在尝试计算TFS服务器端插件中的参数。 我试图限制用户将PBI移动到Committed状态,除非他们的所有子任务在“剩余工作”字段下都有价值。
这个基本逻辑有效,我可以浏览子项并获取所有值是否存在。 我无法理解的内容\完成是如何防止保存操作,以防任务的工作空值。
if (taskswithoutrw.Count() != 0)
{
permitted = false;
TeamFoundationApplicationCore.Log("changedpermitted to false", 0, EventLogEntryType.Information);
throw new Exception("Some tasks does not contain \"Remaining Work\" value");
}
else
{
var tasks = childs.Where(x => TFStringComparer.WorkItemTypeName.Equals(x.Type.Name, Task));
double workSum = 0;
foreach (var task in tasks)
{
workSum += Convert.ToDouble(task.Fields["Remaining Work"].Value) / 6;
TeamFoundationApplicationCore.Log("Remaining Work sum: " + workSum.ToString(), 0, EventLogEntryType.Information);
}
wi.Fields["Story Points"].Value = workSum.ToString();
wi.Save();
}
如果抛出异常我将EventNotificationStatus设置为ActionDenied
catch (Exception ex)
{
// Log error (Should be logged to the windows event log by default)
TeamFoundationApplicationCore.LogException(requestContext, "Exception occurd in ", ex);
TeamFoundationApplicationCore.Log("outercatch", 0, EventLogEntryType.Information);
statusCode = -1;
return EventNotificationStatus.ActionDenied;
}
Method must return this value
return EventNotificationStatus.ActionPermitted;
但这似乎没有诀窍,我错过了什么?
答案 0 :(得分:0)
您只需在工作项字段中添加 REQUIRED 规则即可避免空值。使用此规则,用户无法保存工作项,除非他们已将值分配给所有必填字段。例如:
<FieldDefinition name="Effort" refname="Microsoft.VSTS.Scheduling.Effort" type="Double" reportable="measure">
<REQUIRED />
<HELPTEXT>The estimated effort to implemented the backlog item</HELPTEXT>
</FieldDefinition>
另一种方法是,如果field1的值为null,则为了防止工作项保存,添加另一个字段field2,当field1的值为null时将填充该字段。当filed1的值为null时,filed2的值无效,这将阻止保存工作项。
要实现以下任务:当PBI工作项的状态更改为“已提交”时,您需要查找子任务工作项是否在“剩余工作”字段下具有值,然后禁用状态更改。为此,您需要捕获状态下拉列表中的 onChange 事件:
1.添加方法 AddEventHandler(),将事件添加到工作项。
private void AddEventHandler()
{
workItem.FieldChanged += new WorkItemFieldChangeEventHandler (this.workItem_FieldChanged);
}
2.在 WorkItemDatasource 属性
中调用此方法object IWorkItemControl.WorkItemDatasource
{
get
{
return workItem;
}
set
{
workItem = (WorkItem)value;
AddEventHandler();
}
}
3.现在在 workItem_FieldChanged 方法中执行所需的功能。
根据您的要求,您需要确定更改的字段是否为州,以及是否设置为“已提交”。这可以通过检查事件args来实现,如下所示。
(e.Field.Name == "State" && e.Field.Value.ToString() == "Committed")
确保您正在捕获正确的事件,现在查找该工作项是否有任何子项。还要检查链接是否是孩子。然后检查“剩余工作”字段下的值。
您可以查看此博客以获取更多详细信息,这些内容可为您提供帮助:http://www.codeproject.com/Articles/730928/Close-a-Work-Item-only-if-Child-Work-items-are-c