如果AreaPath的级别低于3级,我们需要取消'保存'工作项。 我们已经看到了使用禁止值AreaID的解决方法(没有解决,我们手动执行此操作有很多方法),已经尝试将该值复制到String,但它不起作用。
是否有某种插件,客户端或服务器端?
我们有一些带有ISubscriber的服务器插件,但是,它们使用Async,因此,所有notificationType都是'Notification',我们无法捕获DecisionPoint,当我们收到请求时,工作项似乎已经保存了。
谢谢大家,
答案 0 :(得分:0)
工作项目更改没有决策点。存储更改,然后发出通知。这样就会删除选项1,2和3。
对于选项4,您可以创建一个继承自标准控件的自定义工作项控件,并在其中实现您的逻辑。您需要创建一个Web和一个Windows变体,后者适用于TFS实例上使用的每个Visual Studio版本。
您的用户仍然可以通过Excel,MsProject和API以这种方式保存新的工作项,因为在此上下文中不执行UI验证规则。
基本上,您应该记住,字段可以更改为您要阻止的值,并且您需要有一些补偿机制,包括报告,生成电子邮件以警告用户,仪表板小部件显示违规用户等。
答案 1 :(得分:0)
我们已经完成了这项工作,也许对某人来说可能很有趣,所以,我们做的事情非常简单。
我们有一个自定义控件,因此,我们有一个绑定来执行此验证。如果Areapath少于3个级别,我们会实例化一个新错误:
bind: function (workitem) {
this._base(workitem);
this._control.bind("click", delegate(this, this._onClick));
this._workItemChangeDelegate = function (sender, args) {
if (this._workItem.getField("System.AreaPath") != null) {
if (this._workItem.getField("System.AreaPath").getValue().split("\\").length < 4) {
error = new Error("Please insert at least 4 levels");
this._workItem.setError(error);
}
}
}
workitem.attachWorkItemChanged(VSS.Core.delegate(this, this._workItemChangeDelegate));
},
unbind: function (workItem) {
this._base(workItem);
if (workItem != null) {
workItem.detachWorkItemChanged(this._workItemChangeDelegate);
delete this._workItemChangeDelegate;
}
},
对于VS,实现IWorkItemControl,并添加以下内容:
private void M_workItem_Saving(object sender, WorkItemEventArgs e)
{
if (sender != null)
{
string areaPath = m_workItem.AreaPath.ToString();
if ((int)areaPath.Split('\\').Length < 4)
{
throw new Exception("Please insert at least 4 levels");
}
}
}
希望这可以帮助某人。