基於Activiti工作流引擎篇(一)

一. 項目總體結構
這裏寫圖片描述
二、maven的配置文件信息

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.activiti.examples</groupId>
  <artifactId>activiti-examples</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>BPMN 2.0 with Activiti - Examples</name>
  <properties>
    <activiti-version>5.11</activiti-version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-engine</artifactId>
      <version>${activiti-version}</version>
    </dependency>
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-spring</artifactId>
      <version>${activiti-version}</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>2.0.4</version>
    </dependency>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <version>1.3.168</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.1</version>
    </dependency>
  </dependencies>
     <repositories>
    <repository>
      <id>Activiti</id>
      <url>http://maven.alfresco.com/nexus/content/repositories/activiti</url>
       </repository>
     </repositories>
     <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
           <version>2.3.2</version>
        <configuration>
             <source>1.6</source>
             <target>1.6</target>
           </configuration>
         </plugin>
         <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <inherited>true</inherited>
        <configuration>
             <classpathContainers>
               <classpathContainer>org.eclipse.jdt.USER_LIBRARY/Activiti Designer Extensions</classpathContainer>
             </classpathContainers>
           </configuration>
         </plugin>
    </plugins>
     </build>
</project>

三、工作流設計圖

可以下載相關的Myeclipse工作流引擎設計插件

這裏寫圖片描述

四、如何引入23張數據庫表(兩種方法)

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.Test;
public class TestActivity {
    @Test
    /*
     * 使用代碼創建23表
     */
    public void createTable(){
        ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        //連接數據庫的配置
        processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
        processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/activityWork?useUnicode=true&characterEncoding=utf8");
        processEngineConfiguration.setJdbcUsername("root");
        processEngineConfiguration.setJdbcPassword("");

        /**
            public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自動創建表,需要表存在
            public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先刪除表再創建表
            public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自動創建表
         */
        processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        //工作流的核心對象,ProcessEnginee對象
        ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
        System.out.println("processEngine:"+processEngine);
    }

    /**使用配置文件創建工作流需要的23張表*/
    @Test
    public void createTable_2(){
//  ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//      //工作流的核心對象,ProcessEnginee對象
//  ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
//      
        ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")   //
                                    .buildProcessEngine();
        System.out.println("processEngine:"+processEngine);
    }
    }

五、工作流引擎的一個HelloWorld

package com;
import java.util.List;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
public class HelloWorld {
    ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
    @Test
    /**部署流程定義*/
    public void deploymentProcessDefinition(){
        Deployment deployment=processEngine.getRepositoryService()
                .createDeployment()
                .name("helloWorld入門")
                .addClasspathResource("diagrams/MyProcess.bpmn")
                .deploy();
        System.out.println("部署ID:"+deployment.getId());
        System.out.println("部署名稱:"+deployment.getName());
    }
    @Test
    /**啓動流程實例*/
    public void startProcessInstance(){
        String processDefinitionKey="helloWorld";
        ProcessInstance pi=  processEngine.getRuntimeService()
        .startProcessInstanceByKey(processDefinitionKey);
        System.out.println("流程實例ID:"+pi.getId());
        System.out.println("流程定義ID:"+pi.getProcessDefinitionId());
    }
    /**查詢當前人的個人任務*/
    @Test
    public void findMyPersonalTask(){
        String assignee="李四";
        List<Task> list=  processEngine.getTaskService()
        .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());
            }
        }

    }
    /**完成我的任務*/
    @Test
    public void completeMyPersonTask(){
        //任務ID
        String taskId="108";
        processEngine.getTaskService()
        .complete(taskId);
        System.out.println("完成任務:任務ID:"+taskId);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章