IDEA创建Activiti工作流开发

摘要:
---Activiti依赖项导入--˃org。activitiactivity-spring5.18.0org。activiti</groupId><artifactId>活动引擎</artifactId><version>5.18.0</version><exclusion><artifactId>slf4j api</artifactId><groupId>org。slf4j</groupId></exclusion><artifactId>spring表示</artifactId><groupId>org。springframeworkjackson core aslorg。科德豪斯。jacksoncommons-lang3org。阿帕奇。commons</groupId></exclusion><artifactId>commons lang3</artifactId><groupId>。阿帕奇。commons2.在src/main/resources a BPMN文件下创建一个新的BPMN文件3.绘制流程图后,更改相应元素的名称和受让人,然后单击空白区域更改流程ID和名称,如下图所示:4.然后构建数据库,并创建activiti.cfg。资源下的xml˂?

一、 安装Activiti插件

1. 首先打开FIle的setting功能,搜索Plugins: 

 
IDEA创建Activiti工作流开发第1张

2. 输入actiBPM,然后点击搜索:

IDEA创建Activiti工作流开发第2张

3. 点击安装、应用:

IDEA创建Activiti工作流开发第3张

安装好之后点击apply(应用),之后重启idea

二、 创建Activiti工作流并导出流程图图片

1. 重启IDEA之后,点击File文件中的New下的BpmnFile:

 
IDEA创建Activiti工作流开发第4张

2. 给这个文件起好名字后拖动右边的图标到左边:

IDEA创建Activiti工作流开发第5张

3. 把鼠标放到节点中心,中心会变成黑白扇形:

IDEA创建Activiti工作流开发第6张

4. 拖拽连线到另一个图标进行画图:

IDEA创建Activiti工作流开发第7张

5. 左键单击节点就会出现左边的修改按钮:

IDEA创建Activiti工作流开发第8张

Id命名规范: 要以字母或下划线 () 字符开头,后接 XML 规范中允许的任意字母、数字、重音字符、变音符号、句点 (.)、连字符 (-) 和下划线 () 的组合。

否则》》》(报org.activiti.bpmn.exceptions.XMLException: cvc-datatype-valid.1.2.1: '' 不是 'NCName' 异常)

6. 接着修改文件的后缀名为.xml:

IDEA创建Activiti工作流开发第9张

打开该文件可以看到,流程图以xml代码格式呈现(当然也可以在重命名改回去)

7. 接着右键该文件:

IDEA创建Activiti工作流开发第10张

如果没有出现图中的按钮,可以按快捷键Ctrl+alt+Shift+U,按了以后,以后这个图标就会出现了

IDEA创建Activiti工作流开发第11张

8. 导出图片

IDEA创建Activiti工作流开发第12张

可以点击该按钮保存这图片,后缀名自己设置下.png

三、 解决图片乱码bug

如果图片中有中文会出现乱码,需要在这两个文件下的后面都加上

-Dfile.encoding=UTF-8

 
IDEA创建Activiti工作流开发第13张
 
IDEA创建Activiti工作流开发第14张

然后重启IDEA,把原来的PNG图片删掉,再生成一次就不会出现乱码了

四、 测试(test)工作流开发

1. 引入pom.xml依赖

<!--JUnit测试-->

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>4.12</version>

        </dependency>

<!--- Activiti依赖导入 -->

        <dependency>

            <groupId>org.activiti</groupId>

            <artifactId>activiti-spring</artifactId>

            <version>5.18.0</version>

        </dependency>

        <dependency>

            <groupId>org.activiti</groupId>

            <artifactId>activiti-engine</artifactId>

            <version>5.18.0</version>

            <exclusions>

                <exclusion>

                    <artifactId>slf4j-api</artifactId>

                    <groupId>org.slf4j</groupId>

                </exclusion>

                <exclusion>

                    <artifactId>spring-eans</artifactId>

            <groupId>org.springframework</groupId>

                </exclusion>

                <exclusion>

                    <artifactId>jackson-core-asl</artifactId>

                    <groupId>org.codehaus.jackson</groupId>

                </exclusion>

                <exclusion>

                    <artifactId>commons-lang3</artifactId>

                    <groupId>org.apache.commons</groupId>

                </exclusion>

                <exclusion>

                    <artifactId>commons-lang3</artifactId>

                    <groupId>org.apache.commons</groupId>

                </exclusion>

            </exclusions>

        </dependency>

2. 在src/main/resources下面新建一个BPMN文件

(同上文操作的创建工作流)

3. 画完流程图之后要更改对应元素的name和assignee,Id

 
IDEA创建Activiti工作流开发第15张

然后点击空白地方,把流程ID和名称改掉,如下图:

 
IDEA创建Activiti工作流开发第16张

4. 之后把数据库建好,建一个activiti.cfg.xml在resource下面

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

            <bean class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

    <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>

              <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/demo?useUnicode=true&amp;characterEncoding=utf8"></property>

    <property name="jdbcUsername" value="root"></property>

    <property name="jdbcPassword" value="root"></property>

    <property name="databaseSchemaUpdate" value="true"></property>

  </bean>

</beans>

5. 新建一个java类,用来生成表

 
IDEA创建Activiti工作流开发第17张

@Test

public void crateTable(){

              ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();

}

运行这个类之后数据库里面会生成24张表, 23-25张表都是有可能的,我这里是生成了24张表,多了一张act_evt_log,事件处理日志表。最主要的还是那23张表

 
IDEA创建Activiti工作流开发第18张

6. 之后就可以开始部署流程

 
IDEA创建Activiti工作流开发第19张

代码:

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

    //部署流程

    @Test

    public void deployProcess(){

        RepositoryService repositoryService=processEngine.getRepositoryService();

        DeploymentBuilder builder=repositoryService.createDeployment();

        builder.addClasspathResource("myWork.bpmn");

        builder.deploy();

}

部署之后就可以在act_re_procdef表中看到对相应的流程信息

7. 启动流程

 
IDEA创建Activiti工作流开发第20张

代码:

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

    @Test

    public void startProcess(){

        RuntimeService runtimeService=processEngine.getRuntimeService();

        runtimeService.startProcessInstanceByKey("myProcess_1");

}

启动流程之后就会有相应的任务产生,存在act_ru_task表中,可以查看任务节点

 
IDEA创建Activiti工作流开发第21张

代码:

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

    @Test

    public void queryProcess(){

        TaskService taskService=processEngine.getTaskService();

        String assigne="student";

        List<Task> tasks=taskService.createTaskQuery().taskAssignee(assigne).list();

        int size=tasks.size();

        for(int i=0;i<size;i++){

            Task task=tasks.get(i);

        }

        for (Task task:tasks){

            System.out.println("taskId=" +"流程任务节点信息ID:"+ task.getId() +

                    ",taskName:" +"流程任务节点名称ID:" +task.getName() +

                    ",assignee:" + "流程任务节点接受人:"+task.getAssignee() +

                    ",createTime:" +"流程任务节点创建时间:"+ task.getCreateTime());

        }

    }

首次运行的时候这个没有输出,因为第一次运行的时候扫描act_ru_task的表里面是空的,但第一次运行完成之后里面会添加一条记录,之后每次运行里面都会添加一条记录

8. 查询流程明细定义明细

 
IDEA创建Activiti工作流开发第22张

代码:

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

@Test

public void queryProcdef(){

        RepositoryService repositoryService=processEngine.getRepositoryService();

                  ProcessDefinitionQuery query=repositoryService.createProcessDefinitionQuery();

        query.processDefinitionKey("myProcess_1");

        List<ProcessDefinition> pds=query.list();

        System.out.println(">>>>>>>>>>>>>>>>>>>>>");

        for (ProcessDefinition pd:pds){

            System.out.println("ID:"+pd.getId()+",NAME:"+pd.getName()+

                    ",KEY:"+pd.getKey()+",VERSION:"+pd.getVersion()+

                    ",RESOURCE_NAME:"+pd.getResourceName()+

                    ",DGRM_RESOURCE_NAME:"+pd.getDiagramResourceName());

        }

}

9. 审核过程完成任务节点审批

 
IDEA创建Activiti工作流开发第23张

代码:

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

    @Test

    public void startProcessApproval(){

        TaskService taskService=processEngine.getTaskService();

        //taskId 就是查询任务中的 ID

        String taskId="2504";

        //完成请假申请任务

        taskService.complete(taskId);

}

10. 流程详细步骤:

部署流程》》》》》》启动流程》》》》》》查询用户id》》》》用户完成任务》》》流程结束

五、 生成流程报表

 
IDEA创建Activiti工作流开发第24张

流程部署表

SELECT * FROM `act_re_deployment`

流程定义表

SELECT * FROM `act_re_procdef`

资源文件表

SELECT * FROM `act_ge_bytearray`

系统配置表

SELECT * FROM `act_ge_property`

启动流程实例涉及到的表

流程实例运行时 执行对象表

SELECT * FROM `act_ru_execution`

流程实例运行时 身份联系表

SELECT * FROM `act_ru_identitylink`

流程实例运行时 用户任务表

SELECT * FROM `act_ru_task`

活动节点历史表

SELECT * FROM `act_hi_actinst`

身份联系表 历史

SELECT * FROM `act_hi_identitylink`

流程实例表 历史

SELECT * FROM `act_hi_procinst`

历史任务表

SELECT * FROM `act_hi_taskinst`

 

免责声明:文章转载自《IDEA创建Activiti工作流开发》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇转:jQuery 遍历Table中tr中的td中的内容R:安装、导入各种包。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Kubernetes 已经成为云原生时代的安卓,这就够了吗?

​简介:本文将介绍如何在 Kubernetes 上构建新的应用管理平台,提供一层抽象以封装底层逻辑,只呈现用户关心的接口,使用户可以只关注自己的业务逻辑,管理应用更快更安全。 作者:司徒放 导语:云原生时代,直接使用 Kubernetes 和云基础设施过于复杂,如用户需要学习很多底层细节、应用管理的上手成本高、容易出错、故障频频。随着云计算的普及,不同云...

Unity进阶之ET网络游戏开发框架 02-ET的客户端启动流程分析

版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top 优梦创客的游戏讲堂:https://91make.ke.qq.com 『优梦创客』的微信公众号:umaketop 您可以自由转载,但必须加入完整的版权声明...

基于flowable6.5的第一个demo

  因工作需要,本人现在在学习Flowable工作流。此处将自己学习和测试通过的demo展示给大家,希望对同为初学者的你有所帮助。   对于什么是工作流,flowable和activiti的区别,各位可自行百度,此处不再赘述。   直接上demo:   1、环境搭建:jdk1.8+maven+eclipse  创建标准的maven项目,项目框架截图如下:...

【腾讯Bugly干货分享】Android 插件技术实战总结

本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/1p5Y0f5XdVXN2EZYT0AM_A 前言 安卓应用开发的大量难题,其实最后都需要插件技术去解决。 现今插件技术的使用非常普遍,比如微信、QQ、淘宝、天猫、空间、携程、大众点评、手机管家等等这些大家在熟悉...

当在SCOM 2007 SP1环境下遭遇SQLSERVER进程持续占用CPU 100%的解决办法

当在SCOM 2007 SP1环境下遭遇SQLSERVER进程持续占用CPU 100%的解决办法 错误日志: 在数据仓库中存储数据失败。将重试操作。异常“SqlException”: 超时时间已到。在操作完成之前超时时间已过或服务器未响应。 一个或多个工作流受此影响。 工作流名称: Microsoft.SystemCenter.DataWarehous...

一个被遗忘的ccflow工作流引擎自定义表单开发模式

定义概述:一个已经做好的表单需要绑定到节点上 , 该文章在驰骋工作流引擎流程引擎设计器中。 自定义表单工作模式:流程控制按钮区域是ccflow来完成,表单区域是放在控制区域下面的框架里,如下图所示。 注意:蓝色边框一下是一个框架,框架里面的界面是一个url,这个就是自定义表单。 应用背景:这种类型是解决我自己已经有了一个成熟稳定的产品或者项目,里面的...