工作流笔记第一天_简单介绍activiti

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

  

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());
}
}
}
}

原文地址:https://www.cnblogs.com/smile-nn/p/7376004.html