TFS EventHandler禁用保存选项

时间:2016-09-06 15:59:36

标签: c# plugins tfs event-handling listener

如果AreaPath的级别低于3级,我们需要取消'保存'工作项。 我们已经看到了使用禁止值AreaID的解决方法(没有解决,我们手动执行此操作有很多方法),已经尝试将该值复制到String,但它不起作用。

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

我们有一些带有ISubscriber的服务器插件,但是,它们使用Async,因此,所有notificationType都是'Notification',我们无法捕获DecisionPoint,当我们收到请求时,工作项似乎已经保存了。

  1. 您知道我们如何获得DecionType以及这是否是同步模式?
  2. 您是否有一些示例如何实现和Event WorkItemPreSaveEventHandler?
  3. 您知道我们如何为预先保存的工作项实现监听器?
  4. 你有什么消化来解决我们的问题吗?
  5. 谢谢大家,

2 个答案:

答案 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");
        }
    }
}

希望这可以帮助某人。