我国唯一的项目管理信息化门户网站,国内项目管理软件资讯服务提供商

登录 注册
当前位置:首页 > 项目管理软件 > 正文

Activiti6.0在项目管理软件中的运用

2021-02-07 来源:《现代信息科技》作者:上海宝通汎球电子有限公司 钱叶丹
图 3 所示。
流程图对应的文件 audit.xml 部分如下:
上述为一个流程文件部分内容。该文件中的 process 元素用于描述流程信息,而 bpmndi;BPMNDiagram 元素则用于描述流程节点的位置信息。在 process 元素中定义了开始事件 srartEvent、两个 usertask 和结束事件 endEvent 以及连接这些元素的顺序流(sequenceFlow)。
3.2.2 部署工作流
把工作流部署到工作流引擎中: 
@Test 
public void deploy(){ // 获取仓库服务 : 管理流程定义 
RepositoryService repositoryService = processEngine.getRepositoryService(): 
Deployment deploy = repositoryService.createDeployment()// 创建一个部署的构建器 
.addClasspathResource("LeaveActiviti.bpmn")// 添加资源 , 一次只能添加一个
 .name(" 请求单流程 ")// 设置部署的名称
 .category(" 办公类别 ")// 设置部署的类别
 .deploy(): 
System.out.println(" 部署的 id"+deploy.getId()): 
System.out.println(" 部署的名称 "+deploy.getName()):}
3.2.3 执行工作流
指定执行刚才部署的工作流就是我们定义时设置的工作流程图中的当前任务 id: 
@Test 
public void startProcess(){ // 指定执行我们刚才部署的工作流程 
String processDefiKey="leaveBill": // 取运行时服务 
RuntimeService runtimeService = processEngine.getRuntimeService():// 取得流程实例 
ProcessInstance pi = runtimeService.startProcessInstanceByKey(processDefiKey): 
System.out.println(" 流程实例 id;"+pi.getId()):// 流程实例 id 
System.out.println(" 流程定义 id;"+pi.getProcessDefinitionId()):// 输出流程定义的 id}
3.2.4 查看任务信息
根据任务办理人,查看当前任务信息: 
@Test 
public void queryTask(){// 任务的办理人 
String assignee=" 办理人 ": // 取得任务服务 
TaskService taskService = processEngine.getTaskService(): // 创建一个任务查询对象 
TaskQuery taskQuery = taskService.createTaskQuery():// 办理人的任务列表 
List list = taskQuery.taskAssignee(assignee)//指定办理人
 .list(): // 遍历任务列表 
if(list!=null&&list.size()>0){
 for(Task task;list){ 
System.out.println(" 任务的办理人 : "+task.getAssignee()): 
System.out.println(" 任务的 id: "+task.getId()): 
System.out.println(" 任务的名称 : "+task.getName()):
}}}
3.2.5 处理当前任务
当前任务的 id 已经查询出来了,处理 id 为 304 的这个任务: 
@Test 
public void compileTask(){ 
String taskId="304": //taskId: 任务 id 
processEngine.getTaskService().complete(taskId): 
System.out.println(" 当前任务执行完毕 "):}
3.2.6 删除流程
删除部署 id=101 这个流程定义的数据:
 @Test
public void deleteProcessDefi(){ 
// 通过部署 id 来删除流程定义 
String deploymentId="101":
 processEngine.getRepositoryService().deleteDeployment(deploymentId):
 }
4 Activiti 问题总结
在实际的项目开发过程中,笔者不断遇到了一些问题与挑战,同时也积累了一些经验。从 Activiti 数据库的连接;到排他网关与并行网关的不同设置;再到执行监听器的配置与使用,任务监听器的配置与使用等等的入坑事件。下面总结几个遇到的比较典型的问题。
4.1 会签功能
实际项目中会碰到某个任务节点需要实现会签功能的要求,就是指一个任务需要多人进行审批,多人都审批通过后,流程才能继续往下走。目前的实现方式为:
(1)启动这个流程图时,遍历所有任务,获取当前任务的办理人;
(2)将任务办理人做成一个集合,每个办理人元素用逗号分隔;
(3)将这个集合的键以 Publicitylist_ 加上当前的元素ID,值以前面获取到的集合放入 Activiti 上下文。将这个参数作为 Activiti 启动参数放入即可。
4.2 回退功能
实际项目中还会碰到某个任务节点需要实现回退功能的要求。就是指能够回退到流程图上的任意节点,Activiti 无法满足这样的项目需求,就需要进行二次开发封装。目前的实现方式为:
(1)获取当前任务所在的节点;
(2)获取当前节点的流出方向;
(3)记住当前节点的流出信息,并将当前节点的流出信息清空;
(4)获取目标节点;
(5)创建新的方向;
(6)将新的方向设置为当前节点的流出方向;
(7)完成当前任务;
(8)还原当前节点的流出方向。
5 结 论
在实际的项目开发过程中,工作流管理的好处是能实实在在感受到的,工作流管理在项目管理软件中是有很大的发展空间的。笔者简要总结了以下几点:软件的过程控制可见,清晰明了,客户满意度提高;工作流的可配置性提高,直接减少了软件开发、后期维护成本;增强了系统的适应性,能够快速适应客户提出的流程变化。
参考文献:
[1] 程序人生丶 .activiti 入坑总结 [EB/OL].(2019-02-20).https://www.jianshu.com/p/5c0e43701d51.html.
[2] Java3y.Activiti 就是这么简单 [EB/OL].(2018-03-21).https://www.jianshu.com/p/aa09fe0594ef.html.
[3] jgroup. 俯瞰开源工作流引擎 Activiti [EB/OL].(2018-08-27).https://blog.csdn.net/jgroup/article/details/82116523.html.
分享到:

免责声明:
  1、项目管理信息化网发布的所有资讯与文章是出于为业界传递更多信息之目的,并不意味着赞同其观点或证实其描述。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请浏览者仅作参考,并请自行核实相关内容。
  2、本站部分内容转载于其他网站和媒体,版权归原作者或原发布媒体所有。如文章涉及版权等问题,请联系本站,我们将在两个工作日内进行删除或修改处理。敬请谅解!

延伸阅读:

more>

会议活动

more>

公开课

more>

PMO

Copyright © 2021 项目管理信息化网 版权所有 京ICP备17062359号-9 如转载本站文章,请注明原作者和原发布媒体

本着互联网分享精神,本站部分内容转载于其他网站和媒体,如内容涉及版权等问题,请联系本站进行删除或修改处理

客服电话:010-89506650 89504891 非工作时间可联系:18701278071(微信) QQ在线:574888227

新闻与原创文章投稿:tougao#cpmta.com 客服邮箱:info#cpmta.com(请将#换成@)

我国唯一的项目管理信息化门户网站,国内项目管理软件资讯服务提供商,隶属卓橡公司

项目管理信息化微信公众号

PMO大会微信公众号