`
dou_shini8820
  • 浏览: 81018 次
社区版块
存档分类
最新评论

jbpm开发步骤-流程实例

    博客分类:
  • JBPM
 
阅读更多

流程实例processInstance:

 

 

private ProcessEngine engine;
	private RepositoryService repositoryService;
	private ExecutionService executionService;
	private String deploymentId;
	
	 public ProcessInstanceTest() {
		engine = Configuration.getProcessEngine();
		repositoryService = engine.getRepositoryService();
		executionService = engine.getExecutionService();
	}
	
	/**
	 * 测试流程实例
	 */
	public void testProcessInstance(){
		deploymentId = repositoryService.createDeployment().addResourceFromClasspath("hello.jpdl.xml").deploy();
		List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
		ProcessInstance processInstance = executionService.startProcessInstanceByKey("hello");
		System.out.println(processInstance);
	}

 

 

流程实例的操作都是executtionService来执行的,比如开始一个调用的是startProcessInstanceByKey("hello");

 

由于我们jpdl文件中的是state节点,所以当我们start一个Instance后,它流转到了state节点,此时流程实例处于等待状态,我们可以用

 

processInstance.isEnded()

 来判断,否则就要手动触发向下流转:

 

processInstance = executionService.signalExecutionById(processInstance.getId());

此时才isEnded才为true,除非直接结束他:

 

executionService.endProcessInstance(processInstance.getId(), "删除需要理由吗?");

 或者直接删除一个流程实例:

 

executionService.deleteProcessInstanceCascade(processInstance.getId());

  同样查询流程实例列表用:

 

List<ProcessInstance> list2 = executionService.createProcessInstanceQuery().list();
 

 

 

 

 

二、活动介绍

1、控制流程的活动(让活动在不同节点状态不一样)

 

start state  end Decision fork join sub-process task

 

start开始节点,一个jpdl文件里至少应该有个start节点。start里必须有transition,当我们调用

startProcessInstanceByKey("leave")就会触发他流向到transition指定的节点

 

state状态节点,当流程实例运行到state节点时不会自动向下执行,除非有外部的触发signalExecution(executionId,"to 经理")。

 

 

我们可以在state节点里加一个 监听器,用来判断signal作用在正确的流程实例上

 

 

<state name="经理审批">
	<on event="start" >
		<event-listener="com.luo.listener.StartEventListener"/>
	</on>	
</state>
 

 

 

在StartEventListener我们可以execution.getId(),并且也能为signal提供一个ID向下执行

 

decision 决定节点,里面有若干个transition,他会根据条件判断然后自动向下执行,他有3种设置方式

方法一:

 

<decision name="checkNum">
	<transition name="big" to="tobig">
		<condition expr="#{num > 10}"/>
	</transition>
	<transition name="small" to="toSmall">
		<condition expr="#{num < 10}"/>
	</transition>
</decision>

 

 方法二:首先在jpdl中

 

 

 

<decision name="checkNum" expr="#{content}">
     <transition name="big" to="toBig"/>
     <transition name="small" to="small"/>
</decision>

 

然后在java代码中执行

 

String<String,Object> variables = new HashMap<String,Object>;
variables.put("content",big);
executionService.startProcessInstanceByKey("leave",variables);

 

 

方法三:加一个handler,即实现DecisionHandler接口,重写里面的decide(OpenExecution execution)方法

 

<decision name="checkNum" expr="#{content}">
	<handler class="com.luo.handler.CheckNumHandler"/>	
     <transition name="big" to="toBig"/>
     <transition name="small" to="small"/>
</decision>

 然后在java中

 

 

public class CheckNumHandler implements DecisionHandler{

     public String decide(OpenExecution execution){
              String content = (String)execution.getVariables("content");
               if(content.equals("big")){
                       return "big";
                }
                if(content.equals("small")){
                       return "small";
                }
      }
}

 

fork和join通常一起用:表示分开和合并

 

end 结束节点:

只有当流向到end节点时,才会结束流程实例,其他的并发的流向会放弃任务

可以有多个end,表示不同的结束方式。

 

流向(Executtion)会以不同状态结束,结束的结果可以通过下列方式展示

end 上加一个state属性<end name="ok" state="顺利完成"/>

或者直接用end-cancel或者end-error表示<end-cancel name="cancel"/>

 

 

task任务活动:一个任务可以分配给一个用户,或者一个用户组

类型一:

 

<task name="review" assignee="#{order.owner}">
	<transition to="to big"/>
</task>

 

 assignee属性默认会当作表达式来执行,当然之前会在java中写:

 

Map variables = new HashMap();
variables.put("order",new Order("张三"));//order是我自己的类
executionService.signalExecutionById(psId,variables);

 

 这样这个task只会被分配给张三了,张三在使用

 

taskService.findPersonalTasks("张三");
taskService.getAssignedTasks("张三");

 

 就能获得任务列表了

 

类型二:用户组就涉及到了候选人的问题

 

<task name="review" candidate-groups="sales-dept"/>
	<transition to="to big"/>
</task>

 

 当然之前我们会在java代码中:

identityService.createGroup("sales-dept");
identityService.createUser("张三");
identityservice.createMembership("张三","sales-dept");

identityService.createUser("李四");
identityservice.createMembership("李四","sales-dept");

 这样在流程创建后,任务会出现在 张三 李四的分组任务列表中

taskService.findGroupTasks("张三");
 

候选人必须要有人在处理任务之前接受任务,分组任务列表中,用户接口必须只接受“对这些任务接受” 的操作

这样当某个用户接受了后,这个任务的分配人就是当前用户,而这个任务会从“所有分组候选人”的任务列表上消失,他会出现在 用户的已分配任务列表中。

 

任务分配处理器AssigmentHandler可以编程式的来计算一个任务的分配人和候选人

public interface AssigmentHandler extends Serializable{
	void assign(Assignable assignable,OpenExecution execution);
}

 Assignable是任务和泳道的通用接口。。。。。。。。。。。

assignment-handler是task的子元素,用来指定用户对象

<task name="review">
	<assignment-handler class="com.luo.handler.UserAssignHandler">
		<field name="assignee">
			<String value="张三"/>
		</field>
	</assignment-handler>
</task>
 

 

通常用processInstance.findActiveExecutionIn("state name or desition name or ..")来判断name节点是否是当前节点

 

 

 

 

decision

 

 

2、原子活动(让活动在该节点做一些事)

 

java script sql hql emai

 

 

 

 

分享到:
评论

相关推荐

    jbpm-jpdl-3.2.3.zip

    4. **持久化机制**:jbpm利用Hibernate作为默认的持久化层,确保流程实例和相关数据在数据库中的存储和检索。 5. **事务管理**:jbpm支持JTA(Java Transaction API),能处理复杂的事务需求,确保业务流程的一致性...

    jbpm-gpd-site.zip

    【jbpm-gpd-site.zip】是一个与jbpm(JBoss Business Process Management)相关的压缩文件,...在实际开发中,开发者还需要了解如何配置jbpm服务器,设置数据源,以及如何使用工作流API来启动、监控和管理流程实例。

    eclipse配置jBPM(jbpm-test-6.1.0.Final.jar)

    使用jBPM提供的API,你可以启动流程实例,进行流程操作,并验证流程执行的结果。 7. **运行和调试**: 编译和运行项目,可以使用Eclipse内置的JUnit测试框架或者单独的测试类来启动流程,检查其执行情况。jBPM测试库...

    jbpm-gpd-feature.rar_jbpm gpd feature_jbpm-gpd

    6. **调试功能**:jbpm-gpd提供流程实例的调试工具,包括设置断点、单步执行、查看变量值等功能,便于开发者测试和优化流程。 7. **集成开发环境**:作为Eclipse插件,jbpm-gpd与Eclipse的其他功能无缝集成,如项目...

    工作流jbpm---学习文档+简单实例项目

    通过实践这个例子,开发者能够学会如何创建流程图,配置活动、事件和过渡,以及如何在代码中启动和控制流程实例。 总结来说,这个资源包提供了一套全面的学习路径,从理论知识到实践案例,涵盖了jbpm的核心概念和与...

    jbpm-jpdl-designer-nodeps-3.0.13.zip

    同时,它还支持流程实例的调试,以便更好地理解流程的实际运行情况。此外,由于该版本是“nodeps”(无依赖),意味着它尽可能地减少了与其他库的依赖关系,便于独立部署和使用。 总的来说,jbpm-jpdl-designer-...

    Spring-Jbpm-JSF-Example.pdf

    Jbpm(Java Business Process Model)是一个开源的工作流和业务流程管理(BPM)引擎,允许开发者定义复杂的工作流程并将其集成到应用程序中。它支持BPMN标准,可以处理复杂的流程逻辑,包括条件分支、循环和事件处理。...

    jbpm开发指南-笔记

    ### jBPM开发指南知识点详解 #### 3.3.18 创建定时器 (Create-Timer) 在jBPM中,`create-timer`是一种重要的功能,用于在工作流中设置定时器。通过这种方式,可以定义流程在特定的时间点自动执行某些操作。这在...

    jbpm中文教程-详细

    jbpm通过Hibernate实现对流程实例、任务实例等数据的持久化,简化了数据库交互,提高了性能。 1. 对象关系映射:jbpm使用Hibernate映射业务对象,使得流程中的数据可以方便地存取到数据库。 2. 事务管理:jbpm利用...

    jbpm开发实例详解

    【jbpm开发实例详解】 jbpm是一个开源的工作流管理系统,由JBoss组织开发,遵循LGPL许可证。它提供了丰富的功能,包括对流程的建模、执行和监控。自4.0版本开始,jbpm引入了Process Virtual Machine (PVM)的概念,...

    一个Jbpm员工请假流程的实例(源代码)

    总的来说,这个Jbpm员工请假流程实例通过源代码展示了如何使用Jbpm设计、实现和管理一个实际的业务流程。它涉及了流程建模、服务接口设计、数据库交互和自动化构建等方面,为学习和理解Jbpm提供了一个完整的参考案例...

    jbpm中文文档--英文文档

    2. **安装与配置**:详述如何在开发环境中安装jbpm,包括设置环境变量、导入依赖库和配置数据库连接等步骤。 3. **流程设计**:介绍使用jbpm设计工具(如eclipse插件或Guvnor)来创建、编辑和管理流程模型,包括...

    JBPM4介绍开发步骤简介

    ### JBPM4开发步骤详解与服务接口功能解析 JBPM4是JBPM系列的一个版本,专注于提供一个轻量级的工作流引擎,适用于企业级应用的流程自动化。它以简单直观的方式设计,使得开发者能够轻松地定义、部署和执行业务流程...

    jbpm4web-JBPM4的一个web版本的Demo

    当流程设计完成后,用户可以通过jbpm4web的Web界面启动流程实例。这通常涉及填写必要的输入信息,然后提交以开始流程的执行。系统会自动处理流程实例的创建和分配任务。 3. **任务处理**: 流程实例启动后,任务...

    jbpm4.4-请假流程

    在jbpm4.4版本中,核心功能包括流程定义、流程实例管理、任务分配和监控。该例子展示了如何将这些功能集成到实际的Web应用程序中。你提到的"jbpm4web"可能是一个包含所有必要文件的Web工程,这通常包括源代码、配置...

    JBPM-web开发部署tomcat-实现流程部署

    - "jbpmweb"工程的源码可以帮助我们了解如何集成JBPM到Web应用中,包括如何配置数据源、初始化服务、创建和处理流程实例等。 - 可以借助JBPM提供的工具,如Guvnor(流程模型管理)、Workbench(开发和测试平台)和...

    jbpm的入门2--流程设计器的安装

    部署后,可以通过工作流引擎执行流程实例,观察其运行情况。 7. **源码和构建**: - `build.properties`、`build.xml`以及`META-INF`目录下的文件涉及到项目的构建配置。如果你对jbpm的源码感兴趣,可以查看这些...

    深入浅出JBPM最新源码第七章-报销实例

    最后,监控是BPM系统的重要组成部分,JBPM提供了报表和监控工具,可以帮助你查看流程实例的状态、跟踪流程执行历史、分析性能瓶颈等。你可以通过JMX或Web界面来监控和管理运行中的流程。 通过这个报销实例,读者...

    jbpm学习指南-初学者的宝典

    2. **jbpm安装与配置**:搭建jbpm开发环境,安装jbpm工具集,如jbpm-workbench。 3. **jbpm示例分析**:通过`jbpm-demo`中的示例,了解jbpm如何创建和执行流程,理解任务流转和分支判断。 4. **编写第一个流程**:...

Global site tag (gtag.js) - Google Analytics