色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > activity工作流,這里讓你快速了解

activity工作流,這里讓你快速了解 時間:2018-07-18      來源:未知

Activity工作流的概念:就是“業(yè)務過程的部分或整體在計算機應用環(huán)境下的自動化”,它主要解決的是“使在多個參與者之間按照某種預定義的規(guī)則傳遞文檔、信息或任務的過程自動進行,從而實現某個預期的業(yè)務目標,或者促使此目標的實現”,業(yè)務過程中插入人工的執(zhí)行和干預。

ProcessEngine對象,這是Activity工作的核心。負責生成流程運行時的各種實例及數據、監(jiān)控和管理流程的運行。

一、Activity表設計:

1、資源庫流程規(guī)則表

1)act_re_deployment 部署信息表

2)act_re_model 流程設計模型部署表

3)act_re_procdef 流程定義數據表

2、運行時數據庫表

1)act_ru_execution 運行時流程執(zhí)行實例表

2)act_ru_identitylink 運行時流程人員表,主要存儲任務節(jié)點與參與者的相關信息

3)act_ru_task 運行時任務節(jié)點表

4)act_ru_variable 運行時流程變量數據表

3、歷史數據庫表

1)act_hi_actinst 歷史節(jié)點表

2)act_hi_attachment 歷史附件表

3)act_hi_comment 歷史意見表

4)act_hi_identitylink 歷史流程人員表

5)act_hi_detail 歷史詳情表,提供歷史變量的查詢

6)act_hi_procinst 歷史流程實例表

7)act_hi_taskinst 歷史任務實例表

8)act_hi_varinst 歷史變量表

4、組織機構表

1)act_id_group 用戶組信息表

2)act_id_info 用戶擴展信息表

3)act_id_membership 用戶與用戶組對應信息表

4)act_id_user 用戶信息表

這四張表很常見,基本的組織機構管理,關于用戶認證方面建議還是自己開發(fā)一套,組件自帶的功能太簡單,使用中有很多需求難以滿足

5、通用數據表

1)act_ge_bytearray 二進制數據表

2)act_ge_property 屬性數據表存儲整個流程引擎級別的數據,初始化表結構時,會默認插入三條記錄。

二、activiti.cfg.xml(activiti的配置文件)

代碼:【

xmlns:context="//www.springframework.org/schema/context" xmlns:tx="//www.springframework.org/schema/tx"

xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="//www.springframework.org/schema/beans //www.springframework.org/schema/beans/spring-beans.xsd

//www.springframework.org/schema/context //www.springframework.org/schema/context/spring-context-2.5.xsd

//www.springframework.org/schema/tx //www.springframework.org/schema/tx/spring-tx-3.0.xsd">

 

 

三、logging.properties(日志處理)

代碼:【

log4j.rootLogger=INFO, CA

# ConsoleAppender

log4j.appender.CA=org.apache.log4j.ConsoleAppender

log4j.appender.CA.layout=org.apache.log4j.PatternLayout

log4j.appender.CA.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n

四、創(chuàng)建表

【package junit;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngineConfiguration;

import org.junit.Test;

public class TestActiviti {

/**使用代碼創(chuàng)建工作流需要的張表*/

@Test

public void createTable(){

ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();

//連接數據庫的配置

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

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

processEngineConfiguration.setJdbcUsername("root");

processEngineConfiguration.setJdbcPassword("");

/**

public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自動創(chuàng)建表,需要表存在

public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先刪除表再創(chuàng)建表

public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自動創(chuàng)建表

*/

processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);

//工作流的核心對象,ProcessEnginee對象

ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();

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

}

/**使用配置文件創(chuàng)建工作流需要的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 test.a_helloworld;

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();

/** 1:部署流程定義 */

@Test

public void deploymentProcessDefinition() {// 表【act_re_deployment】

Deployment deployment = processEngine.getRepositoryService()// 與流程定義和部署對象相關的Service

.createDeployment()// 創(chuàng)建一個部署對象

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

.addClasspathResource("diagrams/helloworld.bpmn")// 從classpath的資源中加載,一次只能加載一個文件

.addClasspathResource("diagrams/helloworld.png")// 從classpath的資源中加載,一次只能加載一個文件

.deploy();// 完成部署

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

System.out.println("部署名稱:" + deployment.getName());// helloworld入門程序

}

/** 2:啟動流程實例 */

@Test

public void startProcessInstance() {// 表【act_hi_procinst/act_ru_execution】

// 流程定義的key

String processDefinitionKey = "helloworld";

ProcessInstance pi = processEngine.getRuntimeService()// 與正在執(zhí)行的流程實例和執(zhí)行對象相關的Service

.startProcessInstanceByKey(processDefinitionKey);// 使用流程定義的key啟動流程實例,key對應helloworld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動

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

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

// helloworld:1:4

}

/** 3:查詢當前人的個人任務 */

@Test

public void findMyPersonalTask() {

String assignee = "張三";

Listlist = processEngine.getTaskService()// 與正在執(zhí)行的任務管理相關的Service

.createTaskQuery()// 創(chuàng)建任務查詢對象

.taskAssignee(assignee)// 指定個人任務查詢,指定辦理人

.list();

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

for (Task task : list) {

System.out

.println("###############################################");

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

System.out.println("任務名稱:" + task.getName());

System.out.println("任務的創(chuàng)建時間:" + task.getCreateTime());

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

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

System.out.println("執(zhí)行對象ID:" + task.getExecutionId());

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

System.out

.println("###############################################");

}

}

}

/** 4:完成我的任務 */

@Test

public void completeMyPersonalTask() {

// 任務ID

String taskId = "7502";

processEngine.getTaskService()// 與正在執(zhí)行的任務管理相關的Service

.complete(taskId);

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

}

}

六、ProcessDefinitionTest

代碼:【package test.b_processDefinition;

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Map;

import java.util.zip.ZipInputStream;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.repository.ProcessDefinition;

import org.apache.commons.io.FileUtils;

import org.junit.Test;

public class ProcessDefinitionTest {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/**部署流程定義(從classpath)*/

@Test

public void deploymentProcessDefinition_classpath(){

Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service

.createDeployment()//創(chuàng)建一個部署對象

.name("流程定義")//添加部署的名稱

.addClasspathResource("diagrams/helloworld.bpmn")//從classpath的資源中加載,一次只能加載一個文件

.addClasspathResource("diagrams/helloworld.png")//從classpath的資源中加載,一次只能加載一個文件

.deploy();//完成部署

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

System.out.println("部署名稱:"+deployment.getName());//

}

/**部署流程定義(從zip)*/

@Test

public void deploymentProcessDefinition_zip(){

InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");

ZipInputStream zipInputStream = new ZipInputStream(in);

Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service

.createDeployment()//創(chuàng)建一個部署對象

.name("流程定義")//添加部署的名稱

.addZipInputStream(zipInputStream)//指定zip格式的文件完成部署

.deploy();//完成部署

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

System.out.println("部署名稱:"+deployment.getName());//

}

/**查詢流程定義*/

@Test

public void findProcessDefinition(){

Listlist = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service

.createProcessDefinitionQuery()//創(chuàng)建一個流程定義的查詢

/**指定查詢條件,where條件*/

// .deploymentId(deploymentId)//使用部署對象ID查詢

// .processDefinitionId(processDefinitionId)//使用流程定義ID查詢

// .processDefinitionKey(processDefinitionKey)//使用流程定義的key查詢

// .processDefinitionNameLike(processDefinitionNameLike)//使用流程定義的名稱模糊查詢

/**排序*/

.orderByProcessDefinitionVersion().asc()//按照版本的升序排列

// .orderByProcessDefinitionName().desc()//按照流程定義的名稱降序排列

/**返回的結果集*/

.list();//返回一個集合列表,封裝流程定義

// .singleResult();//返回惟一結果集

// .count();//返回結果集數量

// .listPage(firstResult, maxResults);//分頁查詢

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

for(ProcessDefinition pd:list){

System.out.println("流程定義ID:"+pd.getId());//流程定義的key+版本+隨機生成數

System.out.println("流程定義的名稱:"+pd.getName());//對應helloworld.bpmn文件中的name屬性值

System.out.println("流程定義的key:"+pd.getKey());//對應helloworld.bpmn文件中的id屬性值

System.out.println("流程定義的版本:"+pd.getVersion());//當流程定義的key值相同的相同下,版本升級,默認1

System.out.println("資源名稱bpmn文件:"+pd.getResourceName());

System.out.println("資源名稱png文件:"+pd.getDiagramResourceName());

System.out.println("部署對象ID:"+pd.getDeploymentId());

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

}

}

}

/**刪除流程定義*/

@Test

public void deleteProcessDefinition(){

//使用部署ID,完成刪除

String deploymentId = "601";

/**

* 不帶級聯的刪除

* 只能刪除沒有啟動的流程,如果流程啟動,就會拋出異常

*/

// processEngine.getRepositoryService()//

// .deleteDeployment(deploymentId);

/**

* 級聯刪除

* 不管流程是否啟動,都能可以刪除

*/

processEngine.getRepositoryService()//

.deleteDeployment(deploymentId, true);

System.out.println("刪除成功!");

}

/**查看流程圖

* @throws IOException */

@Test

public void viewPic() throws IOException{

/**將生成圖片放到文件夾下*/

String deploymentId = "801";

//獲取圖片資源名稱

Listlist = processEngine.getRepositoryService()//

.getDeploymentResourceNames(deploymentId);

//定義圖片資源的名稱

String resourceName = "";

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

for(String name:list){

if(name.indexOf(".png")>=0){

resourceName = name;

}

}

}

//獲取圖片的輸入流

InputStream in = processEngine.getRepositoryService()//

.getResourceAsStream(deploymentId, resourceName);

//將圖片生成到D盤的目錄下

File file = new File("D:/"+resourceName);

//將輸入流的圖片寫到D盤下

FileUtils.copyInputStreamToFile(in, file);

}

/***附加功能:查詢最新版本的流程定義*/

@Test

public void findLastVersionProcessDefinition(){

Listlist = processEngine.getRepositoryService()//

.createProcessDefinitionQuery()//

.orderByProcessDefinitionVersion().asc()//使用流程定義的版本升序排列

.list();

/**

* Map

map集合的key:流程定義的key

map集合的value:流程定義的對象

map集合的特點:當map集合key值相同的情況下,后一次的值將替換前一次的值

*/

Mapmap = new LinkedHashMap();

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

for(ProcessDefinition pd:list){

map.put(pd.getKey(), pd);

}

}

ListpdList = new ArrayList(map.values());

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

for(ProcessDefinition pd:pdList){

System.out.println("流程定義ID:"+pd.getId());//流程定義的key+版本+隨機生成數

System.out.println("流程定義的名稱:"+pd.getName());//對應helloworld.bpmn文件中的name屬性值

System.out.println("流程定義的key:"+pd.getKey());//對應helloworld.bpmn文件中的id屬性值

System.out.println("流程定義的版本:"+pd.getVersion());//當流程定義的key值相同的相同下,版本升級,默認1

System.out.println("資源名稱bpmn文件:"+pd.getResourceName());

System.out.println("資源名稱png文件:"+pd.getDiagramResourceName());

System.out.println("部署對象ID:"+pd.getDeploymentId());

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

}

}

}

/**附加功能:刪除流程定義(刪除key相同的所有不同版本的流程定義)*/

@Test

public void deleteProcessDefinitionByKey(){

//流程定義的key

String processDefinitionKey = "helloworld";

//先使用流程定義的key查詢流程定義,查詢出所有的版本

Listlist = processEngine.getRepositoryService()//

.createProcessDefinitionQuery()//

.processDefinitionKey(processDefinitionKey)//使用流程定義的key查詢

.list();

//遍歷,獲取每個流程定義的部署ID

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

for(ProcessDefinition pd:list){

//獲取部署ID

String deploymentId = pd.getDeploymentId();

processEngine.getRepositoryService()//

.deleteDeployment(deploymentId, true);

}

}

}

}

七、ProcessInstance

代碼:【

package test.c_processInstance;

import java.io.InputStream;

import java.util.List;

import java.util.zip.ZipInputStream;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.history.HistoricProcessInstance;

import org.activiti.engine.history.HistoricTaskInstance;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.runtime.ProcessInstance;

import org.activiti.engine.task.Task;

import org.junit.Test;

public class ProcessInstanceTest {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/**部署流程定義(從zip)*/

@Test

public void deploymentProcessDefinition_zip(){

InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");

ZipInputStream zipInputStream = new ZipInputStream(in);

Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service

.createDeployment()//創(chuàng)建一個部署對象

.name("流程定義")//添加部署的名稱

.addZipInputStream(zipInputStream)//指定zip格式的文件完成部署

.deploy();//完成部署

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

System.out.println("部署名稱:"+deployment.getName());//

}

/**啟動流程實例*/

@Test

public void startProcessInstance(){

//流程定義的key

String processDefinitionKey = "helloworld";

ProcessInstance pi = processEngine.getRuntimeService()//與正在執(zhí)行的流程實例和執(zhí)行對象相關的Service

.startProcessInstanceByKey(processDefinitionKey);//使用流程定義的key啟動流程實例,key對應helloworld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動

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

System.out.println("流程定義ID:"+pi.getProcessDefinitionId());//流程定義ID helloworld:1:4

}

/**查詢當前人的個人任務*/

@Test

public void findMyPersonalTask(){

String assignee = "王五";

Listlist = processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.createTaskQuery()//創(chuàng)建任務查詢對象

/**查詢條件(where部分)*/

.taskAssignee(assignee)//指定個人任務查詢,指定辦理人

// .taskCandidateUser(candidateUser)//組任務的辦理人查詢

// .processDefinitionId(processDefinitionId)//使用流程定義ID查詢

// .processInstanceId(processInstanceId)//使用流程實例ID查詢

// .executionId(executionId)//使用執(zhí)行對象ID查詢

/**排序*/

.orderByTaskCreateTime().asc()//使用創(chuàng)建時間的升序排列

/**返回結果集*/

// .singleResult()//返回惟一結果集

// .count()//返回結果集的數量

// .listPage(firstResult, maxResults);//分頁查詢

.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("任務的創(chuàng)建時間:"+task.getCreateTime());

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

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

System.out.println("執(zhí)行對象ID:"+task.getExecutionId());

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

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

}

}

}

/**完成我的任務*/

@Test

public void completeMyPersonalTask(){

//任務ID

String taskId = "1202";

processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.complete(taskId);

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

}

/**查詢流程狀態(tài)(判斷流程正在執(zhí)行,還是結束)*/

@Test

public void isProcessEnd(){

String processInstanceId = "1001";

ProcessInstance pi = processEngine.getRuntimeService()//表示正在執(zhí)行的流程實例和執(zhí)行對象

.createProcessInstanceQuery()//創(chuàng)建流程實例查詢

.processInstanceId(processInstanceId)//使用流程實例ID查詢

.singleResult();

if(pi==null){

System.out.println("流程已經結束");

}

else{

System.out.println("流程沒有結束");

}

}

/**查詢歷史任務(后面講)*/

@Test

public void findHistoryTask(){

String taskAssignee = "張三";

Listlist = processEngine.getHistoryService()//與歷史數據(歷史表)相關的Service

.createHistoricTaskInstanceQuery()//創(chuàng)建歷史任務實例查詢

.taskAssignee(taskAssignee)//指定歷史任務的辦理人

.list();

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

for(HistoricTaskInstance hti:list){

System.out.println(hti.getId()+" "+hti.getName()+" "+hti.getProcessInstanceId()+" "+hti.getStartTime()+" "+hti.getEndTime()+" "+hti.getDurationInMillis());

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

}

}

}

/**查詢歷史流程實例(后面講)*/

@Test

public void findHistoryProcessInstance(){

String processInstanceId = "1001";

HistoricProcessInstance hpi = processEngine.getHistoryService()//與歷史數據(歷史表)相關的Service

.createHistoricProcessInstanceQuery()//創(chuàng)建歷史流程實例查詢

.processInstanceId(processInstanceId)//使用流程實例ID查詢

.singleResult();

System.out.println(hpi.getId()+" "+hpi.getProcessDefinitionId()+" "+hpi.getStartTime()+" "+hpi.getEndTime()+" "+hpi.getDurationInMillis());

}

}

八、processVariables

代碼1:【

package test.d_processVariables;

import java.io.Serializable;

public class Person implements Serializable {

/**

*

*/

private static final long serialVersionUID = 6757393795687480331L;

private Integer id;//編號

private String name;//姓名

private String education;

public String getEducation() {

return education;

}

public void setEducation(String education) {

this.education = education;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

代碼2:【

package test.d_processVariables;

import java.io.InputStream;

import java.util.List;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.RuntimeService;

import org.activiti.engine.TaskService;

import org.activiti.engine.history.HistoricVariableInstance;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.runtime.ProcessInstance;

import org.junit.Test;

public class ProcessVariablesTest {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/** 部署流程定義(從InputStream) */

@Test

public void deploymentProcessDefinition_inputStream() {

InputStream inputStreambpmn = this.getClass().getResourceAsStream(

"/diagrams/processVariables.bpmn");

InputStream inputStreampng = this.getClass().getResourceAsStream(

"/diagrams/processVariables.png");

Deployment deployment = processEngine.getRepositoryService()// 與流程定義和部署對象相關的Service

.createDeployment()// 創(chuàng)建一個部署對象

.name("流程定義")// 添加部署的名稱

.addInputStream("processVariables.bpmn", inputStreambpmn)// 使用資源文件的名稱(要求:與資源文件的名稱要一致),和輸入流完成部署

.addInputStream("processVariables.png", inputStreampng)// 使用資源文件的名稱(要求:與資源文件的名稱要一致),和輸入流完成部署

.deploy();// 完成部署

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

System.out.println("部署名稱:" + deployment.getName());//

}

/** 啟動流程實例 */

@Test

public void startProcessInstance() {

// 流程定義的key

String processDefinitionKey = "processVariables";

ProcessInstance pi = processEngine.getRuntimeService()// 與正在執(zhí)行的流程實例和執(zhí)行對象相關的Service

.startProcessInstanceByKey(processDefinitionKey);// 使用流程定義的key啟動流程實例,key對應helloworld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動

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

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

}

/** 設置流程變量 */

@Test

public void setVariables() {

/** 與任務(正在執(zhí)行) */

TaskService taskService = processEngine.getTaskService();

// 任務ID

String taskId = "7502";

/** 一:設置流程變量,使用基本數據類型 */

// taskService.setVariableLocal(taskId, "請假天數", 5);//與任務ID綁定

// taskService.setVariable(taskId, "請假日期", new Date());

// taskService.setVariable(taskId, "請假原因", "回家探親,一起吃個飯");

/** 二:設置流程變量,使用javabean類型 */

/**

* 當一個javabean(實現序列號)放置到流程變量中,要求javabean的屬性不能再發(fā)生變化 * 如果發(fā)生變化,再獲取的時候,拋出異常

*

* 解決方案:在Person對象中添加: private static final long serialVersionUID =

* 6757393795687480331L; 同時實現Serializable

* */

Person p = new Person();

p.setId(20);

p.setName("翠花");

taskService.setVariable(taskId, "人員信息(添加固定版本)", p);

System.out.println("設置流程變量成功!");

}

/** 獲取流程變量 */

@Test

public void getVariables() {

/** 與任務(正在執(zhí)行) */

TaskService taskService = processEngine.getTaskService();

// 任務ID

String taskId = "5002";

/** 一:獲取流程變量,使用基本數據類型 */

// Integer days = (Integer) taskService.getVariable(taskId, "請假天數");

// Date date = (Date) taskService.getVariable(taskId, "請假日期");

// String resean = (String) taskService.getVariable(taskId, "請假原因");

// System.out.println("請假天數:"+days);

// System.out.println("請假日期:"+date);

// System.out.println("請假原因:"+resean);

/** 二:獲取流程變量,使用javabean類型 */

Person p = (Person) taskService.getVariable(taskId, "人員信息(添加固定版本)");

System.out.println(p.getId() + " " + p.getName());

}

/** 模擬設置和獲取流程變量的場景 */

public void setAndGetVariables() {

/** 與流程實例,執(zhí)行對象(正在執(zhí)行) */

RuntimeService runtimeService = processEngine.getRuntimeService();

/** 與任務(正在執(zhí)行) */

TaskService taskService = processEngine.getTaskService();

/** 設置流程變量 */

// runtimeService.setVariable(executionId, variableName,

// value)//表示使用執(zhí)行對象ID,和流程變量的名稱,設置流程變量的值(一次只能設置一個值)

// runtimeService.setVariables(executionId,

// variables)//表示使用執(zhí)行對象ID,和Map集合設置流程變量,map集合的key就是流程變量的名稱,map集合的value就是流程變量的值(一次設置多個值)

// taskService.setVariable(taskId, variableName,

// value)//表示使用任務ID,和流程變量的名稱,設置流程變量的值(一次只能設置一個值)

// taskService.setVariables(taskId,

// variables)//表示使用任務ID,和Map集合設置流程變量,map集合的key就是流程變量的名稱,map集合的value就是流程變量的值(一次設置多個值)

// runtimeService.startProcessInstanceByKey(processDefinitionKey,

// variables);//啟動流程實例的同時,可以設置流程變量,用Map集合

// taskService.complete(taskId, variables)//完成任務的同時,設置流程變量,用Map集合

/** 獲取流程變量 */

// runtimeService.getVariable(executionId,

// variableName);//使用執(zhí)行對象ID和流程變量的名稱,獲取流程變量的值

// runtimeService.getVariables(executionId);//使用執(zhí)行對象ID,獲取所有的流程變量,將流程變量放置到Map集合中,map集合的key就是流程變量的名稱,map集合的value就是流程變量的值

// runtimeService.getVariables(executionId,

// variableNames);//使用執(zhí)行對象ID,獲取流程變量的值,通過設置流程變量的名稱存放到集合中,獲取指定流程變量名稱的流程變量的值,值存放到Map集合中

// taskService.getVariable(taskId,

// variableName);//使用任務ID和流程變量的名稱,獲取流程變量的值

// taskService.getVariables(taskId);//使用任務ID,獲取所有的流程變量,將流程變量放置到Map集合中,map集合的key就是流程變量的名稱,map集合的value就是流程變量的值

// taskService.getVariables(taskId,

// variableNames);//使用任務ID,獲取流程變量的值,通過設置流程變量的名稱存放到集合中,獲取指定流程變量名稱的流程變量的值,值存放到Map集合中

}

/** 完成我的任務 */

@Test

public void completeMyPersonalTask() {

// 任務ID

String taskId = "2402";

processEngine.getTaskService()// 與正在執(zhí)行的任務管理相關的Service

.complete(taskId);

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

}

/** 查詢流程變量的歷史表 */

@Test

public void findHistoryProcessVariables() {

Listlist = processEngine.getHistoryService()//

.createHistoricVariableInstanceQuery()// 創(chuàng)建一個歷史的流程變量查詢對象

.variableName("請假天數").list();

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

for (HistoricVariableInstance hvi : list) {

System.out.println(hvi.getId() + " "

+ hvi.getProcessInstanceId() + " "

+ hvi.getVariableName() + " "

+ hvi.getVariableTypeName() + " " + hvi.getValue());

System.out

.println("###############################################");

}

}

}

}

九、HistoryQuery

代碼:【

package test.e_historyQuery;

import java.util.List;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.history.HistoricActivityInstance;

import org.activiti.engine.history.HistoricProcessInstance;

import org.activiti.engine.history.HistoricTaskInstance;

import org.activiti.engine.history.HistoricVariableInstance;

import org.junit.Test;

public class HistoryQueryTest {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/**查詢歷史流程實例*/

@Test

public void findHistoryProcessInstance(){

String processInstanceId = "2101";

HistoricProcessInstance hpi = processEngine.getHistoryService()//與歷史數據(歷史表)相關的Service

.createHistoricProcessInstanceQuery()//創(chuàng)建歷史流程實例查詢

.processInstanceId(processInstanceId)//使用流程實例ID查詢

.orderByProcessInstanceStartTime().asc()

.singleResult();

System.out.println(hpi.getId()+" "+hpi.getProcessDefinitionId()+" "+hpi.getStartTime()+" "+hpi.getEndTime()+" "+hpi.getDurationInMillis());

}

/**查詢歷史活動*/

@Test

public void findHistoryActiviti(){

String processInstanceId = "2101";

Listlist = processEngine.getHistoryService()//

.createHistoricActivityInstanceQuery()//創(chuàng)建歷史活動實例的查詢

.processInstanceId(processInstanceId)//

.orderByHistoricActivityInstanceStartTime().asc()//

.list();

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

for(HistoricActivityInstance hai:list){

System.out.println(hai.getId()+" "+hai.getProcessInstanceId()+" "+hai.getActivityType()+" "+hai.getStartTime()+" "+hai.getEndTime()+" "+hai.getDurationInMillis());

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

}

}

}

/**查詢歷史任務*/

@Test

public void findHistoryTask(){

String processInstanceId = "2101";

Listlist = processEngine.getHistoryService()//與歷史數據(歷史表)相關的Service

.createHistoricTaskInstanceQuery()//創(chuàng)建歷史任務實例查詢

.processInstanceId(processInstanceId)//

.orderByHistoricTaskInstanceStartTime().asc()

.list();

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

for(HistoricTaskInstance hti:list){

System.out.println(hti.getId()+" "+hti.getName()+" "+hti.getProcessInstanceId()+" "+hti.getStartTime()+" "+hti.getEndTime()+" "+hti.getDurationInMillis());

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

}

}

}

/**查詢歷史流程變量*/

@Test

public void findHistoryProcessVariables(){

String processInstanceId = "2101";

Listlist = processEngine.getHistoryService()//

.createHistoricVariableInstanceQuery()//創(chuàng)建一個歷史的流程變量查詢對象

.processInstanceId(processInstanceId)//

.list();

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

for(HistoricVariableInstance hvi:list){

System.out.println(hvi.getId()+" "+hvi.getProcessInstanceId()+" "+hvi.getVariableName()+" "+hvi.getVariableTypeName()+" "+hvi.getValue());

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

}

}

}

}

十、SequenceFlow

代碼:【

package test.f_sequenceFlow;

import java.io.InputStream;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

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 SequenceFlowTest {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/**部署流程定義(從inputStream)*/

@Test

public void deploymentProcessDefinition_inputStream(){

InputStream inputStreamBpmn = this.getClass().getResourceAsStream("sequenceFlow.bpmn");

InputStream inputStreamPng = this.getClass().getResourceAsStream("sequenceFlow.png");

Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service

.createDeployment()//創(chuàng)建一個部署對象

.name("連線")//添加部署的名稱

.addInputStream("sequenceFlow.bpmn", inputStreamBpmn)//

.addInputStream("sequenceFlow.png", inputStreamPng)//

.deploy();//完成部署

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

System.out.println("部署名稱:"+deployment.getName());//

}

/**啟動流程實例*/

@Test

public void startProcessInstance(){

//流程定義的key

String processDefinitionKey = "sequenceFlow";

ProcessInstance pi = processEngine.getRuntimeService()//與正在執(zhí)行的流程實例和執(zhí)行對象相關的Service

.startProcessInstanceByKey(processDefinitionKey);//使用流程定義的key啟動流程實例,key對應helloworld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動

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

System.out.println("流程定義ID:"+pi.getProcessDefinitionId());//流程定義ID helloworld:1:4

}

/**查詢當前人的個人任務*/

@Test

public void findMyPersonalTask(){

String assignee = "趙六";

Listlist = processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.createTaskQuery()//創(chuàng)建任務查詢對象

/**查詢條件(where部分)*/

.taskAssignee(assignee)//指定個人任務查詢,指定辦理人

// .taskCandidateUser(candidateUser)//組任務的辦理人查詢

// .processDefinitionId(processDefinitionId)//使用流程定義ID查詢

// .processInstanceId(processInstanceId)//使用流程實例ID查詢

// .executionId(executionId)//使用執(zhí)行對象ID查詢

/**排序*/

.orderByTaskCreateTime().asc()//使用創(chuàng)建時間的升序排列

/**返回結果集*/

// .singleResult()//返回惟一結果集

// .count()//返回結果集的數量

// .listPage(firstResult, maxResults);//分頁查詢

.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("任務的創(chuàng)建時間:"+task.getCreateTime());

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

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

System.out.println("執(zhí)行對象ID:"+task.getExecutionId());

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

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

}

}

}

/**完成我的任務*/

@Test

public void completeMyPersonalTask(){

//任務ID

String taskId = "3103";

//完成任務的同時,設置流程變量,使用流程變量用來指定完成任務后,下一個連線,對應sequenceFlow.bpmn文件中${message=='不重要'}

Mapvariables = new HashMap();

variables.put("message", "重要");

processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.complete(taskId,variables);

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

}

}

十一、ExclusiveGateWay

代碼:【

package test.g_exclusiveGateWay;

import java.io.InputStream;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

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 ExclusiveGateWayTest {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/**部署流程定義(從inputStream)*/

@Test

public void deploymentProcessDefinition_inputStream(){

InputStream inputStreamBpmn = this.getClass().getResourceAsStream("exclusiveGateWay.bpmn");

InputStream inputStreamPng = this.getClass().getResourceAsStream("exclusiveGateWay.png");

Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service

.createDeployment()//創(chuàng)建一個部署對象

.name("排他網關")//添加部署的名稱

.addInputStream("exclusiveGateWay.bpmn", inputStreamBpmn)//

.addInputStream("exclusiveGateWay.png", inputStreamPng)//

.deploy();//完成部署

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

System.out.println("部署名稱:"+deployment.getName());//

}

/**啟動流程實例*/

@Test

public void startProcessInstance(){

//流程定義的key

String processDefinitionKey = "exclusiveGateWay";

ProcessInstance pi = processEngine.getRuntimeService()//與正在執(zhí)行的流程實例和執(zhí)行對象相關的Service

.startProcessInstanceByKey(processDefinitionKey);//使用流程定義的key啟動流程實例,key對應helloworld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動

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

System.out.println("流程定義ID:"+pi.getProcessDefinitionId());//流程定義ID helloworld:1:4

}

/**查詢當前人的個人任務*/

@Test

public void findMyPersonalTask(){

String assignee = "王小五";

Listlist = processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.createTaskQuery()//創(chuàng)建任務查詢對象

/**查詢條件(where部分)*/

.taskAssignee(assignee)//指定個人任務查詢,指定辦理人

// .taskCandidateUser(candidateUser)//組任務的辦理人查詢

// .processDefinitionId(processDefinitionId)//使用流程定義ID查詢

// .processInstanceId(processInstanceId)//使用流程實例ID查詢

// .executionId(executionId)//使用執(zhí)行對象ID查詢

/**排序*/

.orderByTaskCreateTime().asc()//使用創(chuàng)建時間的升序排列

/**返回結果集*/

// .singleResult()//返回惟一結果集

// .count()//返回結果集的數量

// .listPage(firstResult, maxResults);//分頁查詢

.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("任務的創(chuàng)建時間:"+task.getCreateTime());

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

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

System.out.println("執(zhí)行對象ID:"+task.getExecutionId());

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

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

}

}

}

/**完成我的任務*/

@Test

public void completeMyPersonalTask(){

//任務ID

String taskId = "3904";

//完成任務的同時,設置流程變量,使用流程變量用來指定完成任務后,下一個連線,對應exclusiveGateWay.bpmn文件中${money>1000}

Mapvariables = new HashMap();

variables.put("money", 200);

processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.complete(taskId,variables);

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

}

}

十二、ParallelGateWay

代碼:【

package test.h_parallelGateWay;

import java.io.InputStream;

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 ParallelGateWayTest {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/**部署流程定義(從inputStream)*/

@Test

public void deploymentProcessDefinition_inputStream(){

InputStream inputStreamBpmn = this.getClass().getResourceAsStream("parallelGateWay.bpmn");

InputStream inputStreamPng = this.getClass().getResourceAsStream("parallelGateWay.png");

Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service

.createDeployment()//創(chuàng)建一個部署對象

.name("并行網關")//添加部署的名稱

.addInputStream("parallelGateWay.bpmn", inputStreamBpmn)//

.addInputStream("parallelGateWay.png", inputStreamPng)//

.deploy();//完成部署

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

System.out.println("部署名稱:"+deployment.getName());//

}

/**啟動流程實例*/

@Test

public void startProcessInstance(){

//流程定義的key

String processDefinitionKey = "parallelGateWay";

ProcessInstance pi = processEngine.getRuntimeService()//與正在執(zhí)行的流程實例和執(zhí)行對象相關的Service

.startProcessInstanceByKey(processDefinitionKey);//使用流程定義的key啟動流程實例,key對應helloworld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動

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

System.out.println("流程定義ID:"+pi.getProcessDefinitionId());//流程定義ID helloworld:1:4

}

/**查詢當前人的個人任務*/

@Test

public void findMyPersonalTask(){

String assignee = "商家";

Listlist = processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.createTaskQuery()//創(chuàng)建任務查詢對象

/**查詢條件(where部分)*/

.taskAssignee(assignee)//指定個人任務查詢,指定辦理人

// .taskCandidateUser(candidateUser)//組任務的辦理人查詢

// .processDefinitionId(processDefinitionId)//使用流程定義ID查詢

// .processInstanceId(processInstanceId)//使用流程實例ID查詢

// .executionId(executionId)//使用執(zhí)行對象ID查詢

/**排序*/

.orderByTaskCreateTime().asc()//使用創(chuàng)建時間的升序排列

/**返回結果集*/

// .singleResult()//返回惟一結果集

// .count()//返回結果集的數量

// .listPage(firstResult, maxResults);//分頁查詢

.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("任務的創(chuàng)建時間:"+task.getCreateTime());

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

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

System.out.println("執(zhí)行對象ID:"+task.getExecutionId());

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

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

}

}

}

/**完成我的任務*/

@Test

public void completeMyPersonalTask(){

//任務ID

String taskId = "4302";

processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.complete(taskId);

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

}

}

十三、Start

代碼:【

package test.i_start;

import java.io.InputStream;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.history.HistoricProcessInstance;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.runtime.ProcessInstance;

import org.junit.Test;

public class StartTest {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/**部署流程定義(從inputStream)*/

@Test

public void deploymentProcessDefinition_inputStream(){

InputStream inputStreamBpmn = this.getClass().getResourceAsStream("start.bpmn");

InputStream inputStreamPng = this.getClass().getResourceAsStream("start.png");

Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service

.createDeployment()//創(chuàng)建一個部署對象

.name("開始活動")//添加部署的名稱

.addInputStream("start.bpmn", inputStreamBpmn)//

.addInputStream("start.png", inputStreamPng)//

.deploy();//完成部署

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

System.out.println("部署名稱:"+deployment.getName());//

}

/**啟動流程實例+判斷流程是否結束+查詢歷史*/

@Test

public void startProcessInstance(){

//流程定義的key

String processDefinitionKey = "start";

ProcessInstance pi = processEngine.getRuntimeService()//與正在執(zhí)行的流程實例和執(zhí)行對象相關的Service

.startProcessInstanceByKey(processDefinitionKey);//使用流程定義的key啟動流程實例,key對應helloworld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動

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

System.out.println("流程定義ID:"+pi.getProcessDefinitionId());//流程定義ID helloworld:1:4

/**判斷流程是否結束,查詢正在執(zhí)行的執(zhí)行對象表*/

ProcessInstance rpi = processEngine.getRuntimeService()//

.createProcessInstanceQuery()//創(chuàng)建流程實例查詢對象

.processInstanceId(pi.getId())

.singleResult();

//說明流程實例結束了

if(rpi==null){

/**查詢歷史,獲取流程的相關信息*/

HistoricProcessInstance hpi = processEngine.getHistoryService()//

.createHistoricProcessInstanceQuery()//

.processInstanceId(pi.getId())//使用流程實例ID查詢

.singleResult();

System.out.println(hpi.getId()+" "+hpi.getStartTime()+" "+hpi.getEndTime()+" "+hpi.getDurationInMillis());

}

}

}

十四、ReceiveTask

代碼:【

import java.io.InputStream;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.runtime.Execution;

import org.activiti.engine.runtime.ProcessInstance;

import org.junit.Test;

public class ReceiveTaskTest {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/**部署流程定義(從inputStream)*/

@Test

public void deploymentProcessDefinition_inputStream(){

InputStream inputStreamBpmn = this.getClass().getResourceAsStream("receiveTask.bpmn");

InputStream inputStreamPng = this.getClass().getResourceAsStream("receiveTask.png");

Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service

.createDeployment()//創(chuàng)建一個部署對象

.name("接收活動任務")//添加部署的名稱

.addInputStream("receiveTask.bpmn", inputStreamBpmn)//

.addInputStream("receiveTask.png", inputStreamPng)//

.deploy();//完成部署

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

System.out.println("部署名稱:"+deployment.getName());//

}

/**啟動流程實例+設置流程變量+獲取流程變量+向后執(zhí)行一步*/

@Test

public void startProcessInstance(){

//流程定義的key

String processDefinitionKey = "receiveTask";

ProcessInstance pi = processEngine.getRuntimeService()//與正在執(zhí)行的流程實例和執(zhí)行對象相關的Service

.startProcessInstanceByKey(processDefinitionKey);//使用流程定義的key啟動流程實例,key對應helloworld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動

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

System.out.println("流程定義ID:"+pi.getProcessDefinitionId());//流程定義ID helloworld:1:4

/**查詢執(zhí)行對象ID*/

Execution execution1 = processEngine.getRuntimeService()//

.createExecutionQuery()//創(chuàng)建執(zhí)行對象查詢

.processInstanceId(pi.getId())//使用流程實例ID查詢

.activityId("receivetask1")//當前活動的id,對應receiveTask.bpmn文件中的活動節(jié)點id的屬性值

.singleResult();

/**使用流程變量設置當日銷售額,用來傳遞業(yè)務參數*/

processEngine.getRuntimeService()//

.setVariable(execution1.getId(), "匯總當日銷售額", 21000);

/**向后執(zhí)行一步,如果流程處于等待狀態(tài),使得流程繼續(xù)執(zhí)行*/

processEngine.getRuntimeService()

.signal(execution1.getId());

/**查詢執(zhí)行對象ID*/

Execution execution2 = processEngine.getRuntimeService()//

.createExecutionQuery()//創(chuàng)建執(zhí)行對象查詢

.processInstanceId(pi.getId())//使用流程實例ID查詢

.activityId("receivetask2")//當前活動的id,對應receiveTask.bpmn文件中的活動節(jié)點id的屬性值

.singleResult();

/**從流程變量中獲取匯總當日銷售額的值*/

Integer value = (Integer)processEngine.getRuntimeService()//

.getVariable(execution2.getId(), "匯總當日銷售額");

System.out.println("給老板發(fā)送短信:金額是:"+value);

/**向后執(zhí)行一步,如果流程處于等待狀態(tài),使得流程繼續(xù)執(zhí)行*/

processEngine.getRuntimeService()

.signal(execution2.getId());

}

}

十五、Task

代碼:【

package test.k_personalTask;

import java.io.InputStream;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

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 TaskTest {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/**部署流程定義(從inputStream)*/

@Test

public void deploymentProcessDefinition_inputStream(){

InputStream inputStreamBpmn = this.getClass().getResourceAsStream("task.bpmn");

InputStream inputStreamPng = this.getClass().getResourceAsStream("task.png");

Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service

.createDeployment()//創(chuàng)建一個部署對象

.name("任務")//添加部署的名稱

.addInputStream("task.bpmn", inputStreamBpmn)//

.addInputStream("task.png", inputStreamPng)//

.deploy();//完成部署

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

System.out.println("部署名稱:"+deployment.getName());//

}

/**啟動流程實例*/

@Test

public void startProcessInstance(){

//流程定義的key

String processDefinitionKey = "task";

/**啟動流程實例的同時,設置流程變量,使用流程變量用來指定任務的辦理人,對應task.pbmn文件中#{userID}*/

Mapvariables = new HashMap();

variables.put("userID", "周芷若");

ProcessInstance pi = processEngine.getRuntimeService()//與正在執(zhí)行的流程實例和執(zhí)行對象相關的Service

.startProcessInstanceByKey(processDefinitionKey,variables);//使用流程定義的key啟動流程實例,key對應helloworld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動

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

System.out.println("流程定義ID:"+pi.getProcessDefinitionId());//流程定義ID helloworld:1:4

}

/**查詢當前人的個人任務*/

@Test

public void findMyPersonalTask(){

String assignee = "周芷若";

Listlist = processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.createTaskQuery()//創(chuàng)建任務查詢對象

/**查詢條件(where部分)*/

.taskAssignee(assignee)//指定個人任務查詢,指定辦理人

// .taskCandidateUser(candidateUser)//組任務的辦理人查詢

// .processDefinitionId(processDefinitionId)//使用流程定義ID查詢

// .processInstanceId(processInstanceId)//使用流程實例ID查詢

// .executionId(executionId)//使用執(zhí)行對象ID查詢

/**排序*/

.orderByTaskCreateTime().asc()//使用創(chuàng)建時間的升序排列

/**返回結果集*/

// .singleResult()//返回惟一結果集

// .count()//返回結果集的數量

// .listPage(firstResult, maxResults);//分頁查詢

.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("任務的創(chuàng)建時間:"+task.getCreateTime());

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

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

System.out.println("執(zhí)行對象ID:"+task.getExecutionId());

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

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

}

}

}

/**完成我的任務*/

@Test

public void completeMyPersonalTask(){

//任務ID

String taskId = "5505";

processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.complete(taskId);

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

}

}

十六、group

代碼:【

package test.l_group;

import java.io.InputStream;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.history.HistoricIdentityLink;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.runtime.ProcessInstance;

import org.activiti.engine.task.IdentityLink;

import org.activiti.engine.task.Task;

import org.junit.Test;

public class TaskTest {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/**部署流程定義(從inputStream)*/

@Test

public void deploymentProcessDefinition_inputStream(){

InputStream inputStreamBpmn = this.getClass().getResourceAsStream("task.bpmn");

InputStream inputStreamPng = this.getClass().getResourceAsStream("task.png");

Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service

.createDeployment()//創(chuàng)建一個部署對象

.name("任務")//添加部署的名稱

.addInputStream("task.bpmn", inputStreamBpmn)//

.addInputStream("task.png", inputStreamPng)//

.deploy();//完成部署

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

System.out.println("部署名稱:"+deployment.getName());//

}

/**啟動流程實例*/

@Test

public void startProcessInstance(){

//流程定義的key

String processDefinitionKey = "task";

/**啟動流程實例的同時,設置流程變量,使用流程變量用來指定任務的辦理人,對應task.pbmn文件中#{userIDs}*/

Mapvariables = new HashMap();

variables.put("userIDs", "大大,中中,小小");

ProcessInstance pi = processEngine.getRuntimeService()//與正在執(zhí)行的流程實例和執(zhí)行對象相關的Service

.startProcessInstanceByKey(processDefinitionKey,variables);//使用流程定義的key啟動流程實例,key對應helloworld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動

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

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

}

/**查詢當前人的個人任務*/

@Test

public void findMyPersonalTask(){

String assignee = "小A";

Listlist = processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.createTaskQuery()//創(chuàng)建任務查詢對象

/**查詢條件(where部分)*/

.taskAssignee(assignee)//指定個人任務查詢,指定辦理人

// .taskCandidateUser(candidateUser)//組任務的辦理人查詢

/**排序*/

.orderByTaskCreateTime().asc()//使用創(chuàng)建時間的升序排列

/**返回結果集*/

.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("任務的創(chuàng)建時間:"+task.getCreateTime());

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

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

System.out.println("執(zhí)行對象ID:"+task.getExecutionId());

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

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

}

}

}

/**查詢當前人的組任務*/

@Test

public void findMyGroupTask(){

String candidateUser = "大大";

Listlist = processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.createTaskQuery()//創(chuàng)建任務查詢對象

/**查詢條件(where部分)*/

.taskCandidateUser(candidateUser)//組任務的辦理人查詢

/**排序*/

.orderByTaskCreateTime().asc()//使用創(chuàng)建時間的升序排列

/**返回結果集*/

.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("任務的創(chuàng)建時間:"+task.getCreateTime());

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

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

System.out.println("執(zhí)行對象ID:"+task.getExecutionId());

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

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

}

}

}

/**完成我的任務*/

@Test

public void completeMyPersonalTask(){

//任務ID

String taskId = "6905";

processEngine.getTaskService()//與正在執(zhí)行的任務管理相關的Service

.complete(taskId);

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

}

/**查詢正在執(zhí)行的任務辦理人表*/

@Test

public void findRunPersonTask(){

//任務ID

String taskId = "6204";

Listlist = processEngine.getTaskService()//

.getIdentityLinksForTask(taskId);

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

for(IdentityLink identityLink:list){

System.out.println(identityLink.getTaskId()+" "+identityLink.getType()+" "+identityLink.getProcessInstanceId()+" "+identityLink.getUserId());

}

}

}

/**查詢歷史任務的辦理人表*/

@Test

public void findHistoryPersonTask(){

//流程實例ID

String processInstanceId = "6201";

Listlist = processEngine.getHistoryService()//

.getHistoricIdentityLinksForProcessInstance(processInstanceId);

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

for(HistoricIdentityLink identityLink:list){

System.out.println(identityLink.getTaskId()+" "+identityLink.getType()+" "+identityLink.getProcessInstanceId()+" "+identityLink.getUserId());

}

}

}

/**拾取任務,將組任務分給個人任務,指定任務的辦理人字段*/

@Test

public void claim(){

//將組任務分配給個人任務

//任務ID

String taskId = "6905";

//分配的個人任務(可以是組任務中的成員,也可以是非組任務的成員)

String userId = "大大";

processEngine.getTaskService()//

.claim(taskId, userId);

}

/**將個人任務回退到組任務,前提,之前一定是個組任務*/

@Test

public void setAssigee(){

//任務ID

String taskId = "6204";

processEngine.getTaskService()//

.setAssignee(taskId, null);

}

/**向組任務中添加成員*/

@Test

public void addGroupUser(){

//任務ID

String taskId = "6204";

//成員辦理人

String userId = "大H";

processEngine.getTaskService()//

.addCandidateUser(taskId, userId);

}

/**從組任務中刪除成員*/

@Test

public void deleteGroupUser(){

//任務ID

String taskId = "6204";

//成員辦理人

String userId = "小B";

processEngine.getTaskService()//

.deleteCandidateUser(taskId, userId);

}

}

工作流activiti eclipse 插件不自動生成png

步驟:

window

——> preferences

——>activiti

——>save

——>選中create process definition image when saving the diagram

上一篇:linux線程庫詳解,還附帶典型實例哦

下一篇:udp編程步驟詳解,就是如此的簡單

熱點文章推薦
華清學員就業(yè)榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業(yè)培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 国语高潮无遮挡无码免费看 | 男女做爰裸体猛烈吃奶摸视频 | 久久精品国产亚洲AV麻豆长发 | 日批免费观看 | 国产欧美成人一区二区a片 最新欧美日韩 | 人人人爽 | 中文字幕乱偷无码AV先锋蜜桃 | 精品久久久久久国产潘金莲 | 欧美一区二区精品夜夜嗨 | 婷婷一区二区三区四区 | www.涩| 无码人妻丰满熟妇啪啪网不卡 | 免费毛儿一区二区十八岁 | 成人无码视频在线观看网站 | 亚洲国产成人精品福利在线观看 | 午夜免费啪视频在线体验区 | 日韩欧美一区二区在线播放 | 亚洲AV综合A国产AV中文 | 欧美疯狂性受XXXXX另类 | 国产成人人妻精品一区二区三区 | 免费精品国产自产拍在线观看图片 | 精品日韩亚洲AV无码一区破坏 | 中文字幕在线中字日韩 | 白袜奴gay网站 | 久久久精品影视 | 好黄好污美女裸体网站 | 亚欧美无遮挡HD高清在线视频 | 亚洲av一级毛片特黄大片 | 精品国内自产拍在线播放观看 | 日本无遮挡色又黄的视频 | 精品无码久久久久久久久 | 亚洲高清aⅴ日本欧美视频 日本50岁熟妇XXXX | 日出水了特别黄的视频 | 色婷婷六月亚洲婷婷丁香 | 欧洲视频一区二区三区 | 无码熟妇人妻AV在线网站 | 性欧美欧美巨大69 | av色播 | 亚洲一区蜜桃 | 免费A级毛片出奶水 | 久久草av |