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

[java]  view plain  copy
  1. package activity.demo.test;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.activiti.engine.ProcessEngine;  
  6. import org.activiti.engine.ProcessEngineConfiguration;  
  7. import org.activiti.engine.ProcessEngines;  
  8. import org.activiti.engine.impl.juel.ExpressionFactoryImpl.Profile;  
  9. import org.activiti.engine.repository.Deployment;  
  10. import org.activiti.engine.repository.DeploymentBuilder;  
  11. import org.activiti.engine.repository.ProcessDefinition;  
  12. import org.activiti.engine.repository.ProcessDefinitionQuery;  
  13. import org.activiti.engine.runtime.ProcessInstance;  
  14. import org.activiti.engine.task.Task;  
  15. import org.activiti.engine.task.TaskQuery;  
  16. import org.junit.Test;  
  17. import org.junit.validator.PublicClassValidator;  
  18.   
  19.   
  20. public class HelloWorld {  
  21.     // 使用框架的自动建表功能(不提供配置文件)  
  22.     @Test  
  23.     public void testCreateTablesAutomaticallyWithoutConfigFiles() {  
  24.         // 创建流程引擎配置对象  
  25.         ProcessEngineConfiguration config = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();  
  26.         // 设置jdbc连接参数信息  
  27.         config.setJdbcDriver("com.mysql.jdbc.Driver");  
  28.         config.setJdbcUrl("jdbc:mysql:///eam-mirror");  
  29.         config.setJdbcUsername("root");  
  30.         config.setJdbcPassword("root");  
  31.         // 设置自动建表  
  32.         config.setDatabaseSchemaUpdate("true");  
  33.         // 使用配置对象创建流程引擎对象,创建对象过程中会自动建表  
  34.         ProcessEngine processEngine = config.buildProcessEngine();  
  35.     }  
  36.   
  37.     // 使用框架的自动建表功能(提供配置文件)  
  38.     @Test  
  39.     public void testCreateTablesAutomaticallyWithConfigFiles() {  
  40.         ProcessEngineConfiguration config = ProcessEngineConfiguration  
  41.                 .createProcessEngineConfigurationFromResource("activiti-context.xml""processEngineConfiguration");  
  42.         ProcessEngine pe = config.buildProcessEngine();  
  43.     }  
  44.   
  45.     // 使用框架的自动建表功能(提供配置文件---使用默认配置)  
  46.     @Test  
  47.     public void testCreateTablesAutomatically() {  
  48.         ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();  
  49.     }  
  50.   
  51.     ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();  
  52.   
  53.     // 将设计的流程图部署到数据库中  
  54.     @Test  
  55.     public void testDeploy() {  
  56.         // 创建部署构建器对象,用于加载流程定义文件(UserInfoAudit.bpmn,UserInfoAudit.myProcess.png),部署流程定义  
  57.         DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();  
  58.         deploymentBuilder.addClasspathResource("UserInfoAudit.bpmn");  
  59.         Deployment deployment = deploymentBuilder.deploy();  
  60.         System.out.println(deployment.getId());  
  61.     }  
  62.   
  63.     // 查询流程定义  
  64.     @Test  
  65.     public void testQueryProcessDefinition() {  
  66.         // 流程定义查询对象,用于查询流程定义表----act_re_procdef  
  67.         ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();  
  68.         // 添加过滤条件,取最新版本  
  69.         query.latestVersion();  
  70.         // query.processDefinitionId(processDefinitionId)  
  71.         // query.processDefinitionKey(processDefinitionKey);  
  72.         // 添加排序条件  
  73.         query.orderByProcessDefinitionVersion().desc();  
  74.   
  75.         // 添加分页条件  
  76.         // query.listPage(firstResult, maxResults);  
  77.   
  78.         // 查询所有流程  
  79.         List<ProcessDefinition> processDefinitionList = query.list();  
  80.         for (ProcessDefinition pd : processDefinitionList) {  
  81.             System.out.println(pd.getId());  
  82.         }  
  83.   
  84.     }  
  85.     // 根据流程定义启动流程实例----操作的数据表:act_ru_execution act_ru_task  
  86.     @Test  
  87.     public void testStartProcess(){  
  88.         String processDefinitionId = "UserAuditProcess:2:504";  
  89.         //根据流程实例ID去启动流程  
  90.         ProcessInstance pInstance = pe.getRuntimeService().startProcessInstanceById(processDefinitionId);  
  91.         System.out.println(pInstance.getId());  
  92.     }  
  93.       
  94.     //查询任务列表  
  95.     @Test  
  96.     public void testQueryTaskList(){  
  97.         //创建任务查询对象,查询表act_ru_task  
  98.         TaskQuery query = pe.getTaskService().createTaskQuery();  
  99.         String assignee ="张三";  
  100.         //添加过滤条件  
  101.         query.taskAssignee(assignee);  
  102.         //排序  
  103.         query.orderByTaskCreateTime().desc();  
  104.         List<Task> taskList = query.list();  
  105.         for(Task task : taskList){  
  106.             System.out.println("taskId:"+task.getId()+",taskName:"+task.getName());  
  107.         }  
  108.     }  
  109.     //办理任务  
  110.     //办理个人任务,操作的表是act_ru_execution,act_ru_task  
  111.     @Test  
  112.     public void testExecuteTask(){  
  113.         String taskId= "604";  
  114.         pe.getTaskService().complete(taskId);  
  115.     }  
  116.       
  117. }  


7.Activity框架学习指南


  • 46
    点赞
  • 217
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值