IDEA创建Activiti工作流开发

IDEA创建Activiti工作流开发

一、 安装Activiti插件

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


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


3. 点击安装、应用:


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

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

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


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


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


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


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


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

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

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


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

7. 接着右键该文件:


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


8. 导出图片


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

三、 解决图片乱码bug

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

-Dfile.encoding=UTF-8


然后重启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


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


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 id="processEngineConfiguration" 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类,用来生成表


@Test

public void crateTable(){

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

}

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


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


代码:

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. 启动流程


代码:

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

    @Test

    public void startProcess(){

        RuntimeService runtimeService=processEngine.getRuntimeService();

        runtimeService.startProcessInstanceByKey("myProcess_1");

}

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


代码:

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. 查询流程明细定义明细


代码:

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. 审核过程完成任务节点审批


代码:

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

    @Test

    public void startProcessApproval(){

        TaskService taskService=processEngine.getTaskService();

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

        String taskId="2504";

        //完成请假申请任务

        taskService.complete(taskId);

}

10. 流程详细步骤:

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

五、 生成流程报表


流程部署表

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`

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容