`
445822357
  • 浏览: 731096 次
文章分类
社区版块
存档分类
最新评论

JBPM之流程定义管理,流程执行管理

 
阅读更多
JBPM之流程定义管理,流程执行管理
其实,我们学习JBPM框架的时候,只要弄懂了什么是JBPM的流程定义,流程执行的管理,那么我们在OA做流转审批的时候,就直接可以来用JBPM了,只需要通过Spring来整合一下就行了。那么下面来说一下吧。
1.什么是JBPM?
jBPM(JBoss Business Process Management业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。JBPM具有很强的灵活性,他可以应用的桌面程序,也可以应用的Web服务,而且提供了一种图形化的业务分析建模工具,并可以将这些业务模型部署的数据库中,任务实例的执行也可以被持久化。
2.JBPM可以来做什么?
业务流程UML图形化,定义控制流程跳转,分派任务定时,执行任务,事件处理等等
3. JBPM入门:
在了解JBPM的时候,我们首先要明白一个概念,那就是什么是流程图? 一个流程图是由节点(Node)和转换(Transition)组成的。一个流程就是一个有向图,流程图有多种表示方式:XML,Java,数据库中的记录。那么有哪些节点呢? 比如start节点(流程的入口),end节点(流程的结束),state节点(状态节点),我用下面很好的一张图来说明一下,大家看着图就很清楚了。
一个流程图
像流程图这个,一般都是给用户看的,而让电脑识别的是xml文件,eclipse中安装JBPM插件后,我们画上流程图结构示意图之后,相应的xml文件会自动生成,这个我们不用自己写。
下面就说说,有了xml文件(也就是表示了让服务器识别xml文件)之后,我们就在java代码中如何定义一个流程,如何对流程定义进行管理,这里我贴出代码来。
/**
 * 管理流程(流程定义)
 * @author tyg
 *
 */
public class ProcessDefinitionManage {

	// private ProcessEngine processEngine = new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
	private ProcessEngine processEngine = Configuration.getProcessEngine(); // 获取单例的ProcessEngine对象,使用的是默认的配置文件(jbpm.cfg.xml)

	// 1,部署流程定义(添加)
	@Test
	public void deploy_1() {
		String deploymentId = processEngine.getRepositoryService()//
				.createDeployment()//
				.addResourceFromClasspath("helloworld/test.jpdl.xml")//
				.addResourceFromClasspath("helloworld/test.png")//
				.deploy();
		System.out.println("deploymentId = " + deploymentId);
	}

	// 一次添加多个资源(zip)
	@Test
	public void deploy_2() {
		// 找到zip文件
		InputStream in = this.getClass().getClassLoader().getResourceAsStream("helloworld/helloworld.zip");
		ZipInputStream zipInputStream = new ZipInputStream(in);

		// 部署
		String deploymentId = processEngine.getRepositoryService()//
				.createDeployment()//
				.addResourcesFromZipInputStream(zipInputStream)//
				.deploy();
		System.out.println("deploymentId = " + deploymentId);
	}

	// 2,查询所有流程定义
	@Test
	public void findAll() {
		// 查询
		List<ProcessDefinition> list = processEngine.getRepositoryService()//
				.createProcessDefinitionQuery()//
				.orderAsc(ProcessDefinitionQuery.PROPERTY_KEY)//
				.list();

		// 显示
		for (ProcessDefinition pd : list) {
			System.out.println("id=" + pd.getId()// 格式为:{key}-{version}
					+ ", name=" + pd.getName()// 流程定义文件(.jpdl.xml)中根元素的name属性的值
					+ ", key=" + pd.getKey()// 流程定义文件(.jpdl.xml)中根元素的key属性的值,可以不写,不写就是name属性的值
					+ ", version=" + pd.getVersion()// 流程定义文件(.jpdl.xml)中根元素的version属性的值,可以不写,不写就会自增(key相同时,版本加1)
					+ ", deploymentId=" + pd.getDeploymentId()); // 本流程定义对应的 .jpdl.xml 文件所属的Deployment对象的id
		}
	}

	// 查询所有最新版本的流程定义
	@Test
	public void findAllLatestVersions() {
		// 1,查询所有流程定义,按Version升序排列,这样所有最大的版本就都排到最后了
		List<ProcessDefinition> allList = processEngine.getRepositoryService()//
				.createProcessDefinitionQuery()//
				.orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION)//
				// .processDefinitionName("test")//
				// .orderAsc(ProcessDefinitionQuery.PROPERTY_KEY)//
				// .orderDesc(ProcessDefinitionQuery.PROPERTY_KEY)//
				// .uniqueResult()
				// .count()
				// .page(firstResult, maxResults)
				.list();

		// 2,过滤出所需的最新版本的流程定义
		Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>();
		for (ProcessDefinition pd : allList) {
			map.put(pd.getKey(), pd);
		}

		// 显示
		for (ProcessDefinition pd : map.values()) {
			System.out.println("id=" + pd.getId()// 格式为:{key}-{version}
					+ ", name=" + pd.getName()// 流程定义文件(.jpdl.xml)中根元素的name属性的值
					+ ", key=" + pd.getKey()// 流程定义文件(.jpdl.xml)中根元素的key属性的值,可以不写,不写就是name属性的值
					+ ", version=" + pd.getVersion()// 流程定义文件(.jpdl.xml)中根元素的version属性的值,可以不写,不写就会自增(key相同时,版本加1)
					+ ", deploymentId=" + pd.getDeploymentId()); // 本流程定义对应的 .jpdl.xml 文件所属的Deployment对象的id
		}
	}

	// 3,删除流程定义(其实是删除Deployment)
	@Test
	public void deleteById() {
		String deploymentId = "1";
		// // 删除某Deployment,如果有关联的执行信息,就抛异常
		// processEngine.getRepositoryService().deleteDeployment(deploymentId);
		// 删除某Deployment,如果有关联的执行信息,就级联删除
		processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId);
	}

	// 删除指定key的所有版本的流程定义
	@Test
	public void deleteByKey() {
		// 1,查询出指定key的所有版本的流程定义
		List<ProcessDefinition> list = processEngine.getRepositoryService()//
				.createProcessDefinitionQuery()//
				.processDefinitionKey("helloworld")//
				.list();

		// 2,循环删除
		for (ProcessDefinition pd : list) {
			processEngine.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId());
		}
	}


当我们部署流程定义文件后,剩下的就是流程的执行,任务的完成,只要弄对流程执行的管理之后,相信大家就能够对JBPM就有所认识了。
/**
 * 执行流程(流程实例)
 * @author tyg
 *
 */
public class ProcessInstanceExecute {

	private ProcessEngine processEngine = Configuration.getProcessEngine();

	// 启动流程实例
	@Test
	public void startProcessInstance() {
		// 使用指定key的最新版本的流程定义启动流程实例
		ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("test");

		System.out.println("id=" + pi.getId()//
				+ ", state=" + pi.getState()//
				+ ", processDefinitionId=" + pi.getProcessDefinitionId());
	}

	// 查询我的未办理完的任务列表
	@Test
	public void findMyTaskList() {
		// String userId = "员工";
		// String userId = "部门经理";
		String userId = "总经理";

		// 查询我所有未办理的任务的列表
		// List<Task> list = processEngine.getTaskService().findPersonalTasks(userId);
		// 分页的查询
		List<Task> list = processEngine.getTaskService()//
				.createTaskQuery()//
				.assignee(userId)//
				.list();

		// 显示
		System.out.println("【未办理的任务列表如下】");
		for (Task t : list) {
			System.out.println("id=" + t.getId()//
					+ ", name=" + t.getName()// 任务的名称
					+ ", assignee=" + t.getAssignee()// 任务的办理人
					+ ", createTime=" + t.getCreateTime()// 任务的创建时间
					+ ", executionId=" + t.getExecutionId()); // 所属的执行对象的id
		}
	}

	// 办理任务
	@Test
	public void completeTask() {
		String taskId = "120001";
		processEngine.getTaskService().completeTask(taskId);
	}
}
上面代码有不懂的,可以跟我留言......
分享到:
评论

相关推荐

    jBPM4.3用户指南

    持久执行模式是指流程定义、 流程执行以及流程历史都保存在关系数据库中, 这是jBPM实际通常使用的方式。 这个用户指南介绍了jBPM中支持的使用方式。 开发指南介绍了更多的、高级的、定制的、 没有被支持的选项。

    jbpm的实现流程图.doc

    一、流程定义的基本概念: 二、流程执行的基本概念: 三、流程引擎核心调度过程 ----------------------- jbpm的实现流程图全文共3页,当前为第1页。 jbpm的实现流程图全文共3页,当前为第2页。 ࠀ࠘ࠚࠜࣾऀंऄआ...

    JBPM5 用户指南

    5.1.3使用流程API定义流程 24 5.2 不同流程构造的细节概述 25 5.3 流程属性的细节 26 5.4 事件细节 26 5.4.1 开始事件 26 5.4.2 结束事件 27 5.4.3 中间事件 28 5.5 动作细节 29 5.5.1 脚本任务 29 5.5.3 服务任务 ...

    JBPM5权威指南

    5.1.3使用流程API定义流程 24 5.2 不同流程构造的细节概述 25 5.3 流程属性的细节 26 5.4 事件细节 26 5.4.1 开始事件 26 5.4.2 结束事件 27 5.4.3 中间事件 28 5.5 动作细节 29 5.5.1 脚本任务 29 5.5.3 服务任务 ...

    jbpm安装及使用方法

    一个process instance(流程实例)即一个process definition(流程定义)的流程执行实例。一个process definition可以对应多个process instance。当一个process instance被创建的时候,一个主执行路径token同时被...

    jbpm4.4学习笔记

    6 管理流程定义 18 6.1设计流程定义文档 18 6.1.1图片 18 6.1.2jpdl.xml文件 18 6.2部署流程定义 19 6.3删除流程定义 20 6.4查询流程定义 21 6.5获取流程定义文档的资源 22 7 执行流程实例 22 7.1启动流程实例 22 ...

    JBPM工作流开发指南

    3.3.1 process-definition(流程定义) 12 3.3.2 node(自动节点) 13 3.3.3 start-state(开始状态) 13 3.3.4 end-state(结束节点) 14 3.3.5 state(状态) 14 3.3.6 task-node (任务节点) 15 3.3.7 fork(分支) 16 3.3.8 ...

    JBPM4工作流应用开始指南.rar

    71 5.7 任务服务API 72 5.8 历史服务API 75 5.9 管理服务API 76 5.10 查询服务API 77 5.11 例程:利用jBPM Service API完成流程实例 78 5.12 小结 80 第6章 掌握jBPM流程定义语言 81 6.1 process(流程) 82 6.2 ...

    jBPM-jPDL学习笔记

    jBPM(JBoss Business Process Management业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。  jPDL是构建于jBPM框架上的流程语言之一。在jPDL...

    JBPM4.4学习相关代码

    JBPM工作流的使用: 业务流程定义管理 启动流程时,默认启动最新版本流程 业务流程执行管理 流程定义语言 (预定义活动节点)

    jBPM5 用户指南-中文

    5.1.3使用流程API定义流程 30 5.2 不同流程构造的细节概述 31 5.3 流程属性的细节 32 5.4 事件细节 32 5.4.1 开始事件 32 5.4.2 结束事件 33 5.4.3 中间事件 34 5.5 动作细节 35 5.5.1 脚本任务 35 5.5.3 服务任务 ...

    jbpm开发步骤

    然后在db目录下执行ant create.jbpm.schema 可以看到 MySQL 客户端中执行“ mysql.create.sql ”脚本,这样 将在 jbpmdb 库中创建一个个的数据表。 --------------------------------------------------------------...

    JBPM4.4用户手册.doc

    5.1. 流程定义,流程实例和执行 5.2. ProcessEngine流程引擎 5.3. Deploying a process部署流程 5.4. 删除流程定义 5.5. 启动一个新的流程实例 5.5.1. 最新的流程实例 5.5.2. 指定流程版本 5.5.3. 使用key 5.5.4. ...

    揭秘jbpm流程引擎内核设计思想及构架

     4引擎内核所关注的四个主要问题 4.1模型与定义对象 4.2调度机制与算法 4.3执行机制与状态 4.4实例对象与执行环境 5jbpm,“精简”的开源流程引擎 6jBpm流程模型与定义对象 6.1首先解决如何形式化描述一个...

    JBPM学习笔记—框架设计简介

    jBPM(JBossBusinessProcessManagement业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jPDL是构建于jBPM框架上的流程语言之一。在jPDL中提供了...

    jBPM 4.4用户手册

    持久执行模式是指流程定义、 流程执行以及流程历史都保存在关系数据库中, 这是jBPM实际通常使用的方式。 这个用户指南介绍了jBPM中支持的使用方式。 开发指南介绍了更多的、高级的、定制的、 没有被支持的选项。

    JBPM工作流学习资料

    通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。依托工作流管理系统WFMS(Workflow Management System),利用计算机网络,整合企业内部各种资源...

Global site tag (gtag.js) - Google Analytics