1、什么是工作流?
工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。
工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完成。
2、工作流主要解决的主要问题是:
为了实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。
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
5、在Eclipse中添加工作流的插件
在help-->install new softWare-->work with中直接搜索activiti然后选择安装即可,然后新建项目new-->other-->Activiti-->activiti project,要画工作流流程图new-->other-->Activiti-->activiti Diagram
6、入门程序
配置文件(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());
}
}
}
}