`

Jbpm实践项目

    博客分类:
  • jbpm
阅读更多

1.processdefinition.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="qingjia">
	<task>
		<controller>
			<variable name="flag"></variable>
		</controller>
	</task>

	<start-state name="申请">
		<task name="getInformation">
			<controller>
				<variable name="name"></variable>
				<variable name="beginTime"></variable>
				<variable name="duringTime"></variable>
			</controller>
		</task>
		<transition name="to_pingshen" to="评审">
			<action name="getReason"
				class="com.qingjia.action.GetReasonAction">
				<reason>get ill</reason>
			</action>
		</transition>
	</start-state>
	<task-node name="评审">
		<task name="getResult">
			<controller>
				<variable name="result"></variable>
			</controller>
		</task>
		<transition to="end" name="to_end">
			<action name="printlnReasult"
				class="com.qingjia.action.PrintlnReasultAction">
			</action>
		</transition>
	</task-node>

	<end-state name="end"></end-state>
</process-definition>

 

2.processdefinition.jpg



 

3.GetReasonAction.java

package com.qingjia.action;

import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;

public class GetReasonAction implements ActionHandler {
	private static final long serialVersionUID = 1L;
	private String reason;

	public String getReason() {
		return reason;
	}

	public void setReason(String reason) {
		this.reason = reason;
	}

	public void execute(ExecutionContext executionContext) throws Exception {
		executionContext.getContextInstance().setVariable("resaon", reason);
		// 将前台输入的"name"属性值传进来
		String name = (String) executionContext.getContextInstance()
				.getVariable("name");
		// 设置全局变量
		executionContext.getContextInstance().setVariable("flag", "shengqing");
		System.out.println(name);
		System.out.println(reason);
		System.out.println((String) executionContext.getContextInstance()
				.getVariable("flag"));

	}

}

 

PrintlnReasultAction.java

package com.qingjia.action;

import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;

public class PrintlnReasultAction implements ActionHandler {
	private static final long serialVersionUID = 1L;

	public void execute(ExecutionContext executionContext) throws Exception {
		Object result = executionContext.getContextInstance().getVariable(
				"result");
		if (result.equals("Yes")) {
			System.out.println("This holiday is agreed!");
		} else {
			System.out.println("This holiday is disagreed!");
		}
		executionContext.getContextInstance().setVariable("flag", "pingshen");
		System.out.println((String) executionContext.getContextInstance()
				.getVariable("flag"));
	}

}

 

 QianTai.java

package com.qingjia.action;

import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.context.exe.ContextInstance;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;

public class QianTai {
	private JbpmConfiguration config;
	private JbpmContext context;
	private ProcessDefinition processDefinition;

	/**
	 * 初始化ProcessDefinition
	 */

	public QianTai() {
		config = JbpmConfiguration.getInstance();
		context = config.createJbpmContext();
		processDefinition = context.getGraphSession()
				.findLatestProcessDefinition("qingjia");
	}

	/**
	 * 创建流程,进行请假申请
	 * 
	 * @return 流程ID
	 */

	long shenqing() {
		ProcessInstance processInstance = processDefinition
				.createProcessInstance();
		ContextInstance contextInstance = processInstance.getContextInstance();
		// 填写请假单,与jbpm引擎交互
		contextInstance.setVariable("name", "xiaoming");
		contextInstance.setVariable("beginTime", "080426");
		contextInstance.setVariable("duringTime", "5");
		long ID = processInstance.getId();
		return ID;
	}

	/**
	 * 得到流程的令牌"token"
	 */
	Token executeProcess(long ID) {
		ProcessInstance processInstance = context.loadProcessInstance(ID);
		Token token = processInstance.getRootToken();
		return token;
	}

	/**
	 * 填写审批意见
	 */
	void pingshen(long ID) {
		ProcessInstance processInstance = context.loadProcessInstance(ID);
		ContextInstance contextInstance = processInstance.getContextInstance();
		// 输入评审意见
		contextInstance.setVariable("result", "NO");
	}
	
	/**
	 * 流程执行总过程
	 */
	public static void  main(String[] args){
		//前台实例调用各个方法
		QianTai qianTai = new QianTai();
		long id=qianTai.shenqing();
		Token token=qianTai.executeProcess(id);
		
		//执行"to_pingshen" 中的action
		token.signal("to_pingshen");
		System.out.println((String)token.getProcessInstance().getContextInstance().getVariable("flag"));
		
		//进行请假评审
		qianTai.pingshen(id);
		
		//执行"to_end" 中的action
		token.signal("to_end");
		System.out.println((String)token.getProcessInstance().getContextInstance().getVariable("flag"));
		System.out.println("Process"+id+" id end!");
	}
}

 

 说明:(1)使流程一步一步执行,利用的是Single(),而调用这个方法有2种方式:

  ProcessInstance.single();

  由ProcessInstance先得到Token(即流程执行的“令牌”),再调用该Token.Single();

  (2)得到节点的方式有(但是无法得到该节点的Variable):

  Token.getNode():得到当前节点;

  ProcessDefinition.getNode(“”):利用节点名得到任意节点;

  (3) Variable的设计原则及Variable的获得方法:

  要在节点间传递的Variable设计为全局的==》在<ProceseeDefinition>中加入<task><controller><variable>;

   要在节点内与Transition间传递的Variable要放在节点中==》在相应节点中加入<task><controller><variable>;

  ==》获得总流程中的Variable:ProcessInstance.getContextInstance()

  Token. getContextInstance()                                       

  

  得到Variable就要通过ContextInstance.get/setVariable()

  ==》获得Action中的Variable:ExecutionContext.getContextInstance()

    在Action中也可以定义Variable,<名字是任意的>;

  (4)在“ProjectName/src/main”下建类其实质是在“ProjectName/src/main/java”下建,

 

  • 大小: 16.7 KB
分享到:
评论

相关推荐

    jbpm入门实践

    **jbpm入门实践** jbpm 是一款开源的工作流管理系统,主要用于设计、执行和管理业务流程。本文主要针对jbpm 5.2版本进行入门实践,适合初级用户学习。首先,我们要进行必要的安装与配置。 **一、jbpm的准备工作** ...

    jbpm4.4 工程项目实例

    【jbpm4.4 工程项目实例】是一个...通过深入学习和实践这个“jbpm4.4 工程项目实例”,开发者不仅可以掌握jbpm的基本用法,还能了解到如何将工作流管理技术融入到实际的Web应用中,提升企业级应用的流程自动化能力。

    jbpm项目实练

    【jbpm项目实练】是针对企业流程管理(Business Process Management, BPM)工具jbpm的一次实际操作练习,尤其适合初学者入门。jbpm是一个开源的BPM平台,它提供了全面的工作流和业务流程管理功能,包括流程设计、...

    jbpm 项目实践 1.2 (集成appfuse spring modules)

    自己的apache maven 仓库放了3个jar 文件. 博文链接:https://chenjin.iteye.com/blog/153407

    jbpmOA项目代码经典

    【jbpmOA项目代码经典】是一个关于jbpm流程引擎与OA(Office Automation)系统整合的实践案例,结合了zTree框架的应用。jbpm是Java Business Process Management的缩写,是一款开源的工作流管理系统,用于实现业务流程...

    jbpm4.4项目测试源码下载,

    **jbpm4.4项目测试源码解析** jbpm4.4是一款基于Java的企业级工作流管理系统,由JBoss公司开发。它提供了强大的业务流程管理(BPM)和工作流服务,帮助企业构建灵活且可扩展的流程应用。本源码下载主要针对jbpm4.4...

    一个简单的Jbpm4项目源码

    这个简单的JBPM4项目源码提供了一个完整的web工程,旨在帮助开发者理解并实践如何在实际开发中应用JBPM4。 **一、JBPM4核心概念** 1. **流程定义(Process Definition)**: 在JBPM4中,业务流程以BPMN2(Business ...

    ssh+jbpm项目(某集团OA)

    SSH (Struts2 + Spring + Hibernate) 是一个广泛使用的Java Web开发框架,它结合了Struts的MVC...对于开发者来说,具备良好的面向对象设计能力和实践经验,以及一定的业务分析能力,能够更好地理解和实施这样的项目。

    jbpm4.4项目

    【jbpm4.4项目】是一个基于JBPM4.4版本的工作流管理系统示例,它为初学者提供了深入了解和实践企业级工作流管理系统的入口。JBPM(Java Business Process Management)是一个开源的工作流和业务流程管理系统,它允许...

    jbpm jbpm3 jbpm4 用户和开发指南+教程+最佳实践全套

    "JBPM最佳实践.txt"则可能包含了一系列在实际项目中运用jbpm时的最佳实践建议,如性能优化、流程设计原则、错误处理策略等,旨在帮助开发者避免常见问题,提升项目的质量和效率。 通过这些文档,学习者可以全面了解...

    jbpm4jbpm5

    jbpm应用开发指面(胡奇).pdf可能是胡奇专家对jbpm应用开发的实践经验分享,可能包含了最佳实践、常见问题解决方案和案例研究。开发者可以从中学到如何在实际项目中有效地运用jbpm,以及如何解决开发过程中遇到的...

    JBPM5.4 SSH 完整项目整合案例

    这个JBPM5.4与SSH的完整项目案例,旨在帮助开发者理解如何在实际项目中结合使用这些技术,实现高效、可维护的业务流程管理。通过学习和实践这个案例,你可以提升自己在企业级应用开发方面的能力。

    jbpm4web请假例子,eclipse项目,下卷。

    总之,【jbpm4web请假例子】是一个实用的学习资源,它让开发者能够在实践中掌握JBPM4工作流管理系统和Eclipse开发环境的结合使用,从而提升在企业级应用开发中的流程自动化能力。通过深入研究和实践,可以进一步理解...

    jbpm4.4 shh2 项目示例

    jbpm4.4 shh2 项目示例是基于jbpm4.4版本与SSH2(Struts2、Spring和Hibernate)集成的一个实战项目。...该项目提供了一个学习和实践业务流程自动化管理的平台,有助于开发者深入理解jbpm和SSH2的集成应用。

    jbpm

    在描述中提到的博客链接指向了iteye上的一篇关于jbpm的博文,虽然具体内容无法直接展示,但可以推测博主可能分享了如何将jbpm与Struts2框架整合的实践经验和技巧。Struts2是一个流行的Java Web应用程序框架,它提供...

Global site tag (gtag.js) - Google Analytics