activiti入门实例教程

公司新项目打算使用activiti进行,今天首次接触,根据网上示例做了个demo。

一、 准备工作

下载activiti-5.22.0.zip并解压,地址:

http://sqdownd.onlinedown.net/down/10814_20170622161645.zip

下载运行所需jar包,地址:

http://download.csdn.net/download/ppingguop/10225533

下载MySQL-5.7.21-winx64下载,地址:

https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-community-5.5.59.0.msi

下载MySQL驱动jar包,地址:

http://sf.jb51.net:81/201409/tools/mysql-connector-java(jb51.net).rar

下载Activiti BPMN 2.0 designer,地址:

http://download.csdn.net/download/a825564615/9527761

JDK1.8,地址:

自己去官网找吧。。。。

MyEclipse/Eclipse,地址:

同上

二、 安装插件

在${youpath}\MyEclipse 2017 CI\dropins下新建文件夹activiti,并新建activiti.link文件,内容仅写:path=${youpath}\\MyEclipse 2017CI\\dropins\\activiti\\site

将下载好的Activiti BPMN 2.0 designer解压得到一个jars文件夹和activiti-designer-5.14.1.zip。

将jars文件夹中的jar包全选复制,粘贴进${youpath}\MyEclipse 2017 CI\plugins下。

将activiti-designer-5.14.1.zip解压至${youpath}\MyEclipse 2017 CI\dropins下。

activiti入门实例教程_第1张图片

重新启动eclipse/MyEclipse后,再次new工程的时候会出现:

activiti入门实例教程_第2张图片

插件安装完成。

三、 新建工程

1、 点击File àNew àotheràActiviti Project,创建一个Activiti工程。

2、 导入jar包,在工作路径下新建文件夹,为lib,将activiti-5.22.0.zip解压后libs中jar包全部复制进工程中的lib文件夹,同时把MySQL的驱动jar包复制进该文件夹。然后全选à右键àBuildPath,不赘述了。

activiti入门实例教程_第3张图片

3、 安装MySQL,过程不赘述,详情百度经验:

https://jingyan.baidu.com/article/363872ec2e27076e4ba16fc3.html

四、 初始化环境

初始化数据库环境,

建库命令: create databaseitcast0711activiti default character set utf8;

然后两种方法进行建表,我采用代码进行初始化。

1、在该工程的src/main/java下新建 package为test,在该包下新建JunitTest.java。

复制如下代码并运行:输入你的数据库用户名和密码

package test;

importorg.activiti.engine.ProcessEngine;

importorg.activiti.engine.ProcessEngineConfiguration;

importorg.activiti.engine.ProcessEngineConfiguration;

importorg.junit.Test;

 

publicclass JunitTest {

    /** 使用代码创建工作流需要的23张表 */ 

    @Test 

    publicvoid createTable(){ 

        ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration 

                .createStandaloneProcessEngineConfiguration(); 

        processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver"); 

        processEngineConfiguration 

                .setJdbcUrl("jdbc:mysql://localhost:3306/itcast0711activiti?useUnicode=true&characterEncoding=utf8"); 

        processEngineConfiguration.setJdbcUsername("root"); 

        processEngineConfiguration.setJdbcPassword("****"); 

        /*

         * public static final StringDB_SCHEMA_UPDATE_FALSE = "false";

         * 不能自动创建表,需要表存在 public static final StringDB_SCHEMA_UPDATE_CREATE_DROP

         * = "create-drop";先删除表再创建表 public static final String

         * DB_SCHEMA_UPDATE_TRUE ="true";如果表不存在,自动创建表

         */ 

 

        processEngineConfiguration 

                .setDatabaseSchemaUpdate(processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); 

        // 工作流的核心对象,ProcessEngine对象 

        ProcessEngine processEngine = processEngineConfiguration 

                .buildProcessEngine(); 

        System.out.println("processEngine:" + processEngine); 

 

    } 

   

}

2、或采用配置文件的方式生成表。

在该工程的src/test/resources下新建文件,命名为:activiti.cfg.xml

将如下内容copy至该文件:(修改数据库用户名和密码)

 

 

     

     

         

         

         

         

     

         

         

     

        


同时在JunitTest类中运行:

/** 使用配置文件创建工作流需要的23张表 */ 

    @Test 

    publicvoid creteTable_2() { 

        // ProcessEngineConfigurationprocessEngineConfiguration = 

        // ProcessEngineConfiguration 

        //.createProcessEngineConfigurationFromResource("activiti.cfg.xml"); 

        // 工作流的核心对象,ProcessEngine对象 

        ProcessEngine processEngine = ProcessEngineConfiguration 

                .createProcessEngineConfigurationFromResource( 

                        "activiti.cfg.xml").buildProcessEngine(); 

        System.out.println("processEngine:" + processEngine); 

}

此时在数据中可看见成功生成的23张表:

activiti入门实例教程_第4张图片

五、画流程图

在diagrams下新建一个Activiti Diagram:右击diagrams->new->others->Activiti Diagram,命名为helloword。如下图:

activiti入门实例教程_第5张图片

选中第一个“提交申请”,将Properties窗口中的Main config中的Assignee改为“张三”,依次将下面两个改为“李四”、“王五。”并保存。如下图:

activiti入门实例教程_第6张图片

六、运行DEMO

在该工程的src/main/java下新建package为excute,新建类HelloWorld.java。

将如下代码copy至该类中:

packageexcute;

 

importjava.util.List;

 

importorg.activiti.engine.ProcessEngine;

importorg.activiti.engine.ProcessEngines;

importorg.activiti.engine.repository.Deployment;

import org.activiti.engine.repository.ProcessDefinition;

importorg.activiti.engine.runtime.ProcessInstance;

importorg.activiti.engine.task.Task;

importorg.junit.Test;

 

publicclass HelloWorld {

   ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); 

     /**部署流程定义*/ 

    @Test 

    publicvoid deploymentProcessDefinition(){ 

        Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service 

            .createDeployment() //创建一个部署对象 

            .name("helloworld入门程序")//添加部署的名称 

            .addClasspathResource("diagrams/helloworld.bpmn")//从classpath的资源中加载,一次只能加载一个文件 

            .addClasspathResource("diagrams/helloworld.jpg")//从classpath的资源中加载,一次只能加载一个文件 

            .deploy(); //完成部署 

        System.out.println("部署ID:"+deployment.getId());  //1 

        System.out.println("部署名称"+deployment.getName()); //helloworld入门程序 

         

    } 

    /**启动流程实例**/ 

    @Test 

    publicvoid startProcessInstance(){ 

        //流程定义的key 

        String processDefinitionKey ="helloworld"; 

        ProcessInstance pi = processEngine.getRuntimeService()//与正在执行   的流程实例和执行对象相关的Service 

                       .startProcessInstanceByKey(processDefinitionKey);  //使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动 

        System.out.println("流程实例ID:"+pi.getId()); 

        System.out.println("流程定义ID:"+pi.getProcessDefinitionId()); 

    } 

    /**查询当前人的个人任务*/ 

    @Test 

    publicvoid findMyPersonalTask(){ 

       Stringassignee = "李四"; 

      

      

       

         List list = processEngine.getTaskService()//与正在执行的任务管理相关的Service 

                        .createTaskQuery()//创建任务查询 

                        .taskAssignee(assignee)//指定个人任查询,指定办理人 

                        .list(); 

 

 

        

        

        if(list!=null && list.size()>0){ 

            for(Task task:list){ 

                System.out.println("任务ID:"+task.getId()); 

                System.out.println("任务名称:"+task.getName()); 

                System.out.println("任务的创建时间:"+task.getCreateTime()); 

                System.out.println("任务的办理人:"+task.getAssignee()); 

                System.out.println("流程实例ID:"+task.getProcessInstanceId()); 

                System.out.println("执行对象ID:"+task.getExecutionId()); 

                System.out.println("流程定义ID:"+task.getProcessDefinitionId()); 

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

            } 

        }

    } 

     

    /**完成我的任务*/ 

    @Test 

    publicvoid completeMyPersonalTask(){ 

        //任务ID 

        String taskId = "1402"; 

        processEngine.getTaskService()//与正在执行的任务管理相关的Service 

                        .complete(taskId); 

        System.out.println("完成任务:任务ID:"+taskId); 

    } 

}

分别依次执行各个单元测试代码,可看到打印内容。

DEMO结束。


你可能感兴趣的:(activiti入门实例教程)