TFS EventHandler禁用保存选项

本文关键字:保存 选项 EventHandler TFS | 更新日期: 2023-09-27 18:05:48

如果AreaPath少于3个级别,我们需要取消'save'工作项。我们已经看到了一个使用禁用值AreaID的解决方案(不能解决,我们有很多区域路径可以手动完成),已经尝试将该值复制到String中,但它不起作用。

是否有某种插件,客户端或服务器端?

我们有一些服务器插件与issubscriber,但是,他们的工作异步,所以,所有的notificationType是'Notification',我们不能捕捉DecisionPoint,当我们得到请求的工作项似乎已经保存。

    你知道我们如何获得DecionType,如果这是同步模式吗?你有一些例子如何实现和事件WorkItemPreSaveEventHandler?
  1. 你知道我们如何为预先保存的工作项实现侦听器吗?
  2. 你有什么建议来解决我们的问题吗?

谢谢大家,

TFS EventHandler禁用保存选项

没有工作项更改的决策点。更改将被存储,然后发出通知。因此,这将删除选项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");
        }
    }
}

希望对大家有所帮助