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`

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM