Activiti入门----第一张流程图

因为最近进了一家oa公司,所以不会activti岂不是很尴尬,就看网络资料自己学习了一下activiti

Activiti官网地址:https://www.activiti.org/

首先activiti的运行环境是数据库+activiti提供的jar包,想要拿到这些文件就必须去官网下载对应版本的压缩包

不同版本的插件包需要不同的jdk支持,activiti5.0可以支持到1.6以上,当然,版本越高就会又更多的新功能,这里我下的是5.0.

第一步:把下载的插件包解压,然后导入对应的数据库文件,数据库创建文件放在固定目录下

Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。




表结构操作: 
3.3.1:资源库流程规则表 
1) act_re_deployment 部署信息表 
2) act_re_model 流程设计模型部署表 
3) act_re_procdef 流程定义数据表 
3.3.2:运行时数据库表 
1) act_ru_execution 运行时流程执行实例表 
2) act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息 
3) act_ru_task 运行时任务节点表 
4) act_ru_variable 运行时流程变量数据表 
3.3.3:历史数据库表 
1) act_hi_actinst 历史节点表 
2) act_hi_attachment 历史附件表 
3) act_ih_comment 历史意见表 
4) act_hi_identitylink 历史流程人员表 
5) act_hi_detail 历史详情表,提供历史变量的查询 
6) act_hi_procinst 历史流程实例表 
7) act_hi_taskinst 历史任务实例表 
8) act_hi_varinst 历史变量表 
3.3.4:组织机构表 
1) act_id_group 用户组信息表 
2) act_id_info 用户扩展信息表 
3) act_id_membership 用户与用户组对应信息表 
4) act_id_user 用户信息表 

第二步:安装eclipse(开发工具)的activti图形创建工具插件,自己百度,安装完以后,eclipse是这样的

第三部,创建一个工程,添加数据源配置,这里贴上代码

 <!-- 配置一个流程引擎配置对象 -->
    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <!-- 数据源 -->
        <property name="jdbcDriver" value="oracle.jdbc.driver.OracleDriver"></property>
        <property name="jdbcUrl" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"></property>
        <property name="jdbcUsername" value="activiti_test"></property>
        <property name="jdbcPassword" value="1"></property>
        <!-- 是否自动创建表 -->
        <property name="databaseSchemaUpdate" value="true"></property>
    </bean>

    <!-- 配置一个流程引擎工厂bean,用于创建流程引擎对象 -->
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <property name="processEngineConfiguration" ref="processEngineConfiguration"></property>
    </bean>

第四步:在java文件中启动activiti,并让其自动创建所需数据库表格

	// 获得一个流程引擎配置对象
      ProcessEngineConfiguration conf = ProcessEngineConfiguration
              .createProcessEngineConfigurationFromResource(
                      "activiti/activiti.cfg.xml", "processEngineConfiguration");
      // 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
      ProcessEngine processEngine = conf.buildProcessEngine();

第五步:创建一张流程图,

每个长方形的图形均为一个流程环节,流程环节可以指定固定的审核人,指定方式为

图中使用的为占位符,在创建流程可以以参数的方式传递,达到动态的效果,同样可以指定一个组的用户,方式为在图中第三行写上组的名称,这样一个族内的所有用户都可以查看操作该流程信息

图中的箭头可以起到分支判断的作用,同样判断条件也可以用占位符的方式传递参数,那么参数是怎么传递的呢?

有两种情况,一种是流程启动时流程环节中的审核人,可以在启动流程时传递:

private ProcessEngine processEngine = null;
	
	@Before
	public void befor() {
		// 获得一个流程引擎配置对象
      ProcessEngineConfiguration conf = ProcessEngineConfiguration
              .createProcessEngineConfigurationFromResource(
                      "activiti/activiti.cfg.xml", "processEngineConfiguration");
      // 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
      processEngine = conf.buildProcessEngine();
	}

/**
     * 启动一个流程实例
     * 涉及的表:
     * act_ru_execution(流程实例表), 管理流程进度
     * act_ru_task(任务表), 进行到哪一个流程的哪一个任务, 该由谁完成
     */
    @Test
    public void test() throws Exception{
    	// 获得一个流程引擎配置对象
        ProcessEngineConfiguration conf = ProcessEngineConfiguration
                .createProcessEngineConfigurationFromResource(
                        "activiti/activiti.cfg.xml", "processEngineConfiguration");
        // 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
        ProcessEngine processEngine = conf.buildProcessEngine();
        
        //String processDefinitionKey = "myProcess";
        //方式一:根据流程定义id启动流程实例
        //String processDefinitionId = "qjlc:6:904";
        //ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId);
        
        //方式二:根据流程定义Key启动流程实例   推荐!流程定义有多个版本时会选择最新版本
        //ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
        
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("employeeId", "www"); //请假人
        String processId = processEngine.getRuntimeService().startProcessInstanceByKey("myProcess", variables).getId();
        System.out.println("启动一个请假人为wdq的流程,id="+processId);
    }     

其中employeeid为占位符名称,第二种情况就是流程提交时传递箭头分支判断的参数:

private ProcessEngine processEngine = null;
	
	@Before
	public void befor() {
		// 获得一个流程引擎配置对象
      ProcessEngineConfiguration conf = ProcessEngineConfiguration
              .createProcessEngineConfigurationFromResource(
                      "activiti/activiti.cfg.xml", "processEngineConfiguration");
      // 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
      processEngine = conf.buildProcessEngine();
	}

/**完成任务*/
	@Test
	public void completeTask(){
		//任务ID
		String taskId = "42501";
		//完成任务的同时,设置流程变量,让流程变量判断连线该如何执行
		/**
		 * variables为传递的参数,格式为hahmap
		 */
		Map<String, Object> variables = new HashMap<String, Object>();
		variables.put("day", 8);
		variables.put("flag", true);   //true为通过  false为不通过
		processEngine.getTaskService()//
						.complete(taskId,variables);
		System.out.println("完成任务:"+taskId);
	}

同样,map中的key为占位符名称

最后一步:部署一个流程图

private ProcessEngine processEngine = null;
	
	@Before
	public void befor() {
		// 获得一个流程引擎配置对象
      ProcessEngineConfiguration conf = ProcessEngineConfiguration
              .createProcessEngineConfigurationFromResource(
                      "activiti/activiti.cfg.xml", "processEngineConfiguration");
      // 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
      processEngine = conf.buildProcessEngine();
	}

 /**
     * 部署一个流程
     */
    @Test
    public void deploy() {
    	
    	Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service  
                .createDeployment()//创建部署对象  
                .name("测试流程2")//声明流程的名称  
                .addClasspathResource("activiti/MyProcess.bpmn")//加载资源文件,一次只能加载一个文件  
                .addClasspathResource("activiti/MyProcess.png")//  
                .deploy();//完成部署  
		System.out.println("部署ID:"+deployment.getId());//1  
		System.out.println("部署名称:"+deployment.getName());  
    }

部署完以后就可以用相应的代码启动审核运转一个流程啦,提供一下根据用户名称来查询待办任务的代码:

private ProcessEngine processEngine = null;
	
	@Before
	public void befor() {
		// 获得一个流程引擎配置对象
      ProcessEngineConfiguration conf = ProcessEngineConfiguration
              .createProcessEngineConfigurationFromResource(
                      "activiti/activiti.cfg.xml", "processEngineConfiguration");
      // 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
      processEngine = conf.buildProcessEngine();
	}
 //查询待办任务(根据处理人姓名)
    @Test
    public void queryTask(){
    	// 获得一个流程引擎配置对象
        ProcessEngineConfiguration conf = ProcessEngineConfiguration
                .createProcessEngineConfigurationFromResource(
                        "activiti/activiti.cfg.xml", "processEngineConfiguration");
        // 使用配置对象创建一个流程引擎对象,并且在创建过程中可以自动建表
        ProcessEngine processEngine = conf.buildProcessEngine();
        //任务的办理人
        String assignee="www";
        //取得任务服务
        TaskService taskService = processEngine.getTaskService();
        //创建一个任务查询对象
        TaskQuery taskQuery = taskService.createTaskQuery();
        //办理人的任务列表
        List<Task> list = taskQuery.taskAssignee(assignee).list();
        //遍历任务列表
        if(list!=null&&list.size()>0){
            for(Task task:list){
                System.out.println("任务的办理人:"+task.getAssignee());
                System.out.println("任务的名称:"+task.getName());
                Map<String, Object> variables = new HashMap<String, Object>();
        		variables.put("flag", false);
        		processEngine.getTaskService()//
        						.complete(task.getId(),variables);
        		System.out.println("完成任务:"+task.getId());
            }
        }
    }

继续学习啦

猜你喜欢

转载自blog.csdn.net/W_DongQiang/article/details/81199070