【问题标题】:TFS EventHandler to disable save optionTFS EventHandler 禁用保存选项
【发布时间】:2017-01-14 03:54:14
【问题描述】:

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

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

我们有一些带有 ISubscriber 的服务器插件,但是它们以异步方式工作,因此,所有的 notificationType 都是“Notification”,我们无法捕获 DecisionPoint,当我们收到请求时,工作项似乎已经保存。

  1. 您知道我们如何获取 DecionType 以及这是同步模式吗?
  2. 你有一些如何实现和Event WorkItemPreSaveEventHandler的例子吗?
  3. 您知道我们如何为预先保存的工作项实现侦听器吗?
  4. 您有什么建议可以解决我们的问题吗?

谢谢大家,

【问题讨论】:

    标签: c# plugins tfs event-handling listener


    【解决方案1】:

    我们已经完成了这项工作,也许对某人来说可能很有趣,所以,我们要做的事情真的很简单。

    我们有一个自定义控件,所以,我们有一个绑定来做这个验证。如果 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");
            }
        }
    }
    

    希望这可以帮助某人。

    【讨论】:

      【解决方案2】:

      工作项更改没有决策点。存储更改,然后发出通知。因此这将删除选项 1、2 和 3。

      至于选项 4,您可以创建一个继承自标准控件的自定义工作项控件并在其中实现您的逻辑。您需要创建一个 web 和一个 windows 变体,后者适用于 TFS 实例上使用的每个 Visual Studio 版本。

      您的用户仍然可以通过 Excel、MsProject 和 API 以这种方式保存新的工作项,因为 UI 验证规则不在此上下文中执行。

      基本上,您应该记住,字段可以更改为您想要阻止的值,并且您需要有一些补偿机制,例如报告、生成电子邮件以警告用户、仪表板小部件显示用户违规等。

      【讨论】:

      • 您好 jessehouwing,感谢您的回答。所以,你建议我创建一个自定义控件来保存工作项,在这个按钮中我可以创建所有自定义,对吧?我读过一篇文章,说以前版本的 TFS,我正在开发 TFS 2015 (2),有可能创建一个能够监听 tfs 端口/工作项操作的网站。这可能在2015年吗?如何?关于WorkItemPreSaveEventHandler,一般在哪里可以实现?
      • 没有自定义区域路径控件。但说真的,我真正的解决方案是教育用户并通过一些工作项查询来查找违规者。
      • 好的,谢谢您的帮助。最后一件事,我在哪里可以找到有关 TFS WebAccess 扩展的文档(VSS\Service、VSS\Utils\Core\VSS\Controls\Dialogs、TFS.WorkItemTracking.Controls...)?
      • 几乎没有关于这些 API 的文档
      猜你喜欢
      • 1970-01-01
      • 2015-08-28
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多