IDEA中工作流Activiti入门程序

有关activiti的部署已经实现详情见上一篇,接下来进行流程定义

  • 一、流程定义

首先选中存放图形的目录(本次我们选择 resources 下的 diagram 目录),点击菜单:New-BpmnFile,如下图所示:在这里插入图片描述
名称定义为holiday(默认扩展名为 bpmn),就可以看到进入了流程设计页面,如图所示:
在这里插入图片描述
拖动右侧菜单栏菜单,绘制流程图,如下图所示,
在这里插入图片描述
我们可以根据自己的流程将其改为相应的汉字,如下图所示:
在这里插入图片描述
将图标连接起来,流程id设置为holiday,name为请假流程,如下图所示:在这里插入图片描述
指定任务的负责人,选定节点后设置Assignee值,如下图所示:
在这里插入图片描述
画完图后会发现没有png文件,这时我们需要将bpmn文件重命名为xml文件,把后缀改成xml,如下图所示:在这里插入图片描述
重命名完成后,右击如下图所示:
在这里插入图片描述
然后保存到与刚才创建文件的一个文件夹内就可以了在这里插入图片描述在这里插入图片描述
保存图片后,发现图片中文乱码,解决方法:
找到IDEA的安装目录,找到bin目录
比如我的路径:D:\develop\IntelliJ IDEA 2018.3\bin
找到这两个文件
在这里插入图片描述具体要修改哪个文件,由你安装的IDEA的版本来决定,如果你安装了64位版本的IDEA,那么就修改2,具体修改方法:在文件后面追加一条命令:
-Dfile.encoding=UTF-8
在这里插入图片描述
注意:不要有任何空格,否则重启IDEA时会打不开,重启IDEA,把原来的png图片删掉,再重新生成,即可解决乱码问题。

  • 二、接下来编写代码部署流程定义
    部署流程定义就是要将上边绘制的图形即流程定义(.bpmn)部署在工作流程引擎 activiti 中,方法如下:在这里插入图片描述
public static void main(String[] args) {
                    // 1、获取ProcessEngine对象
                    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
                    // 2、获取RepositoryService资源
                    RepositoryService repositoryService = processEngine.getRepositoryService();
                    //3、部署流程
                    Deployment deployment = repositoryService.createDeployment()
                            .addClasspathResource("diagram/holiday.bpmn")
                            .addClasspathResource("diagram/holiday.png")
                            .name("请假流程")
                            .deploy();
                    System.out.println(deployment.getName());
                    System.out.println(deployment.getId());
                }

运行程序,部署完成后activiti操作的表如下
act_re_deployment: 部署信息
act_re_procdef :流程定义的一些信息
act_ge_bytearray: 流程定义的bpmn文件以及png文件

  • 三、部署流程实例
    流程定义部署在 activiti 后就可以通过工作流管理业务流程了,也就是说上边部署的请假申请流程可以使用了。针对该流程,启动一个流程表示发起一个新的请假申请单,这就相当于 java 类与 java 对象的关系,类定义好后需要 new 创建一个对象使用,当然可以 new 多个对象。对于请假申请流程,张三发起一个请假申请单需要启动一个流程实例,请假申请单发起一个请假单也需要启动一个流程实例。代码如下: 在这里插入图片描述
      // 1、获取ProcessEngine对象
         ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
         // 2、获取RuntimeService资源
         RuntimeService runtimeService = processEngine.getRuntimeService();
         // 3、创建流程实例ProcessInstance
         ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holidays");
         System.out.println("部署流程ID:"+processInstance.getDeploymentId());
         System.out.println("流程实例ID:"+processInstance.getId());
         System.out.println("活动ID:"+processInstance.getActivityId());
    

运行程序,启动流程实例完成后activiti操作的表
act_hi_actinst: 已完成的活动信息
act_hi_identitylink: 参与者信息
act_hi_procinst: 流程实例
act_hi_taskinst: 任务实例
act_ru_execution: 执行表
act_ru_identitylink: 参与者信息
act_ru_task: 任务

  • 四、任务查询
    流程启动后,各个任务的负责人就可以查询自己当前需要处理的任务,查询出来的任务都是该用户的待办任务。在这里插入图片描述
/**
 - 任务查询
*/
public class ActivitiTaskQuery {
public static void main(String[] args) {
// 1、获取ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 2、获取TaskService资源
TaskService taskService = processEngine.getTaskService();
// 3、根据流程定义的key、负责人assignee来实现当前用户的任务列表查询
List<Task> taskList = taskService.createTaskQuery().
processDefinitionKey("holidays").
taskAssignee("zhangsan").list();
for (Task task : taskList) {
System.out.println("流程实例ID:"+task.getProcessDefinitionId());
System.out.println("任务ID:"+task.getId());
System.out.println("任务负责人:"+task.getAssignee());
System.out.println("任务名称:"+task.getName());
}

执行程序,运行结果如下:得到任务ID
在这里插入图片描述

  • 五、任务处理
    任务负责人查询出待办任务,选择任务进行处理,完成任务。
    在这里插入图片描述
/**
* 完成任务
*
* 处理当前用户的任务activiti操作的表
* act_hi_actinst 已完成的活动信息
* act_hi_identitylink 参与者信息
* act_hi_procinst 流程实例
* act_hi_taskinst 任务实例
* act_ru_execution 执行表
* act_ru_identitylink 参与者信息
* act_ru_task 任务
*/
public class ActivitiTaskComplete {
	public static void main(String[] args) {
	// 1、获取ProcessEngine对象
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	// 2、获取TaskService资源
	TaskService taskService = processEngine.getTaskService();
	// 3、处理任务,结合当前用户任务列表的查询的任务ID2505
	taskService.complete("2505");
 	 }
}

以此类推,我们可以根据查询出来的任务ID完成完整的任务流程。另外,部署流程的时候有可能是zip压缩包格式的,这时采用以下方式:
在这里插入图片描述

//压缩包方式实现流程的部署
public static void main(String[] args) {
	// 1、获取ProcessEngine对象
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	// 2、获取RepositoryService资源
	RepositoryService repositoryService = processEngine.getRepositoryService();
	// 3、转换出InputStream流对象
	InputStream inputStream = ActivitiLiuChengBuShu.class.getClassLoader()
	.getResourceAsStream("diagram/diagramBPMN.zip");
	// 4、将InputStream流转换成ZipInputStream流
	ZipInputStream zipInputStream = new ZipInputStream(inputStream);
	// 5、部署流程
	Deployment deployment = repositoryService.createDeployment()
	.addZipInputStream(zipInputStream)
	.name("请假流程")
	.deploy();
	System.out.println(deployment.getName());
	System.out.println(deployment.getId());
}

ProcessEngineConfiguration类,主要作用是加载activiti.cfg.xml配置文件
ProcessEngine类,只要作用是帮助我们可以快速得到各个Service接口,并且可以生成activiti工作环境。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值