環境
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*),就會刪除失敗。