記事のディレクトリ
1.個人的なタスク
それは特定の人によって処理され、担当者フィールドを介して割り当てテーブルに記録されます
2.一般的なタスク(グループタスク)
現在のタスクは複数の人が処理でき、フローチャートを設計するときに複数の人を指定できます。
テスト:
/*
* 公共任务测试
*/
public class PublicTask {
ProcessEngine pe=null;
@Before
public void init(){
pe = ProcessEngines.getDefaultProcessEngine();
}
/**
* 01-部署流程定义
*/
@Test
public void test1(){
DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
deploymentBuilder.addClasspathResource("Demo.bpmn");
deploymentBuilder.addClasspathResource("Demo.png");
Deployment deployment = deploymentBuilder.deploy();
System.out.println("流程定义部署成功...");
}
/**
* 02-查询流程定义列表
*/
@Test
public void test2() {
// 流程定义查询对象,用于查询表act_re_procdef
ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
// 添加排序条件
query.orderByProcessDefinitionVersion().desc();
// 添加分页查询
query.listPage(0, 10);
List<ProcessDefinition> list = query.list();
for (ProcessDefinition pd : list) {
System.out.println(pd.getId() + "--" + pd.getName()+"--key:"+pd.getKey());
}
}
/**
* 03-启动流程实例
*/
@Test
public void test3(){
String processDefinitionId="myProcess:1:60004";
pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
System.out.println("流程实例定义成功.....");
}
/**
* 04-办理个人任务
*/
@Test
public void test4(){
String taskId="62504";
pe.getTaskService().complete(taskId);
System.out.println("任务办理成功....");
}
/**
* 05-查询公共任务列表
*/
@Test
public void test5(){
TaskQuery query = pe.getTaskService().createTaskQuery();
//根据候选人过滤
String candidateUser="小黑";
query.taskCandidateUser(candidateUser);
List<Task> list = query.list();
for (Task task : list) {
System.out.println(task.getName()+"----"+task.getId());
}
}
/**
* 06-拾取任务(将公共任务变为个人任务)
*/
@Test
public void test6(){
String userId="小黑";
String taskId="65002";
pe.getTaskService().claim(taskId, userId);
System.out.println("任务拾取成功..");
}
/**
* 07-查询个人任务列表
*/
@Test
public void test7() {
TaskQuery query = pe.getTaskService().createTaskQuery();
String assignee = "小黑";
query.taskAssignee(assignee);
List<Task> list = query.list();
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());
}
}
/**
* 08-办理任务
*/
@Test
public void test9(){
String taskId= "65002";
pe.getTaskService().complete(taskId);
System.out.println("办理完成,任务ID是:"+taskId);
}
}
3.タスクの受信
受信タスクは特定の人によって処理されず、プロセスはシグナル方式で実行されます
/**
* 接受任务测试
*/
public class ReceiveTaskTest {
ProcessEngine pe=null;
@Before
public void init(){
pe = ProcessEngines.getDefaultProcessEngine();
}
/**
* 01-部署流程定义
*/
@Test
public void test1(){
DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
deploymentBuilder.addClasspathResource("Demo1.bpmn");
deploymentBuilder.addClasspathResource("Demo1.png");
Deployment deployment = deploymentBuilder.deploy();
System.out.println("流程定义部署成功...");
}
/**
* 02-查询流程定义列表
*/
@Test
public void test2() {
// 流程定义查询对象,用于查询表act_re_procdef
ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
// 添加排序条件
query.orderByProcessDefinitionVersion().desc();
// 添加分页查询
query.listPage(0, 10);
List<ProcessDefinition> list = query.list();
for (ProcessDefinition pd : list) {
System.out.println(pd.getId() + "--" + pd.getName()+"--key:"+pd.getKey());
}
}
/**
* 03-启动流程实例
*/
@Test
public void test3(){
String processDefinitionId="myProcess:2:75004";
pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
System.out.println("流程实例定义成功.....");
}
/**
* 04-办理任务
*/
@Test
public void test4(){
String taskId = "77504";
pe.getTaskService().complete(taskId );
}
/**
* 05-查询流程实例列表,查询act_ru_execution表
*/
@Test
public void test9() {
// 流程实例查询对象,查询act_ru_execution表
ProcessInstanceQuery query = pe.getRuntimeService().createProcessInstanceQuery();
query.processDefinitionKey("myProcess");
query.orderByProcessInstanceId().desc();
query.listPage(0, 2);
List<ProcessInstance> list = query.list();
for (ProcessInstance pi : list) {
System.out.println(pi.getId() + " " + pi.getActivityId());
}
}
/**
* 06-处理接收任务
*/
@Test
public void test5(){
String executionId = "77501";
pe.getRuntimeService().signal(executionId);
}
}
4.タスクケースを受け取る
受信タスク(ReceiveTask)は待機タスクであり、受信タスクは対応するメッセージの到着を待機する単純なタスクです。現在、公式は実装のみ
このタスクのJavaセマンティクス。プロセスが受信タスクに到達すると、プロセスの状態がデータベースに保存されます。タスクが作成された後、それはプロセスが入り、待つことを意味します
エンジンが特定のメッセージを受信するまで待ちます。これにより、プロセスは受信タスクを通じて実行を継続します。
フローチャートの
デモンストレーション
package cn.gome.j_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();
/**部署流程定义+启动流程实例*/
@Test
public void deployementAndStartProcess(){
InputStream inputStreamBpmn = this.getClass().getResourceAsStream("receiveTask.bpmn");
InputStream inputStreamPng = this.getClass().getResourceAsStream("receiveTask.png");
//1.部署流程定义
Deployment deployment = processEngine.getRepositoryService()
.createDeployment()//创建部署对象
.addInputStream("receiveTask.bpmn", inputStreamBpmn)
.addInputStream("receiveTask.png", inputStreamPng)
.deploy();
System.out.println("部署ID:" + deployment.getId());
//2.启动流程实例
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey("receiveTask");//使用流程定义的key的最新版本启动流程
System.out.println("流程实例ID:"+pi.getId());
System.out.println("流程定义ID:"+pi.getProcessDefinitionId());
//3.查询执行对象表,使用流程实例ID和当前活动的名称(receivetask1)
String processInstanceId = pi.getId();//得到流程实例ID
Execution execution1 = processEngine.getRuntimeService()
.createExecutionQuery()
.processInstanceId(processInstanceId)//流程实例ID
.activityId("receivetask1")//当前活动的名称
.singleResult();
//4.使用流程变量设置当日的销售额
processEngine.getRuntimeService().setVariable(execution1.getId(), "当日销售额", 20000);
//5.向后执行一步
processEngine.getRuntimeService()
.signal(execution1.getId());
//6.查询执行对象表,使用流程实例ID和当前活动的名称(receivetask2)
Execution execution2 = processEngine.getRuntimeService()
.createExecutionQuery()
.processInstanceId(processInstanceId)
.activityId("receivetask2")
.singleResult();
//7.获取流程变量,给老板发送短信
Integer value = (Integer) processEngine.getRuntimeService()
.getVariable(execution2.getId(), "当日销售额");
System.out.println("给老板发送短信:内容,当日销售额:"+value);
//8.向后执行一步
processEngine.getRuntimeService()
.signal(execution2.getId());
//9.判断流程是否结束
ProcessInstance nowPi = processEngine.getRuntimeService()
.createProcessInstanceQuery()
.processInstanceId(pi.getId())
.singleResult();
if(nowPi == null){
System.out.println("流程结束");
}
}
}
注:UserTaskとは異なり、ReceiveTaskが作成されると、待機状態になります。これは通常、マシンの自動完了を意味しますが、作業には一定の時間がかかります。作業が完了すると、プロセスは進行します。後方。、上記のコードでは、1ステップ下を実行し、を使用して
runtimeService.signal(executionId)
、受信する実行オブジェクトのIDを渡します。