JIRA号称可以跟踪任何事务,让JIRA的流程来匹配团队的工作流程,而不是让你的团队适应JIRA的工作流程。但是在实践中,有些有些流程用JIRA还是比较困难的,比如并联审批流程,一个并联审批流程需求大概如下:

  • 同时指定多个评审人
  • 只有评审人才能够对该问题进行审批操作
  • 评审人都能够及时收到通知
  • 每个评审人都能够独立进行审批
  • 最后一个评审人审批完毕时,自动更改状态为完成审批
  • 评审负责人要清楚了解哪些人已经评审了,哪些还没有

这个需求JIRA本身的功能就很难满足,必须通过插件来完成,这也是JIRA功能的强大之处,可以通过插件来扩展其功能。这里我们需要安装一个Script Runner插件:

https://marketplace.atlassian.com/plugins/com.onresolve.jira.groovy.groovyrunner

这是一个免费的插件,有了这个插件你就可以在工作流中编写脚本,你的工作流想怎么执行就怎么执行。

下面分享一下我的并联审批解决方案:

1,先安装好Script Runner插件。

2,增加两个自定义字段”评审人“,”已评审“,都为多用户选择字段。“评审人”用于在创建评审问题时,指定参加评审的人员,“已评审”字段用于在评审过程中,保存已经评审的人,剩下还未评审的人保留在“评审人”字段中。

3,定制并联审批流程,我的流程如下:

4,设置审批动作的权限,点击工作流中的”审批(71)”动作,在弹出的菜单中选择“View Conditions”,添加一个动作的触发条件:

这个“Script Condition”是只有安装了Script Runner之后才有的,选择它就可以通过执行脚本的方式来判断是否有权限执行这个动作,这里我们选择内置脚本”Allows the transition if this query matches a JQL query ”来执行判断,这个脚本执行一个JQL查询,如果满足就允许这个动作,所以JQL就这么写:

  • 评审人 in (currentUser())

这个表示当前用户为评审人中的一个时才允许这个动作。

5,让评审人都能够及时收到通知。JIRA的通知功能很强大,可以通过邮件、RSS、@、聊天等方式。要让评审问题在“开始审批”之后,通知相关的评审人,这里有两种方式,一种比较简单,就是修改通知方案,将“评审人”添加到通知设置中,如下:

另一种方案是采用Script Runner的脚本执行的方式,该脚本是在“开始审批”这个动作的“Post Functions”中执行的,如下:

选择执行脚本文件的方式,如下:

这里要注意,这个路径是系统的文件路径,不是http路径,我设置的时候一直没搞清楚是什么路径,又不好调试,只好逐一测试,按绝对路径写全就可以。

脚本内容参见附件中的startapproval.groovy,该脚本的设计思想就是开始审批动作执行之后,将评审人都加到关注列表中,然后通知方案就会通知到关注的人。

这个脚本的内容功能正确,但是写的很乱,有兴趣就凑合着看吧,因为我完全不懂java,所以脚本也是参考网上的众多例子,以及script runner的内置例子写成的。

6,最后一个评审人审批完毕时,自动更改状态为审批完成。这个功能可有可无,但是对于一个自动化系统来说,有这个自动功能当然更好,这个也试用Script Runner实现,基本原理就是,评审人点击”审批“之后,如果”评审人“字段为空了,也就是都评审完了(每评审一个,会将评审人添加到”已评审“字段中),那么就执行”审批完成“这个动作。

这个脚本在”审批“动作的Post Functions中设置,同样选择脚本文件的方式,脚本内容参见附件中的approval.groovy。

7,评审负责人能够了解哪些已经评审了,哪些还在评审当中。这个功能也在approval.groovy中执行,基本原理是每个评审人评审完毕后,将其从”评审人“字段中删除,添加到”已评审“字段中。

8,设置”重新审批“的动作,重新审批的意思是,当评审负责人发现某个评审人的评审有问题时,可以叫其重新进行审批,所以需要将其从”已评审“中去掉,或者需要添加评审人时,也可以使用”重新审批“这个动作。所以”重新审批“的PostFunctions中需要执行两个脚本,依次是reapproval.groovy和startaporoval.groovy,内容参见附件。

9,在面板中添加一个过滤器,过滤出需要当前用户参与评审的问题,下面这个就是我的”指定给我的“过滤器:

  1. issuetype = 审批 AND status in (审批中) AND (assignee in (currentUser()) OR 评审人 in (currentUser())) OR issuetype = 审批 AND status in (审批完成) AND assignee in (currentUser()) OR issuetype != 审批 AND status in (Open, "In Progress", Reopened, Resolved) AND assignee in (currentUser()) ORDER BY updated

JIRA中的并联审批流程定制的更多相关文章

  1. 使用Visual Studio Team Services敏捷规划和项目组合管理(七)——流程定制

    使用Visual Studio Team Services敏捷规划和项目组合管理(七)--流程定制 在Team Services中,可以通过流程定制工作追踪体验.流程定义了工作项跟踪系统的构建部分,以 ...

  2. JIRA中的核心概念

    转载自:http://blog.csdn.net/zhengxy2011/article/details/6940380 1.1.1   问题 JIRA跟踪问题(Issue),这些问题可以是bug,功 ...

  3. salesforce 零基础学习(四十六)动态美观显示列表中记录的审批状态

    项目中,申请者申请某些事项以后,常常需要在申请列表中查看当前申请的记录所在的审批状态,动态美观的显示状态可以使UI更符合客户要求,比如下面这样. 以Goods__c表为例,申请者申请的一些采购以前需要 ...

  4. YbSoftwareFactory 代码生成插件【十六】:Web 下灵活、强大的审批流程实现(含流程控制组件、流程设计器和表单设计器)

    程序=数据结构+算法,而企业级的软件=数据+流程,流程往往千差万别,客户自身有时都搞不清楚,随时变化的情况更是家常便饭,抛开功能等不谈,需求变化很大程度上就是流程的变化,流程的变化会给开发工作造成很大 ...

  5. FS BPM 业余研发(用户详细操作手册--单人串行/并行)之 深圳分公司技术部请假审批流程

    1.FS BPM 简介 BPM软件中BPM是英文字母缩写,大致有二个意思.第一.Business Process Management,即业务流程管理,是一套达成企业各种业 务环节整合的全面管理模式. ...

  6. 【转】基于easyui开发Web版Activiti流程定制器详解(一)——目录结构

    题外话(可略过): 前一段时间(要是没记错的话应该是3个月以前)发布了一个更新版本,很多人说没有文档看着比较困难,所以打算拿点时间出来详细给大家讲解一下,由于本人平时要工作还要陪老婆和孩子而且还经营着 ...

  7. 如何在JIRA中有效使用关注和@提及 我正在关注的问题 提及我的问题 在仪表板上显示

    如何在JIRA中有效使用关注和@提及http://bbs.51testing.com/forum.php?mod=viewthread&tid=1157043&fromuid=1530 ...

  8. Android中Linux suspend/resume流程

    Android中Linux suspend/resume流程首先我们从linux kernel 的suspend说起,不管你是使用echo mem > /sys/power/state 或者使用 ...

  9. shell中命令的执行流程

    在shell中,一个命令有3中写法: 1 可以直接写(Normal Command) 2 可以放在双引号中("Command") 3 可以放在单引号中('Comand') 这3中写 ...

随机推荐

  1. 【一起来烧脑】一步React.JS学会体系

    [外链图片转存失败(img-cn4fbVDq-1563575047348)(https://upload-images.jianshu.io/upload_images/11158618-8c6f3d ...

  2. (23)打鸡儿教你Vue.js

    实例: 模板语法 vue-router,vuex以及调式方法介绍 打包部署: npm run build Webpack 目前无论在求职还是工作中,使用越来越普及.而想要学懂,学会Webpack更绝非 ...

  3. 记录一个奇怪的异常,无法还原此异常。 普通的Maven Java Web 项目

    项目 : 普通的Maven Java Web 项目 操作记录: 使用 Maven 构建项目,指令 tomcat7:run 无异常 但使用 eclipse 的 tomcat 运行项目,报此异常. 后面从 ...

  4. CF1209题解

    E 每列都可以沿下滚动若干次,使得各行最大值之和最大 对每列的元素计算最大值,降序排,显然取前\(min(n,m)\)个列处理即可 比较巧妙的动规,设\(f(i,S)\)为前\(i\)列,已经确定最大 ...

  5. MySQL枚举类型enum字段在插入不在指定范围的值时, 是否是"插入了enum的第一个值"?

    刚刚在看<<深入浅出MySQL>>一书的"ENUM类型"一节, 以下面的代码举例, 得出结论: "还可以看出对于不在ENUM指定范围内的值时, 并 ...

  6. iis网站搭建http访问的文件服务器

    1.首先打开Internet信息服务(IIS)管理器,选择新建网站,如果没有Internet信息服务(IIS)管理器,可以在控制面板添加,按照 控制面板\程序\程序和功能,点击 打开或关闭Window ...

  7. 启动项目报错:Unsupported major.minor version 52.0

    解决方案: 确保Build Path或者电脑配置的环境变量版本号,和pom中的一致 Exception in thread "main" java.lang.Unsupported ...

  8. C3线性化

    https://zh.wikipedia.org/wiki/C3线性化 在计算机科学中,C3算法主要用于确定多重继承时,子类应该继承哪一个父类的方法,即方法解析顺序(Method Resolution ...

  9. 深入浅出ES6教程『async函数』

    大家好,本人名叫苏日俪格,大家叫我 (格格) 就好,在上一章节中我们学到了Symbol & generator的用法,下面我们一起来继续学习async函数: async [ə'zɪŋk]:这个 ...

  10. Tomcat connection & session timeout settings

    # connection timeout for globle web application cat /home/soft/apache-tomcat-7.0.92/conf/server.xml ...