activiti基础操作

package activitiTest;

import java.io.InputStream;
import java.util.List;
import java.util.zip.ZipInputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;

/**
 * activiti基础操作
 */
public class ActTest_jichucaozuo {
	// ProcessEngines.getDefaultProcessEngine()会在第一次调用时
	// 初始化并创建一个流程引擎,以后再调用就会返回相同的流程引擎。
	// 使用对应的方法可以创建和关闭所有流程引擎:ProcessEngines.init() 和
	// ProcessEngines.destroy()。
	private ProcessEngine processEngine = ProcessEngines
			.getDefaultProcessEngine();

	/**
	 * 简单非空判断
	 *
	 * @author:tuzongxun
	 * @Title: isEmpty
	 * @param @return
	 * @return boolean
	 * @date Feb 29, 2016 12:55:15 PM
	 * @throws
	 */
	public boolean isEmpty(Object object) {
		if (object instanceof List) {
			List list = (List) object;
			if (list != null && list.size() > 0) {
				return false;
			} else {
				return true;
			}

		} else {
			if (object != null) {
				return false;
			} else {
				return true;
			}
		}
	}

	/**
	 * 部署流程定义(发布流程)
	 *
	 * @author:tuzongxun
	 * @Title: actDeployement
	 * @param
	 * @return void
	 * @date Feb 29, 2016 12:23:48 PM
	 * @throws
	 */
	public void actDeployement() {
		// 使用zip文件形式部署流程定义
		InputStream inputStream = this.getClass().getClassLoader()
				.getResourceAsStream("actTest1.zip");
		ZipInputStream zipInputStream = new ZipInputStream(inputStream);
		processEngine.getRepositoryService().createDeployment()
				.name("activiti测试").addZipInputStream(zipInputStream).deploy();
	}

	/**
	 * 删除流程定义
	 *
	 * @author:tuzongxun
	 * @Title: deleteDeployement
	 * @param
	 * @return void
	 * @date Feb 29, 2016 12:36:15 PM
	 * @throws
	 */
	public void deleteDeployement() {
		List<Deployment> lists = processEngine.getRepositoryService()
				.createDeploymentQuery().list();
		if (!isEmpty(lists)) {
			for (Deployment deployment : lists) {
				processEngine.getRepositoryService().deleteDeployment(
						deployment.getId());
			}
		}

	}

	/**
	 * 启动流程实例
	 *
	 * @author:tuzongxun
	 * @Title: startProcessInstance
	 * @param
	 * @return void
	 * @date Feb 29, 2016 12:30:06 PM
	 * @throws
	 */
	public void startProcessInstance() {
		// 这里根据流程定义的key启动,也可以根据id,还可以在启动的时候加入流程变量,
		// 启动流程实例后会获得一个任务task,这里是在流程图中已经写死了任务所有者是张三,因此启动的时候会创建一个任务给张三
		String processDefinitionKey = "myProcess";
		processEngine.getRuntimeService().startProcessInstanceByKey(
				processDefinitionKey);
	}

	/**
	 * 查询当前活动的流程实例
	 *
	 * @author:tuzongxun
	 * @Title: findCurrentProInstance
	 * @param
	 * @return void
	 * @date Feb 29, 2016 12:53:04 PM
	 * @throws
	 */
	public void findCurrentProInstance() {
		List<ProcessInstance> lists = processEngine.getRuntimeService()
				.createProcessInstanceQuery().list();
		if (!isEmpty(lists)) {
			for (ProcessInstance processInstance : lists) {
				System.out.println(processInstance.getId());
			}
		}
	}

	/**
	 * 查询个人任务及相关信息
	 *
	 * @author:tuzongxun
	 * @Title: findMyTask
	 * @param
	 * @return void
	 * @date Feb 29, 2016 12:50:05 PM
	 * @throws
	 */
	public void findMyTask() {
		// String userName = "张三";
		String userName = "李四";
		List<Task> lists = processEngine.getTaskService().createTaskQuery()
				.taskAssignee(userName).list();
		if (!isEmpty(lists)) {
			for (Task task : lists) {
				System.out.println(task.getId() + "," + task.getName() + ","
						+ task.getAssignee() + "," + task.getCreateTime());
			}
		}
	}

	/**
	 * 完成个人任务
	 *
	 * @author:tuzongxun
	 * @Title: endMyTask
	 * @param
	 * @return void
	 * @date Feb 29, 2016 1:17:21 PM
	 * @throws
	 */
	public void endMyTask() {
		String taskId = "5002";
		processEngine.getTaskService().complete(taskId);
	}

	/**
	 * 查询历史流程实例
	 *
	 * @author:tuzongxun
	 * @Title: findHisProInstance
	 * @param
	 * @return void
	 * @date Feb 29, 2016 2:09:14 PM
	 * @throws
	 */
	public void findHisProInstance() {
		List<HistoricProcessInstance> lists = processEngine.getHistoryService()
				.createHistoricProcessInstanceQuery().list();
		if (!isEmpty(lists)) {
			for (HistoricProcessInstance hisPro : lists) {
				System.out.println(hisPro.getId() + "," + hisPro.getStartTime()
						+ "," + hisPro.getEndTime());
			}
		}
	}

	/**
	 * 查询历史任务列表
	 *
	 * @author:tuzongxun
	 * @Title: findHisTask
	 * @param
	 * @return void
	 * @date Feb 29, 2016 2:13:05 PM
	 * @throws
	 */
	public void findHisTask() {
		List<HistoricTaskInstance> lists = processEngine.getHistoryService()
				.createHistoricTaskInstanceQuery().list();
		if (!isEmpty(lists)) {
			for (HistoricTaskInstance hisTask : lists) {
				System.out.println(hisTask.getId() + ","
						+ hisTask.getAssignee() + "," + hisTask.getName() + ","
						+ hisTask.getStartTime() + "," + hisTask.getEndTime());
			}
		}
	}
}
时间: 2024-09-23 23:58:40

activiti基础操作的相关文章

Python open()函数文件打开、读、写基础操作

说明:         python的文件读写和打开操作都有自己特定的函数和方法,操作起来很简单.下面就来简单的了解下python文件的文件基本操作方法有哪些. 一.Python open()函数文件打开操作     打开文件会用到open函数,标准的python打开文件语法如下: 1 open(name[,mode[,buffering]])     open函数的文件名是必须的,而模式和缓冲参数都是可选的.比如说有个a.txt的文本文件,存放在c:\text下,那么你要打开它可以这样操作:

推荐csdn里的几篇activiti基础入门及提高的博客

昨天有个网友加qq询问我有没有非maven搭建的activiti项目的demo,因为我博客中写了一个用maven,我当时没有,于是晚上回家尝试了一下,结果比较容易就实现了. 之后和那个网友聊了一下,他说自己没有任何activiti的基础,从0开始学.于是我便想到了几篇非常适合入门的activiti的博客,也在csdn中,并且我还转载了最开始的一篇. 博主的那一系列博文完全是从零开始,首先就是环境搭建以及eclip安装相关插件等,我个人觉得非常的适合完全没有activiti基础的人入门,因为当初我

MySQL 视图的基础操作(五)_Mysql

1.为什么使用视图:      为了提高复杂SQL语句的复用性和表操作的安全性(例如:工资字段不想展示给所有能查看该查询结果的人),MySQL提供了视图特性.所谓视图,本质上是一种虚拟表,其内容与真实的表相似,包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储数据值的形式存在.行和列的数据来自定义视图的查询所引用基本表,并且在具体使用视图时动态生成.  视图有如下特点;       1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系.       2. 视图是由基本表

[Android] SQLite数据库之增删改查基础操作

    在编程中经常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,能够支持Windows/Linux/Unix等主流操作系统,同时能够跟很多程序语言如C#.PHP.Java等相结合.下面先回顾SQL的基本语句,再讲述Android的基本操作. 一. adb shell回顾SQL语句     首先,我感觉自己整个大学印象最深的几门课就包括<数据库>,所以想先回顾SQL增删改查的基本语句.而在Androi

arcgis基础操作疑问,求大神解答

问题描述 arcgis基础操作疑问,求大神解答 arcgis在影像配准后,设置数据框属性是为什么? 定义投影的目的是什么?

mysql表的基础操作汇总(三)_Mysql

针对mysql表进行的基础操作,具体内容如下 1.创建表: 创建表的语法形式: CREATE TABLE table_name( 属性名 数据类型, 属性名 数据类型, ... 属性名 数据类型 ) 示例: CREATE TABLE t_dept( deptno int, dname varchar(20), loc varchar(20) 备注:在创建表之前,通常你需要使用 USE 库名:这样一条语句来选择一个库,在所选择的库中创建表.对于表名标识符,不能是mysql的关键字,如 CREATE

mysql 索引的基础操作汇总(四)_Mysql

1.为什么使用索引:      数据库对象中的索引其实和书的目录类似,主要是为了提高从表中检索数据的速度.由于数据存储在数据库表中,所以索引是创建在数据库表对象上,由表中的一个字段或者多个字段生成的键组成,这些键存储在数据结构(B-树或者哈希表)中,通过MySQL可以快速有效查找与键相关联的字段.根据索引的存储类型,可以将索引分为B型树索引(BTREE)和哈希索引(HASH).注意:InnoDB和MyISAM存储引擎支持BTREE类型索引,MEMORY存储引擎支持HASH类型的索引,默认为前者索

MySQL 触发器的基础操作(六)_Mysql

1.为什么使用触发器:      在MySQL数据库中,数据库对象表是存储和操作数据的逻辑结构,而数据库对象触发器则用来实现由一些表事件触发的某个操作.在数据库系统中,当执行表事件时,则会激活触发器,从而执行器包含的操作.触发器的操作包含创建.查看.删除.      触发器是数据库对象之一,该对象与编程语言 中的函数非常类似,都需要声明.执行等.但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发.激活从而实现执行.例如:在学生表中有学生名字.学生总数字段,每当添加一条学生记录时,

很全面的Mysql数据库、数据库表、数据基础操作笔记(含代码)_Mysql

 Mysql数据库.数据库表.数据基础操作笔记分享给大家,供大家参考,具体内容如下 一.数据库操作 1.创建数据库 Create database db name[数据库选项]; tip:语句要求使用语句结束符";"来结束服务. 标识符(数据库名)命名规则: 大小写取决于当前操作系统. 见名知意,推荐使用下划线法. 标识符的字符: 使用任意字符,数字,甚至中文.但是一些特殊的组合,例如纯数字组合,特殊符号等需使用标识符限定符来包裹. 限定符:反引号`` 中文可以:但要求客户端编码 在m