TFS EventHandler禁用保存选项
本文关键字:保存 选项 EventHandler TFS | 更新日期: 2023-09-27 18:05:48
如果AreaPath少于3个级别,我们需要取消'save'工作项。我们已经看到了一个使用禁用值AreaID的解决方案(不能解决,我们有很多区域路径可以手动完成),已经尝试将该值复制到String中,但它不起作用。
是否有某种插件,客户端或服务器端?
我们有一些服务器插件与issubscriber,但是,他们的工作异步,所以,所有的notificationType是'Notification',我们不能捕捉DecisionPoint,当我们得到请求的工作项似乎已经保存。
- 你知道我们如何获得DecionType,如果这是同步模式吗?你有一些例子如何实现和事件WorkItemPreSaveEventHandler?
- 你知道我们如何为预先保存的工作项实现侦听器吗? 你有什么建议来解决我们的问题吗?
谢谢大家,
没有工作项更改的决策点。更改将被存储,然后发出通知。因此,这将删除选项1,2和3。
对于选项4,您可以创建从标准控件继承的自定义工作项控件,并在其中实现您的逻辑。你需要创建一个web版本和一个windows版本,后者适用于你的TFS实例上使用的每个Visual Studio版本。
您的用户仍然可以通过这种方式通过Excel, MsProject和API保存新的工作项,因为UI验证规则不会在此上下文中执行。
基本上,你应该记住字段可以更改为你想要阻止的值,你需要有一些补偿机制,可能是报告,生成电子邮件来警告用户,显示用户违规的仪表板小部件等。
我们已经完成了这项工作,也许对某些人来说很有趣,所以,我们做的事情真的很简单。
我们有一个自定义控件,所以我们有一个绑定来做这个验证。如果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");
}
}
}
希望对大家有所帮助