Activiti工作流(一)之基本操作介绍

工作流的概念:

       工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。通俗的说,流程就是多个人在一起合作完成某件事情的步骤,把步骤变成计算机能理解的形式就是工作流。

常见的工作流引擎有:OSWorkFlow、jbpm、activiti(对jbpm的升级)

 

如果在一个项目中我们需要引入工作流的话,首先需要引入相关jar包,然后获得一个工作流引擎,而获得这个工作流引擎的方式有三种:

       1、通过代码方式获得:

Java代码  
  1.        @Test  
  2. public void getProcessEngine1(){  
  3.     ProcessEngineConfiguration engineConfiguratoin = ProcessEngineConfiguration  
  4.             .createStandaloneProcessEngineConfiguration();  
  5.       
  6.     engineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");  
  7.     engineConfiguration  
  8.     .setJdbcUrl("jdbc:mysql://10.10.10.30:3306/activitiDB?createDatabaseIfNotExist=true"  
  9.             + "&useUnicode=true&characterEncoding=utf8");  
  10.     engineConfiguration.setJdbcUsername("root");  
  11.     engineConfiguration.setJdbcPassword("aaaaaaaaa");  
  12.       
  13.     engineConfiguration.setDatabaseSchemaUpdate("true");  
  14.     ProcessEngine buildProcessEngine = engineConfiguration.buildProcessEngine();  
  15. }  

       2、通过加载指定的xml文件获取:

 

Xml代码  
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  5. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd  
  6. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">  
  7.   
  8. <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">  
  9.     <property name="jdbcDriver" value="com.mysql.jdbc.Driver">property>  
  10.     <property name="jdbcUrl" value="jdbc:mysql://10.10.10.30:3306/activitiDB?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8">property>  
  11.     <property name="jdbcUsername" value="root">property>  
  12.     <property name="jdbcPassword" value="aaaaaaaa">property>  
  13.       
  14.     <property name="databaseSchemaUpdate" value="true">property>  
  15. bean>  
  16.   
  17. beans>  

 

Java代码  
  1.       @Test  
  2. ublic void getProcessEngine2(){  
  3. ProcessEngineConfiguration engineConfiguration =   
  4.         ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");  
  5.   
  6. ProcessEngine processEngine = engineConfiguration.buildProcessEngine();  

        3、通过加载默认的xml文件获取,默认xml文件名称为activiti.cfg.xml

 

 

Java代码  
  1.       @Test  
  2. ublic void getProcessengine3(){  
  3. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();  

 当获得了工作流引擎之后,会创建一个数据库,数据库中有默认的23张表

Java代码  
  1. 资源库流程规则表  
  2. 1)  act_re_deployment   部署信息表  
  3. 2)  act_re_model        流程设计模型部署表  
  4. 3)  act_re_procdef      流程定义数据表  
  5. 运行时数据库表  
  6. 1)  act_ru_execution    运行时流程执行实例表  
  7. 2)  act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息  
  8. 3)  act_ru_task     运行时任务节点表  
  9. 4)  act_ru_variable     运行时流程变量数据表  
  10. 历史数据库表  
  11. 1)  act_hi_actinst      历史节点表  
  12. 2)  act_hi_attachment   历史附件表  
  13. 3)  act_hi_comment      历史意见表  
  14. 4)  act_hi_identitylink 历史流程人员表  
  15. 5)  act_hi_detail       历史详情表,提供历史变量的查询  
  16. 6)  act_hi_procinst     历史流程实例表  
  17. 7)  act_hi_taskinst     历史任务实例表  
  18. 8)  act_hi_varinst      历史变量表  
  19. 组织机构表  
  20. 1)  act_id_group        用户组信息表  
  21. 2)  act_id_info     用户扩展信息表  
  22. 3)  act_id_membership   用户与用户组对应信息表  
  23. 4)  act_id_user     用户信息表  
  24. 这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足   
  25. 通用数据表  
  26. 1)  act_ge_bytearray    二进制数据表  
  27. 2)  act_ge_property     属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录  
  28. 还有两张表不怎么常用  
  29. 1)      act_ru_event_subscr  
  30. 2)      act_ru_job  

 伦理片 http://www.dotdy.com/  

 接下来就是activiti的核心API部分

 
Activiti工作流(一)之基本操作介绍_第1张图片
 这些service可以由ProcessEngine获得,且这些service都有着各自的任务

RepositoryService 管理流程定义
RuntimeService 执行管理,包括启动、推进、删除流程实例等操作
TaskService 任务管理
HistoryService 历史管理(执行完的数据的管理)
IdentityService 组织机构管理
FormService 一个可选服务,任务表单管理
ManagerService  

接下来是完成一个工作流程的基本操作步骤,首先我们需要安装Activiti插件,然后我们构建一个流程实例并部署上去

 
Activiti工作流(一)之基本操作介绍_第2张图片
 

Java代码  
  1.       @Test  
  2. ublic void deploy(){  
  3. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();  
  4.   
  5. RepositoryService service = processEngine.getRepositoryService();  
  6. Deployment deploy = service.createDeployment()  
  7. .addClasspathResource("diagrams/LeaveProcess.bpmn")  
  8. .addClasspathResource("diagrams/LeaveProcess.png")  
  9. .name("请假流程")  
  10. .deploy();  

 部署流程还有一种方法也可以:加载压缩文件(zip格式)

Java代码  
  1.       @Test  
  2. ublic void deployProcess2(){  
  3.   
  4. InputStream in = getClass().getClassLoader().getResourceAsStream("Leave.zip");  
  5.   
  6. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();  
  7. Deployment deploy = processEngine.getRepositoryService()  
  8.         .createDeployment()  
  9.         .name("请假流程")  
  10.         .addZipInputStream(new ZipInputStream(in))  
  11.         .deploy();  

 
Activiti工作流(一)之基本操作介绍_第3张图片
 
Activiti工作流(一)之基本操作介绍_第4张图片
 接下来就是启动流程

Java代码  
  1.        @Test  
  2. public void test(){  
  3.     String instanceKey = "myProcess";  
  4.       
  5.     ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();  
  6.     RuntimeService service = processEngine.getRuntimeService();  
  7.     ProcessInstance instance = service.startProcessInstanceByKey(instanceKey);  
  8. }  

 

 
Activiti工作流(一)之基本操作介绍_第5张图片
 在流程启动的过程中,我们可以查询流程的进度

Java代码  
  1.        @Test  
  2. public void query(){  
  3.     String assignee = "Meixi";  
  4.       
  5.     ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();  
  6.     TaskService service = processEngine.getTaskService();  
  7.     TaskQuery taskQuery = service.createTaskQuery();  
  8.     List list = taskQuery.taskAssignee(assignee).list();  
  9.       
  10.     for (Task task : list){  
  11.         System.out.println(task);  
  12.     }  
  13. }  

 接下来就是完成每一个流程

Java代码  
  1. @Test  
  2.     public void complete(){  
  3.         String taskID = "104";  
  4.           
  5.         ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();  
  6.         TaskService service = processEngine.getTaskService();  
  7.         service.complete(taskID);  
  8.     }  

 
Activiti工作流(一)之基本操作介绍_第6张图片
 

你可能感兴趣的:(activiti)