RepositoryService : 管理和控制发布包
和流程定义(包含了一个流程每个环节的结构和行为)
的操作
除此之外,服务可以
-
查询引擎中的发布包和流程定义。
-
暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。
-
获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。
-
获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。
RuntimeService :负责启动一个流程定义的新实例,获取和保存流程变量,查询流程实例和执行
TaskService :所有与任务有关的功能
IdentityService: 管理(创建,更新,删除,查询...)群组和用户
FormService: 一个可选服务,这个服务提供了启动表单和任务表单两个概念
HistoryService: 提供了Activiti引擎的所有历史数据
ManagementService :在使用Activiti的定制环境中基本上不会用到。 它可以查询数据库的表和表的元数据。另外,它提供了查询和管理异步操作的功能。
RepositoryService
获取方式:
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- RepositoryService repositoryService = processEngine.getRepositoryService();
任何与“静态”资源有关的数据(比如流程定义)都可以通过
RepositoryService访问。 从概念上讲,所以静态数据都是Activiti的资源内容。
部署流程文件:
- @Test
- public void deployFlow(){
- RepositoryService repositoryService = processEngine.getRepositoryService();
-
-
- InputStream in = this.getClass().getClassLoader().getResourceAsStream("myleave.zip");
- ZipInputStream zipInputStream = new ZipInputStream(in);
-
- repositoryService.createDeployment()
-
- .addZipInputStream(zipInputStream)
-
-
-
- .name("Myleave")
- .deploy();
- }
当文件部署成功后,会操作数据库中的这三张表
act_re_deployment (部署信息表)
存放流程定义的别名和部署时间
act_re_procdef(流程定义数据表)
存放流程定义的信息,每部署一个新的流程定义都会在这张表中增加一条记录。
如果当KEY相同 也就是 bpmn流程文件的 ID 相同是 增加的记录里面的版本会升级一个版本
act_ge_bytearray(资源文件表)
存放部署后的流程文件
查看流程定义信息:
- @Test
- public void queryProcdef(){
- RepositoryService repositoryService = processEngine.getRepositoryService();
-
- ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
-
- query.processDefinitionKey("myProcess");
-
-
-
-
-
- List<ProcessDefinition> pds = query.list();
-
- for (ProcessDefinition pd : pds) {
- System.out.println("ID:"+pd.getId()+",NAME:"+pd.getName()+",KEY:"+pd.getKey()+",VERSION:"+pd.getVersion()+",RESOURCE_NAME:"+pd.getResourceName()+",DGRM_RESOURCE_NAME:"+pd.getDiagramResourceName());
- System.out.println("------------------------------------------------");
- }
-
- }
运行结果:
- ID:myProcess:1:604,NAME:My process,KEY:myProcess,DEPLOYMENT_ID:601,VERSION:1,RESOURCE_NAME:MyLeave.bpmn,DGRM_RESOURCE_NAME:MyLeave.png
- ------------------------------------------------
- ID:myProcess:2:809,NAME:My process,KEY:myProcess,DEPLOYMENT_ID:806,VERSION:2,RESOURCE_NAME:MyLeave.bpmn,DGRM_RESOURCE_NAME:MyLeave.png
- ------------------------------------------------
显示图片:
通过repositoryService查看流程定义信息,并且获取DEPLOYMENT_ID到 act_ge_bytearray 查询到 资源文件名
通过资源文件名和deploymentId获取流并输出到文件中
- @Test
- public void showImg() throws IOException{
- String deploymentId = "601";
-
- List<String> names = processEngine.getRepositoryService()
- .getDeploymentResourceNames(deploymentId);
- String imgName = null;
- for (String name : names) {
- System.out.println("name:"+name);
- if (name.endsWith(".png")) {
- imgName = name;
- }
- }
- System.out.println("imgName:"+imgName);
- if (imgName != null) {
- File file = new File("e:/"+imgName);
-
- InputStream in = processEngine.getRepositoryService()
- .getResourceAsStream(deploymentId, imgName);
-
- FileUtils.copyInputStreamToFile(in, file);
- }
- }
在E盘下查看 生成的照片
删除流程定义:
- @Test
- public void delDeployment(){
- String deploymentId = "1";
- processEngine.getRepositoryService()
-
-
-
- .deleteDeployment(deploymentId, true);
- }
RuntimeService
获取方式:
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- RuntimeService runtimeService = processEngine.getRuntimeService();
启动一个流程实例:
- @Test
- public void startFlow(){
-
- RuntimeService runtimeService = processEngine.getRuntimeService();
-
-
- ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");
- System.out.println("id:"+processInstance.getId()+",activitiId:"+processInstance.getActivityId());
- }
当一个流程实例启动后,会在 act_ru_execution 表中插入一条记录,如果是用户任务节点,同时也会在act_ru_task表中插入一条记录
查询流程状态:
- @Test
- public void queryState(){
- String processInstanceId = "701";
- ProcessInstance pi = processEngine.getRuntimeService()
-
-
- .createProcessInstanceQuery()
- .processInstanceId(processInstanceId)
-
-
- .singleResult();
- if (pi != null) {
- System.out.println("当前流程:"+pi.getActivityId());
- }else {
- System.out.println("流程已经结束");
- }
- }
在整个流程执行的过程中,流程ID 都是 唯一不变的,当流程结束后 流程记录就会在 act_ru_execution 表中被删除,存入到历史表
设置和获取流程变量:
- public void setAndGetVariables(){
- RuntimeService runtimeService = processEngine.getRuntimeService();
-
-
-
-
-
-
- Map<String, Object> paramMap = new HashMap<String, Object>();
-
-
-
-
-
-
-
- }
流程变量所支持的类型
设置的流程变量会存入到act_ru_variable表
act_ru_variable表 的BYTEARRAY_ID_对应的是 act_ge_bytearray 如果是复杂类型的数据 会存入二进制字段中
TaskService
获取方式:
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- TaskService taskService = processEngine.getTaskService();
查看个人任务:
- @Test
- public void queryTask(){
-
- TaskService taskService = processEngine.getTaskService();
-
- List<Task> tasks = taskService.createTaskQuery()
-
-
-
-
- .taskAssignee("张三")
- .list();
- for (Task task : tasks) {
- System.out.println("ID:"+task.getId()+",姓名:"+task.getName()+",接收人:"+task.getAssignee()+",开始时间:"+task.getCreateTime());
- }
- }
运行结果
- ID:704,姓名:员工请假,接收人:张三,开始时间:Wed Oct 22 17:03:04 CST 2014
- ID:804,姓名:员工请假,接收人:张三,开始时间:Thu Oct 23 11:27:47 CST 2014
除了个人任务 还有 组任务
办理任务:
- @Test
- public void startTask(){
- TaskService taskService = processEngine.getTaskService();
-
- String taskId = "704";
-
- taskService.complete(taskId );
- }
taskService 和 runtimeService 一样都是可以设置流程变量的
HistoryService
获取方式:
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- HistoryService historyService = processEngine.getHistoryService();
查询历史任务:
- @Test
- public void queryHistoryTask(){
- String assignee = "张三";
- HistoryService historyService = processEngine.getHistoryService();
-
- List<HistoricTaskInstance> htis = historyService.createHistoricTaskInstanceQuery()
-
-
-
-
- .taskAssignee(assignee)
- .list();
-
- for (HistoricTaskInstance hti : htis) {
- System.out.println("ID:"+hti.getId()+",流程实例ID:"+hti.getProcessInstanceId()+",接收人:"+hti.getAssignee()+",执行对象ID:"+hti.getExecutionId());
- System.out.println("------------------------------------------------");
- }
- }
结果:
- ID:704,流程实例ID:701,接收人:张三,执行对象ID:701
- ------------------------------------------------
- ID:804,流程实例ID:801,接收人:张三,执行对象ID:801
- ------------------------------------------------
主要是查询act_hi_taskinst表中的数据
查询历史流程实例:
- @Test
- public void queryHistoryPi(){
- HistoryService historyService = processEngine.getHistoryService();
- String pi = "701";
-
- List<HistoricProcessInstance> hpis = historyService.createHistoricProcessInstanceQuery()
- .processInstanceId(pi)
- .list();
-
- for (HistoricProcessInstance hpi : hpis) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- System.out.println("实例ID:"+hpi.getId()+",开始时间:"+sdf.format(hpi.getStartTime())+",结束时间:"+sdf.format(hpi.getEndTime()));
- System.out.println("-------------------------------------");
- }
- }
结果:
- 实例ID:701,开始时间:2014-10-22 17:03:04,结束时间:2014-10-23 15:25:03
- -------------------------------------
主要是查询act_hi_procinst表中的数据
获取历史流程变量:
- @Test
- public void getHistoryVariable(){
- HistoryService historyService = processEngine.getHistoryService();
-
- List<HistoricVariableInstance> hvis = historyService.createHistoricVariableInstanceQuery()
- .variableName("key")
- .list();
-
- if (hvis != null) {
- for (HistoricVariableInstance hvi : hvis) {
- System.out.println("key:"+hvi.getVariableName()+",value:"+hvi.getValue());
- }
- }
- }
主要是查询act_hi_varinst表中的数据
查询历史活动信息:
- @Test
- public void queryHistoryAi(){
- String pi = "701";
- HistoryService historyService = processEngine.getHistoryService();
-
- List<HistoricActivityInstance> hais = historyService.createHistoricActivityInstanceQuery()
- .processInstanceId(pi)
- .list();
-
- for (HistoricActivityInstance hai : hais) {
- System.out.println("活动ID:"+hai.getActivityId()+",活动名称:"+hai.getActivityName()+",活动类型:"+hai.getActivityType()+",流程实例ID:"+hai.getProcessInstanceId()+",接收人:"+hai.getAssignee());
- System.out.println("--------------------------------");
- }
-
- }
结果:
- 活动ID:endevent1,活动名称:End,活动类型:endEvent,流程实例ID:701,接收人:null
- --------------------------------
- 活动ID:startevent1,活动名称:Start,活动类型:startEvent,流程实例ID:701,接收人:null
- --------------------------------
- 活动ID:员工请假,活动名称:员工请假,活动类型:userTask,流程实例ID:701,接收人:张三
- --------------------------------
- 活动ID:老板审批,活动名称:老板审批,活动类型:userTask,流程实例ID:701,接收人:老板
- --------------------------------
这几个是最常用的几个服务.
流程实例和执行对象的区别 流程实例和执行对象 2个是不同的一个概念