【Activiti學習之二】Activiti API(一)


環境
  JDK 1.8
  MySQL 5.6
  Tomcat 7
  Eclipse-Luna
  activiti 6.0

一、Activiti數據查詢
准備數據:

package com.wjy.act;

import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.identity.Group;

public class SaveGroup {

    public static void main(String[] args) {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        IdentityService is = engine.getIdentityService();
        for(int i = 0; i < 10; i++) {
            Group group = is.newGroup(String.valueOf(i));
            group.setName("Group_" + i);
            group.setType("TYPE_" + i);
            is.saveGroup(group);//保存到表act_id_group
        }
        engine.close();
        System.exit(0);
        
    }

}

list 查詢多條和count 數量統計:

package com.wjy.act;

import java.util.List;

import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.identity.Group;

public class TestList {

    public static void main(String[] args) {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        IdentityService is = engine.getIdentityService();
        
        //測試list查詢
        List<Group> groups = is.createGroupQuery().list();
        for(Group g : groups) {
            System.out.println(g.getId() + "---" + g.getName() + "---" + g.getType());
        }
        //測試 count
        long size = is.createGroupQuery().count();
        System.out.println(size);
    }

}

listPage 分頁查詢:

package com.wjy.act;

import java.util.List;

import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.identity.Group;

public class TestListPage {

    public static void main(String[] args) {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        IdentityService is = engine.getIdentityService();
        
        //分頁查詢 listPage
        List<Group> groups = is.createGroupQuery().listPage(1, 5);
        for(Group g : groups) {
            System.out.println(g.getId() + "---" + g.getName() + "---" + g.getType());
        }
    }

}

singleResult 查詢單條

package com.wjy.act;

import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.identity.Group;

public class TestSingle {

    public static void main(String[] args) {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        IdentityService is = engine.getIdentityService();
        //測試singleResult
        Group g = is.createGroupQuery().groupName("Group_0").singleResult();
        System.out.println(g.getId());
    }

}

asc 升序和desc 降序:

package com.wjy.act;

import java.util.List;

import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.identity.Group;

public class TestSort {

    public static void main(String[] args) {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        IdentityService is = engine.getIdentityService();
        //測試降序 升序  需要根據字段orderby  
        //多字段排序 orderby之后都要跟上asc() 或desc()
        //is.createGroupQuery().orderByGroupId().asc().orderByGroupName().asc().list();
        List<Group> groups = is.createGroupQuery().orderByGroupId().desc().orderByGroupName().asc().list();
        for(Group g : groups) {
            System.out.println(g.getId());
        }
    }

}

按照字段條件查詢:

package com.wjy.act;

import java.util.List;

import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.identity.Group;

public class FieldQuery {

    public static void main(String[] args) {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        IdentityService is = engine.getIdentityService();
        //按照字段條件查詢
        List<Group> groups = is.createGroupQuery().groupName("Group_1").groupType("TYPE_1").list();
        for(Group g : groups) {
            System.out.println(g.getId());
        }
    }

}

支持原生sql查詢:

package com.wjy.act;

import java.util.List;

import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.identity.Group;

public class NativeQuery {

    public static void main(String[] args) {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        IdentityService is = engine.getIdentityService();

        //支持原生sql語句查詢
        List<Group> groups = is.createNativeGroupQuery()
                .sql("SELECT * FROM ACT_ID_GROUP where NAME_ = #{name}")
                .parameter("name", "Group_2").list();
        for (Group g : groups) {
            System.out.println(g.getId());
        }
    }

}

二、流程文件部署
1、DeploymentBuilder對象
方法addClasspathResource:

package com.wjy.deploy;

import java.io.InputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;

public class TextQuery {

    public static void main(String[] args) throws Exception {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 存儲服務
        RepositoryService rs = engine.getRepositoryService();
        
        DeploymentBuilder builder = rs.createDeployment();
        builder.addClasspathResource("my_text.txt");
        Deployment dep = builder.deploy();
        // 數據查詢
        InputStream is = rs.getResourceAsStream(dep.getId(), "my_text.txt");
        int count = is.available();
        byte[] contents = new byte[count];
        is.read(contents);
        String result = new String(contents);
        //輸入結果
        System.out.println(result);

    }

}

方法addInputStream:

package com.wjy.deploy;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

import javax.imageio.ImageIO;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;

public class ImageQuery {

    public static void main(String[] args) throws Exception {
        // 創建流程引擎
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 得到流程存儲服務對象
        RepositoryService repositoryService = engine.getRepositoryService();
        // 部署一份流程文件與相應的流程圖文件
        Deployment dep = repositoryService.createDeployment().addClasspathResource("gen.bpmn").deploy();
        // 查詢流程定義
        ProcessDefinition def = repositoryService.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
        // 查詢資源文件
        InputStream is = repositoryService.getProcessDiagram(def.getId());
        // 將輸入流轉換為圖片對象  
        BufferedImage image = ImageIO.read(is);
        // 保存為圖片文件
        File file = new File("resource/result.png");
        if (!file.exists()) file.createNewFile();
        FileOutputStream fos = new FileOutputStream(file);
        ImageIO.write(image, "png", fos);
        fos.close();
        is.close();
    }

}

方法addZipInputStream:

package com.wjy.deploy;

import java.io.File;
import java.io.FileInputStream;
import java.util.zip.ZipInputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentBuilder;

public class ZipTest {

    public static void main(String[] args) throws Exception {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 存儲服務
        RepositoryService rs = engine.getRepositoryService();
        
        DeploymentBuilder builder = rs.createDeployment();
        
        FileInputStream fis = new FileInputStream(new File("resource/datas.zip"));
        ZipInputStream zis = new ZipInputStream(fis);
        
        builder.addZipInputStream(zis);
        
        builder.deploy();
    }

}

方法addBpmnModel:

package com.wjy.deploy;

import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.EndEvent;
import org.activiti.bpmn.model.SequenceFlow;
import org.activiti.bpmn.model.StartEvent;
import org.activiti.bpmn.model.UserTask;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentBuilder;

public class BpmnTest {

    public static void main(String[] args) {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 存儲服務
        RepositoryService rs = engine.getRepositoryService();
        
        DeploymentBuilder builder = rs.createDeployment();
        builder.addBpmnModel("My Process", createProcessModel());
        
        builder.deploy();
    }
    
    private static BpmnModel createProcessModel() {
        // 創建BPMN模型對象
        BpmnModel model = new BpmnModel();
        // 創建一個流程定義
        org.activiti.bpmn.model.Process process = new org.activiti.bpmn.model.Process();
        model.addProcess(process);
        process.setId("myProcess");
        process.setName("My Process");
        // 開始事件
        StartEvent startEvent = new StartEvent();
        startEvent.setId("startEvent");
        process.addFlowElement(startEvent);
        // 用戶任務
        UserTask userTask = new UserTask();
        userTask.setName("User Task");
        userTask.setId("userTask");
        process.addFlowElement(userTask);
        // 結束事件
        EndEvent endEvent = new EndEvent();
        endEvent.setId("endEvent");
        process.addFlowElement(endEvent);
        // 添加流程順序
        process.addFlowElement(new SequenceFlow("startEvent", "userTask"));
        process.addFlowElement(new SequenceFlow("userTask", "endEvent"));
        return model;
    }


}

方法addString和addBytes:略

上面的方法是加載流程方法,另外方法deploy是將加載的流程實現部署,返回對象Deployment,部署記錄記錄到表表:act_re_deployment,流程則記錄到表:act_ge_bytearray。

2、部署驗證

默認會進行格式和流程定義驗證

格式驗證:

package com.wjy.deploy;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentBuilder;

public class SchemaError {

    public static void main(String[] args) {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 存儲服務
        RepositoryService rs = engine.getRepositoryService();
        
        DeploymentBuilder builder = rs.createDeployment();
        //schema_error.bpmn 格式有問題  比如說在里面加入了無效標簽<abc>angus</abc>
        builder.addClasspathResource("error/schema_error.bpmn");
        //關閉格式驗證 disableSchemaValidation
        //builder.disableSchemaValidation();
        builder.deploy();
    }

}

流程驗證:

package com.wjy.deploy;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentBuilder;

public class BpmnError {

    public static void main(String[] args) {
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 存儲服務
        RepositoryService rs = engine.getRepositoryService();
        
        DeploymentBuilder builder = rs.createDeployment();
        //bpmn_error.bpmn 流程有問題 比如說有兩個開始節點
        builder.addClasspathResource("error/bpmn_error.bpmn");
        //關閉流程驗證 disableBpmnValidation
        //builder.disableBpmnValidation();
        builder.deploy();
    }

}

3、查詢部署資源

package com.wjy.deploy;

import java.io.InputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;

public class BpmnQuery {

    public static void main(String[] args) throws Exception {
        // 創建流程引擎
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 得到流程存儲服務對象
        RepositoryService repositoryService = engine.getRepositoryService();
        // 部署一份流程文件
        Deployment dep = repositoryService.createDeployment().addClasspathResource("gen.bpmn").deploy();
        // 查詢流程定義
        //查詢流程定義實體
        ProcessDefinition def = repositoryService.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
        // 查詢資源文件
        InputStream is = repositoryService.getProcessModel(def.getId());
        
        // 讀取輸入流
        int count = is.available();
        byte[] contents = new byte[count];
        is.read(contents);
        String result = new String(contents);
        //輸入輸出結果
        System.out.println(result);

    }

}

查詢流程圖參考上面方法addInputStream。

4、刪除部署資源
repositoryService.deleteDeployment(String deploymentId, boolean cascade)
(1)不管是否指定級聯,都會刪除部署相關的身份數據(act_id*)、流程定義數據(act_re_procdef)、流程資源(act_ge_bytearray)與部署數據(act_re_deployment)。
(2)如果設置為級聯刪除,則會將運行的流程實例、流程任務以及流程實例的歷史數據刪除。
(3)如果不級聯刪除,但是存在運行時數據,例如還有流程實例(act_ru*),就會刪除失敗。

 


免責聲明!

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



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