「Activitiワークフローフレームワーク」トピック(6)-Activitiワークフローフレームワークタスクタイプ

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を渡します。

おすすめ

転載: blog.csdn.net/BruceLiu_code/article/details/113643655