zoukankan      html  css  js  c++  java
  • 工作流Activity框架入门(一)

    Activity工作流入门

    1. 工作流概念

    工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。

     

    工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流逻辑进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。

     

    2. Activiti简介

    Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。

    Activiti框架底层有数据库提供支持,根据版本不同,表的数量不一致,activiti5.13有23张表。底层使用mybatis操作数据库,开发人员不需要自己编写sql

    Jbpm4.4底层也有数据库支持,18张表。 底层使用hibernate操作数据库。

     

    Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。

    1) ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。

    2) ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。

    3) ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。

    4) ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。

    5) ACT_GE_*: 通用数据, 用于不同场景下。


    3. 安装插件(流程设计器插件)

    第一步:解压zip文件到eclipse中的dropins目录中


    第二步:重启eclipse,勾选save选项


    第三步:使用插件设计流程图


    4.手动创建数据库表

    Activity自带建表脚本,选择手动建表的话,只需要选取对应数据库的脚本即可,里面包含的Create、upgrade和drop相关脚本(upgrade脚本是用于工作流版本升级时候用的),当然Activity也支持自动建表,可以参考下面的DEMO,但是不建议自动建表,本案例用的是mysql,所以我选取的是mysql的脚本




    创建后应该可以看到有23张表,本教程使用的是Activity5.13

    5.自定义流程

    右击工程->NEW->Other->Activity->Activity Diagram,新建一个工作流模板

    然后就可以开始拖拉控件设计流程了,设计好的流程,只要通过发布操作,就可以自动在数据库插入相应数据,可参考下面demo,以下是一个简单的流程:

    6.入门Demo

    package activity.demo.test;
    
    import java.util.List;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngineConfiguration;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.impl.juel.ExpressionFactoryImpl.Profile;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.repository.DeploymentBuilder;
    import org.activiti.engine.repository.ProcessDefinition;
    import org.activiti.engine.repository.ProcessDefinitionQuery;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.activiti.engine.task.TaskQuery;
    import org.junit.Test;
    import org.junit.validator.PublicClassValidator;
    
    
    public class HelloWorld {
    	// 使用框架的自动建表功能(不提供配置文件)
    	@Test
    	public void testCreateTablesAutomaticallyWithoutConfigFiles() {
    		// 创建流程引擎配置对象
    		ProcessEngineConfiguration config = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
    		// 设置jdbc连接参数信息
    		config.setJdbcDriver("com.mysql.jdbc.Driver");
    		config.setJdbcUrl("jdbc:mysql:///eam-mirror");
    		config.setJdbcUsername("root");
    		config.setJdbcPassword("root");
    		// 设置自动建表
    		config.setDatabaseSchemaUpdate("true");
    		// 使用配置对象创建流程引擎对象,创建对象过程中会自动建表
    		ProcessEngine processEngine = config.buildProcessEngine();
    	}
    
    	// 使用框架的自动建表功能(提供配置文件)
    	@Test
    	public void testCreateTablesAutomaticallyWithConfigFiles() {
    		ProcessEngineConfiguration config = ProcessEngineConfiguration
    				.createProcessEngineConfigurationFromResource("activiti-context.xml", "processEngineConfiguration");
    		ProcessEngine pe = config.buildProcessEngine();
    	}
    
    	// 使用框架的自动建表功能(提供配置文件---使用默认配置)
    	@Test
    	public void testCreateTablesAutomatically() {
    		ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();
    	}
    
    	ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();
    
    	// 将设计的流程图部署到数据库中
    	@Test
    	public void testDeploy() {
    		// 创建部署构建器对象,用于加载流程定义文件(UserInfoAudit.bpmn,UserInfoAudit.myProcess.png),部署流程定义
    		DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
    		deploymentBuilder.addClasspathResource("UserInfoAudit.bpmn");
    		Deployment deployment = deploymentBuilder.deploy();
    		System.out.println(deployment.getId());
    	}
    
    	// 查询流程定义
    	@Test
    	public void testQueryProcessDefinition() {
    		// 流程定义查询对象,用于查询流程定义表----act_re_procdef
    		ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
    		// 添加过滤条件,取最新版本
    		query.latestVersion();
    		// query.processDefinitionId(processDefinitionId)
    		// query.processDefinitionKey(processDefinitionKey);
    		// 添加排序条件
    		query.orderByProcessDefinitionVersion().desc();
    
    		// 添加分页条件
    		// query.listPage(firstResult, maxResults);
    
    		// 查询所有流程
    		List<ProcessDefinition> processDefinitionList = query.list();
    		for (ProcessDefinition pd : processDefinitionList) {
    			System.out.println(pd.getId());
    		}
    
    	}
    	// 根据流程定义启动流程实例----操作的数据表:act_ru_execution act_ru_task
    	@Test
    	public void testStartProcess(){
    		String processDefinitionId = "UserAuditProcess:2:504";
    		//根据流程实例ID去启动流程
    		ProcessInstance pInstance = pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
    		System.out.println(pInstance.getId());
    	}
    	
    	//查询任务列表
    	@Test
    	public void testQueryTaskList(){
    		//创建任务查询对象,查询表act_ru_task
    		TaskQuery query = pe.getTaskService().createTaskQuery();
    		String assignee ="张三";
    		//添加过滤条件
    		query.taskAssignee(assignee);
    		//排序
    		query.orderByTaskCreateTime().desc();
    		List<Task> taskList = query.list();
    		for(Task task : taskList){
    			System.out.println("taskId:"+task.getId()+",taskName:"+task.getName());
    		}
    	}
    	//办理任务
    	//办理个人任务,操作的表是act_ru_execution,act_ru_task
    	@Test
    	public void testExecuteTask(){
    		String taskId= "604";
    		pe.getTaskService().complete(taskId);
    	}
    	
    }
    


    7.Activity框架学习指南





  • 相关阅读:
    &&和||解析
    SQL-union union all
    sql杂记
    JAVA杂记
    sql之left join、right join、inner join的区别
    蓝鲸邮箱配置
    快速部署社区版(详解)
    蓝鲸平台安装环境准备
    蓝鲸脚本集合
    zabbix3.4 install
  • 原文地址:https://www.cnblogs.com/evan-liang/p/9189593.html
Copyright © 2011-2022 走看看