我们都会用到TFS中的工作项。一般来说,最主要的会用到任务、bug这些工作流来进行项目管理里。但我们发现,实际上,有些模板中的工作流并不能完全符合我们的需要,因此我们会进行工作流的定制操作。下面就会通过一个简单的案例,来解释如何进行工作流的修改。

1.软件准备

TFS版本:TFS2010

客户端版本:VSTS 2012 Update2

PowerTool版本:PowerTool for VS2012

实际上这个配置不用纠结,由于TFS还没有升级,所以还是2010版本,但这次客户端我选用的是2012,也是为了看下区别。在实际应用上,这里是没有区别的。

2.关于模板

在TFS创建团队项目的时候,我们会进行模板的选择。实际上这个模板里面就包含了工作项。

图:模板的选择

各种模板中工作量类型有差异,而且虽然有些工作项名称相同,但他们会有着不同的工作流。例如敏捷开发的任务工作流和CMMI模板的工作流就有着很大的区别。如图,可以看出虽然都是任务,在CMMI中的工作流比敏捷模板中的工作流复杂了很多。

图:敏捷模板中"任务"工作流

图:CMMI模板中"任务"工作流

3.更改工作流

这次我们通过修改敏捷模板中的任务工作流,了解如何自定义工作项工作流。

3.1 工作流需求

假设,我们在一个任务被提出后,开发人员有拒绝的权利(这里仅仅是假设),且任务被拒绝后,等于到了工作流的末端,任务无法被重新置为活动或其他状态,那么我们的工作轮流大概是这样的。

可以看到这个流程是单向的。

3.2 打开工作流

我们在安装VSTS的Power Tools的以后,会在工具里找到这一项。如果要直接操作服务器,可以选Open WIT from Server(需要连接TFS)。如果自己在离线状态下,也可以编辑工作项模板文件。修改好再导入即可。

点击打开后,要选择团队项目,从中选择出要修改的工作项类型。这里我们选择test-agile项目中的"任务"工作项模板。

可以看到,一个工作项模板是由三部分组成的

"Fields"、"Layout"、"Workflow" 分别代表着:字段,布局,工作流

这三点主要的功能为

Fields:定义工作项的字段。

Layout:定义工作项操作面板的布局。

Workflow:定义工作项的工作流。

这次以修改工作流为主,未涉及到面板修改。

3.3 添加工作流

我们点击Workflow页签,会看到此模板的工作流。并且点开左边的工具箱,可以看到工作流的编辑工具。

State代表工作流的状态。

Transition Link 代表变化流程。

我们的需求是添加一个拒绝流程,此流程进入后,不可逆。于是拉入一个State到活动的状态的下方。

并且向下拉入一个Transition Link。注意拉动的方向!向下表示从"活动"状态转向"拒绝"状态。由于我们希望是单向不可逆,则只需要此一个方向流程变化即可。(可以看到"活动"状态到"关闭"状态的流程为双向的)

此时,工作流已经建立完毕,接下来要修改其属性。

双击"活动"状态与"拒绝"状态中的Transition。可以看到属性面板

Transition Detail:From to是状态的方向。For Not是操作此属性的权限。

Reasons:是状态跳转的原因。注意:Transition中必须有一个reason属性才可以通过验证

于是我们只要在Reasons的标签中添加原因即可完成。打钩的为默认选择。

关闭后,需要保存此工作项模板!

4.验证工作流

新建一个任务,在保存后,为活动状态。此时我们可以看到其下一个状态为"拒绝"或"已关闭"。

当我选择已关闭后,可以看到我们添加的理由

保存后看其状态,可见此流程无法逆转

TFS 中工作项的定制-修改工作流的更多相关文章

  1. TFS中工作项的定制-修改面板

    上一篇文章我们讲到了<TFS 中工作项的订制-修改工作流>,工作流只要我们设计出来,就可以进行定制修改了.这次通过简单的案例,了解一下,工作项的面板如何定制.     1.软件准备     ...

  2. TFS中工作项的定制- 字段功能定义

    参考,翻译此页面All FIELD XML Elements Reference(http://msdn.microsoft.com/en-us/library/ms194953.aspx) 对于每一 ...

  3. 如何自定义TFS中工作项的字段20141010

    如何自定义TFS中工作项的字段 我们以VS2013为例,TFS也是2013版本的: 1. 安装小插件 需要安装Visual Studio Team Foundation Server 2013 Pow ...

  4. 如何彻底删除TFS的工作项字段

    TFS的工作项字段可以在所有工作项类型之间共享.例如自定义了一个字段"验证迭代"(Mycompany.IterationValidation)那么在需求.Bug中都可以添加这个字段 ...

  5. 如何修改TFS 2013中工作项附件大小限制

    默认情况下,TFS工作项的附件大小限制为4MB.我们可以通过调用TFS提供的Web Service将这个限制调整最高到2GB. 调整这个设置的必备条件是你需要拥有TFS应用层管理员的权限.下面来看看如 ...

  6. TFS实现需求工作项自动级联保存

    目前在一个大型的金融客户软件研发平台项目实施和支持过程中,客户的质量管理团队基于该平台以及结合其它的平台数据,针对需求管理和业务过程需要拟定了一套完整的需求提出.评审.设计以及实现的流程.基于这套流程 ...

  7. 从TFS 删除工作项

    一.进入命令执行窗口的方式 1.若你的TFS服务器上安装了VS开发工作,可以按以下步骤,进入命令行方式,图如下: 2.若你TFS上没有安装VS开发工作,可以从你的开发机器上的VS安装目录下(一般情况下 ...

  8. TFS工作项数据统计及相关数据库结构分析

    今天为客户的质量管理部门人员提供TFS咨询过程中,客户的质量管理专家基于TFS提出了一个比较棘手的数据统计需求.需求是这样,客户的数十个软件项目通过质量管理部按照年度版本计划进行软件产品系统的发布,因 ...

  9. 在定制工作项时,把“团队项目”作为变量获取生成版本信息

    有用户最近提出这个需求: 通过工作项定制,新增一个字段用以保存项目Bug的"影响版本"信息,但是需要从当前团队项目的服务器生成纪录中获取版本的选项,类似默认模板中的"发现 ...

随机推荐

  1. Splay树(多操作)——POJ 3580 SuperMemo

    相应POJ题目:点击打开链接 SuperMemo Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 11309   Accept ...

  2. Java虚拟机对锁优化所做的努力(读书笔记)

    锁偏向      是一种加锁操作的优化手段,他的核心思想是:如果一个线程获得了锁,那么就进入偏向模式,当这个线程再次请求锁时,无须在做任何同步操作,因此在几乎没有锁竞争的场合,偏向锁是比较好的优化效果 ...

  3. vi 替换操作

    举例一: ,$s/// 从第一行到最后一行 147都替换为150 举例二: 例:替换当前文件中所有old为new :%s/old/new/g #%表示替换说有行,g表示替换一行中所有匹配点. 举例三: ...

  4. C语言 | 基础知识点笔记

    函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...

  5. zabbix监控客户端本地网络的延时状态

    配置zabbix客户端配置文件 vim /etc/zabbix/zabbix_agentd.conf 添加  Include=/etc/zabbix/zabbix_agentd.d/ 添加脚本对服务器 ...

  6. Android下的HttpClient的使用(9.11)

    1 http://liangruijun.blog.51cto.com/3061169/803097   备注:此博客较早,android 4.0之后不允许在UI线程进行网络操作,所以没有输出结果. ...

  7. android性能优化学习笔记(加快应用程序启动速度:)

    一:安卓中应用程序的启动方式有两种: 冷启动:后台没有该应用进程,系统会重新创建一个进程分配给该应用(所以会先创建和初始化Application类,再创建和初始化MainActivity,包括测量,布 ...

  8. GDBus

    1. https://en.wikipedia.org/wiki/D-Bus In computing, D-Bus (for "Desktop Bus"[4]), a softw ...

  9. 防火墙firewall的设置和查看

    systemctl start firewalld.service # 开启防火墙firewallsystemctl stop firewalld.service # 停止防火墙firewall sy ...

  10. php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法

    1.认识  __set  (在给不可访问属性赋值时,__set() 会被调用) 也就是说你再访问一个类里面没有的属性,会出发这个方法 class A{ private $aa = '11'; publ ...