1、什么是工作流?

       工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。

  工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完成。

2、工作流主要解决的主要问题是:

  为了实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。



工作流:



①指定流程:在指定流程的过程中,会经历很多版本。



②流程正式启动



③启动流程实例



④申请



⑤审批



⑥流程结束



注:虽然利用数据库也可以控制业务流程,但是设计的表通用性不强,根据业务可能需要经常性的进行变更。



学习JBPM重点在于:①流程定义文档XML②JBPM API③数据库的结构(重点)



3.activiti中表介绍

  activiti自带的表一共有23个。

  ACT_GE_*:GE是general,通用的。

  ACT_HI_*:HI是history,历史表,一个流程实例跑完就会插入历史表。

  ACT_ID_*:ID是identity,与id相关的表。

  ACT_RE_*:RE是repository,存储的是一些静态资源,如流程的资源。

  ACT_RU_*:RU是run,存储的是一些运行时的信息。

4.activiti中的Service

  

activiti工作引擎集成java应用_System

 

5、在Eclipse中添加工作流的插件

      在help-->install new softWare-->work with中直接搜索activiti然后选择安装即可,然后新建项目new-->other-->Activiti-->activiti project,要画工作流流程图new-->other-->Activiti-->activiti Diagram

 

6、入门程序

activiti工作引擎集成java应用_开发工具_02

activiti工作引擎集成java应用_开发工具_03

配置文件(aciviti.cfg.xml):

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <bean id="processEngineConfiguration"
 class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
 <!-- 设置数据库连接 -->
 <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
 <property name="jdbcUrl"
 value="jdbc:mysql://localhost:3306/activiti"/>
 <property name="jdbcUsername" value="root" />
 <property name="jdbcPassword" value="123" />
 <!-- 设置创建表的方式 -->
 <property name="databaseSchemaUpdate" value="true" />
 </bean>
</beans>代码实现:
package itheima.process1;
import java.util.List;
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 HelloWord {
 // 获得工作流引擎对象
 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /* 部署流程定义 */
 @Test
 public void deloymentProcessDefinition() {
 Deployment deploy = processEngine.getRepositoryService()// 与流程定义相关的service
 .createDeployment()// 创建部署对象
 .name("helloWord入门程序")// 添加部署名称
 .addClasspathResource("diagrams/helloWord.bpmn")// 从classPath的资源中加载,一次只能加载一个文件
 .addClasspathResource("diagrams/helloWord.png").deploy();// 完成部署
 System.out.println("部署id:" + deploy.getId());
 System.out.println("部署名称:" + deploy.getName());
 } /* 启动流程实例 */
 @Test
 public void startProcessInstance() {
 // 流程定义的key
 String processDefinitionKey = "helloWord";
 ProcessInstance processInstance = processEngine.getRuntimeService()// 与正在执行的流程实例和流程对象有关的service
 .startProcessInstanceByKey(processDefinitionKey);
 // 使用流程定义的key启动流程实例,key与helloWord.bpmn中的id值相同
 System.out.println("流程实例id:" + processInstance.getId());
 System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());
 } /* 查询当前人的个人任务 */
 @Test
 public void findMyPersonalTask() {
 String assignee = "张三";
 List<Task> list = processEngine.getTaskService()// 获取与正在执行任务的service
 .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());
 }
 }
 }
}