码迷,mamicode.com
首页 > 数据库 > 详细

activiti--6-------------------------------------连线(一般数据库表的查询顺序)

时间:2017-12-12 12:21:22      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:个人   let   list   执行   ini   resource   分享图片   ==   bytearray   

一、流程图

技术分享图片

 

二、这次把流程图和Java类放在一个包下

技术分享图片

 

 

三、代码

package com.xingshang.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()//创建一个部署对象
                                        .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()//与正在执行的流程实例和执行对象相关的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 findMyPersonalTask(){
        String assignee = "习大大";
        
        List<Task> list = processEngine.getTaskService()//与正在执行的任务管理相关的Sercice
                        .createTaskQuery()//创建任务查询对象
                        .taskAssignee(assignee)//指定个人任务查询,指定办理人
                        .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("任务的创建时间: " + 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());
            }
        }
    }
    
    /**
     * 完成我的任务
     */
    @Test
    public void completeMyPersonalTask(){
        
        String taskId = "1603";
        //完成任务的同时,使用流程变量,使用流程变量来指定完成任务后,下一个连线,对应sequenceFlow.bpmn文件中${message==‘不重要‘}
        Map<String, Object> variables = new HashMap<String, Object>();
//        variables.put("message", "不重要");
        variables.put("message", "重要");//信息重要与不重要会选择两条不同的分支来运行,即对应的流程不一样
        processEngine.getTaskService()//与正在执行的任务管理相关的Sercice
                        .complete(taskId, variables);
        System.out.println("任务完成: 任务Id: " + taskId);
    }
}

 

四、数据库表的查询顺序

#部署对象和流程定义相关的表
#select * from act_re_deployment        #部署对象表

#select * from act_re_procdef        #流程定义表

#select * from act_ge_bytearray        #资源文件表

#select * from act_ge_property        #主键生成策略表
################################################## #部署实例,执行对象,任务 #
select * from act_ru_execution #正在执行的执行对象表 #select * from act_hi_procinst #流程实例的历史表 #select * from act_ru_task #正在执行的任务表(只有节点是UserTask的时候,该表中存在数据) #select * from act_hi_taskinst #任务历史表(只有节点是UserTask的时候,该表中存在数据) #select * from act_hi_actinst #所有活动节点的历史表 ################################################### #流程变量 #select * from act_ru_variable #正在执行的流程变量表 #select * from act_hi_varinst #历史的流程变量表

 

五、总结

1.一个活动中可以指定一个或多个SequenceFlow(Start中有一个,End中没有)
*开始活动中有一个SequenceFlow
*结束活动中没有SequenceFlow
*其他活动中有1条或多条SequenceFlow

2.如果只有一个,则可以不使用流程变量设置codition的名称

技术分享图片


如果有多个,则需要使用流程变量设置codition的名称,message表示流程变量的名称,
‘不重要’表示流程变量的值,${}中间的内容使用boolean类型的表达式,用来判断应该执行的连线

技术分享图片

 

3.如果将流程图放置在和Java类相同的路径,则需配置

技术分享图片

activiti--6-------------------------------------连线(一般数据库表的查询顺序)

标签:个人   let   list   执行   ini   resource   分享图片   ==   bytearray   

原文地址:http://www.cnblogs.com/sutao/p/8026800.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!