アクティビティプロセスフレームワーク

6つの主要な概念:
プロセス定義のプロセス・インスタンスのプロセス変数のタスク開始終了ゲートウェイ

ProcessEngineスレッドの安全性はすべてのサービスがProcessEngineで作成する必要がある、Activiti5の心臓部である
MyBatisのある層Activiti5が使用する永続化

:ProcessEngineが作成した7サービス
repositoryService(永続サービス)のデータベースと対話
のプロセスの実行に関連するruntimeService(ランタイムサービス)
formServiceを(フォームサービス)
identityService(アイデンティティ)
TaskService(タスクサービス)と各プロセス手順
プロセスの履歴を表示するにはhistoryService(履歴情報)は、ステップ
の固定点に固定された時間にタスクを完了するためにmanagementService(スケジュールされたタスクを管理します)

**

テーブル構造

**

act_ge_bytearray二进制数据表
act_ge_property属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录,
 
act_hi_actinst历史节点表  ****
act_hi_attachment历史附件表
act_hi_comment历史意见表
act_hi_identitylink历史流程人员表
act_hi_detail历史详情表,提供历史变量的查询
act_hi_procinst历史流程实例表****
act_hi_taskinst历史任务实例表****
act_hi_varinst历史变量表
 
act_id_group用户组信息表
act_id_info用户扩展信息表
act_id_membership用户与用户组对应信息表
act_id_user用户信息表
 
act_re_deployment部署信息表
act_re_model流程设计模型部署表
act_re_procdef流程定义数据表
 
act_ru_event_subscr  throwEvent、catchEvent时间监听信息表
act_ru_execution运行时流程执行实例表****
act_ru_identitylink运行时流程人员表,主要存储任务节点与参与者的相关信息
act_ru_job运行时定时任务数据表
act_ru_task运行时任务节点表
act_ru_variable运行时流程变量数据表
act_ge_bytearray二进制数据表
act_ge_property属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录,
 
act_hi_actinst历史节点表
act_hi_attachment历史附件表
act_hi_comment历史意见表
act_hi_identitylink历史流程人员表
act_hi_detail历史详情表,提供历史变量的查询
act_hi_procinst历史流程实例表
act_hi_taskinst历史任务实例表
act_hi_varinst历史变量表
 
act_id_group用户组信息表
act_id_info用户扩展信息表
act_id_membership用户与用户组对应信息表
act_id_user用户信息表
 
act_re_deployment部署信息表
act_re_model流程设计模型部署表
act_re_procdef流程定义数据表
 
act_ru_event_subscr  throwEvent、catchEvent时间监听信息表
act_ru_execution运行时流程执行实例表
act_ru_identitylink运行时流程人员表,主要存储任务节点与参与者的相关信息
act_ru_job运行时定时任务数据表
act_ru_task运行时任务节点表****
act_ru_variable运行时流程变量数据表

**

基本的な使用

オブジェクトを設定した後に直接注入を使用することができます
**

(1)部署: 在process文件夹下放bpmn文件
Deployment deploy = repositoryService.createDeployment().addClasspathResource("文件.bpmn").deploy();  
		部署后:
		1act_ge_bytearray表
		二进制数据表,存储了流程定义图形的XML文件和图片信息
		保存流程定义的xml信息 
		保存流程定义的图片  
		2.act_re_deployment
		部署信息表,存储了部署的相关信息(部署时间)
		3.act_re_procdef
		流程定义数据表,存储了当前流程图形的相关信息(id,name,版本号)

		如果有乱码:
		@Configuration
		public class ActivitiConfig implements ProcessEngineConfigurationConfigurer{
		@Override
		public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
		processEngineConfiguration.setActivityFontName("宋体");
		processEngineConfiguration.setLabelFontName("宋体");
		} 
		}
	
		查询流程部署数据:
			ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
		/*List<ProcessDefinition> list = query.list();
		for (ProcessDefinition pd : list) {
		System.out.println(pd.getId() +" - " + pd.getName() + " - " + pd.getVersion());
		}*/
		long count = query.count(); //流程定义的数量

		//ProcessDefinition singleResult = query.latestVersion().singleResult();//获取最后一次部署的流程定义对象
		//System.out.println(singleResult.getId() +" - " + singleResult.getName() + " - " + singleResult.getVersion());
		
		/*ProcessDefinitionQuery processDefinitionQuery = query.orderByProcessDefinitionVersion().desc();//根据版本号进行倒序排序
		List<ProcessDefinition> list2 = processDefinitionQuery.list();
		for (ProcessDefinition pd : list2) {
		System.out.println("---"+pd.getId() +" - " + pd.getName() + " - " + pd.getVersion());
		}*/
		 
		//query.listPage(firstResult, maxResults);//分页的方法
		ProcessDefinition singleResult = query.processDefinitionKey("myProcess").latestVersion().singleResult();
		System.out.println(singleResult.getId() +" - " + singleResult.getName() + " - " + singleResult.getVersion());
(2)启动流程实例:
		//查询流程定义
		ProcessDefinition processDefinition = repositoryService
		.createProcessDefinitionQuery()
		.processDefinitionKey("你的key")
		.latestVersion()
		.singleResult();
		 
		//运行启动流程实例
		
		ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId());
 		//可以进行输出
		相关表哥:
		act_ru_execution : 运行时流程执行实例表 
		act_ru_task : 运行时任务节点表 
		act_hi_procinst : 历史流程实例表 
		act_hi_taskinst : 历史任务实例表 
		act_hi_actinst : 历史节点列表,把每一个执行过的节点数据保存 

(3)获取流程任务
			TaskQuery taskQuery = taskService.createTaskQuery();
			List<Task> list1 = taskQuery.taskAssignee("名字").list();  
			List<Task> list2 = taskQuery.taskAssignee("名字").list(); 
			 
			for (Task task : list1) {
				System.out.println("1的任务="+task.getName());
			}
		 
			for (Task task : list2) {
				System.out.println("2的任务="+task.getName());
			} 

(4)查询并完成任务:
		TaskQuery taskQuery = taskService.createTaskQuery();
		List<Task> list1 = taskQuery.taskAssignee("1").list(); 
		List<Task> list2 = taskQuery.taskAssignee("2").list();
		for (Task task : list1) {
			System.out.println("1的任务="+task.getName());
			taskService.complete(task.getId());
		}
(5)历史任务:
		//查询流程定义
		ProcessDefinition processDefinition = repositoryService
		.createProcessDefinitionQuery()
		.processDefinitionKey("你的key")
		.latestVersion()
		.singleResult();
		 
		HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery();
		HistoricProcessInstance historicProcessInstance =
	 query.processInstanceId("401").finished().singleResult();
		//HistoricProcessInstanceEntity[superProcessInstanceId=null]
	 	//finished() 判断流程实例是否完成状态,如果是完成状态会返回历史流程实例对象,否则为null
(6)对任务进行领取:
		TaskQuery taskQuery = taskService.createTaskQuery();
		List<Task> list = taskQuery.taskCandidateGroup("组名字").list();
 		for (Task task : list) {
			taskService.claim(task.getId(), "人"); //领取任务                        
		}
(7)采用流程变量获取委托人:
		ProcessDefinition processDefinition = repositoryService
		.createProcessDefinitionQuery()
		.processDefinitionKey("key")
		.latestVersion()
		.singleResult();
		 
		Map<String,Object> variables = new HashMap<String,Object>();
		variables.put("设置好的流程变量1", "人1");
		variables.put("设置好的流程变量2", "人2");
		 
		//ProcessInstance processInstance =
	 runtimeService.startProcessInstanceById(processDefinition.getId());
		ProcessInstance processInstance =
	 runtimeService.startProcessInstanceById(processDefinition.getId(),variables);
		System.out.println(processInstance);
(8)排他网关: 多个分支只能有一个被执行 
		Deployment deploy =
	 repositoryService.createDeployment().addClasspathResource("你的文件.bpmn").deploy();
		System.out.println(deploy);
		 
		//查询流程定义
		ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
		.processDefinitionKey("key")
		.latestVersion()
		.singleResult();
		 
		//准备流程变量
		Map<String,Object> variables = new HashMap<String,Object>();
		variables.put("days", 3);
		 
		//启动流程,传递流程变量
		ProcessInstance processInstance =
	 runtimeService.startProcessInstanceById(processDefinition.getId(),variables);
		 
		List<Task> list = taskService.createTaskQuery().taskAssignee("任命").list();
		for (Task task : list) {
			taskService.complete(task.getId());
		}
		 
		HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
		.processInstanceId(processInstance.getId())
		.finished()
		.singleResult();

并行网关:多个分支同时都被执行,流程才能往后执行 ,称为并行网关  
		Deployment deploy =
		 repositoryService.createDeployment().addClasspathResource("文件.bpmn").deploy();
		 
		//查询流程定义
		ProcessDefinition processDefinition = repositoryService
		.createProcessDefinitionQuery()
		.processDefinitionKey("key")
		.latestVersion()
		.singleResult();
		 
		//启动流程,传递流程变量
		ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId());

		 
		List<Task> list1 = taskService().createTaskQuery().taskAssignee("人1").list();
		List<Task> list2 = taskService().createTaskQuery().taskAssignee("人2").list();
		 
		 
		for (Task task : list1) {
	
		taskService().complete(task.getId());
		}
		 

		 
		HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
		.processInstanceId(processInstance.getId())
		.finished()
		.singleResult();
		 
		 
		 
		for (Task task : list2) {
	
		processEngine.getTaskService().complete(task.getId());
		}
		 

		 
		historicProcessInstance = historyService()
		.createHistoricProcessInstanceQuery()
		.processInstanceId(processInstance.getId())
		.finished()
		.singleResult();

包含网关 :相当于 排他 加 并行网关
			如果当前条件只有一个成立则执行后续流程-相当于排他网关
			如果当前所有条件成立,则必须所有条件成立的任务完成才会执行后续流程-相当于并行网关
		
		Deployment deploy = repositoryService.createDeployment().addClasspathResource("文件.bpmn").deploy();
		 
		//查询流程定义
		ProcessDefinition processDefinition = repositoryService
		.createProcessDefinitionQuery()
		.processDefinitionKey("key")
		.latestVersion()
		.singleResult();
		 
		//准备流程变量
		Map<String,Object> variables = new HashMap<String,Object>();
		//variables.put("days", 5);//条件:days>3
		//variables.put("cost", 100); //条件:cost>5000
		 
		variables.put("days", 5);//条件:days>3
		variables.put("cost", 10000); //条件:cost>5000
		 
		//启动流程,传递流程变量
		ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId(),variables);
		List<Task> list = taskService.createTaskQuery().taskAssignee("人1").list();
		for (Task task : list) {
		taskService.complete(task.getId());
		}
		 
		HistoricProcessInstance historicProcessInstance =historyService.createHistoricProcessInstanceQuery()
		.processInstanceId(processInstance.getId())
		.finished()
		.singleResult();
(9)流程监听器:
		写两个类实现 ExecutionListener
		选择结束节点 加监听器
			//部署流程
		ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey("key");
		 
		TaskService taskService = processEngine.getTaskService();
		 
		List<Task> tasks = taskService.createTaskQuery().taskAssignee("人1").list();
		 
		for ( Task task : tasks ) {
			taskService.setVariable(task.getId(), "flg", false);
			taskService.complete(task.getId());
		}
	、、

公開された63元の記事 ウォン称賛44 ビュー6235

おすすめ

転載: blog.csdn.net/weixin_40695328/article/details/95604940