jbpm例子说明文档

合集下载

JBPM安装及请假流程实例

JBPM安装及请假流程实例

1、开垦环境拆修之阳早格格创做1)jdk 5大概者更下版本2)收援的数据库有hsqldb、mysql、oracle、postgresql、sybase,本证明以oracle动做数据库.3)GPD插件(jbpm正在IDE中的过程安排器), \install\src\gpd中的,本证明以eclipse3.6为例.1)挨开window preferences2)采用 JBoss jBPM --> jBPM 4 --> Runtime Locations3)面打 Add...4)正在Add Location 对于话框中,输进一个名字,比圆jbpm-4.0而后面打 Search...5)正在Browse For Folder 对于话框中,采用您的jbpm 根目录,而后面打 OK6)面打 OK 正在 Add Location 对于话框中1.3定义jBPM 用户库1)面打窗心 --> 属性(Windows --> Preferences)2)采用Java --> 创修路径--> 用户类库(Java --> Build Path --> User Libraries)3)面打新修(New)4)典型名字jBPM Libraries5)面打增加JARs(Add JARs...)6)找到jBPM 拆置步调下的lib 目录7)采用lib 下的所有jar 文献并面打挨开(Open)8)采用jBPM Libraries 动做出心9)沉新面打增加JARs(Add JARs)10)正在jBPM 的拆置步调的根目录下采用jbpm.jar 文献11)面打挨开(Open)12)正在jbpm.jar 下采用源码附件(Source attachment)动做出心14)正在源码附件的摆设(Source Attachment Configuration)对于话框中,面打目录(External Folder...)15)找到jBPM 拆置步调下的src 目录16)面打采用(Choose)17)面打二次'决定'(Ok)会关关所有对于话框1.4正在目录中增加jPDL4 模式如果您念间接编写XML 源码,最佳是正在您的XML 目录中指定一下模式(schema),那样当您正在编写过程源码的时间,不妨更佳的助闲您编写代码.1)面打窗心 --> 属性(Windows --> Preferences)2)采用XML --> 目录(XML --> CataLog)3)面打增加(Add)4)增加XML 目录(Add XML Catalog Entry)的窗心挨开5)面打map-icon 的图标底下的按钮并采用文献系统(File System)6)正在挨开的对于话框中,采用jBPM 拆置目录下src 文献夹中jpdl.xsd 文献7)面打挨开(Open)而且关关所有的对于话框2、真例教程道解那节咱们将使用修坐一个简朴请假过程名目2.1 修坐名目正在eclipse中新修一个Dynamic Web Project的名目jbpm4leave.2.2 加进jbpm用户库1)邮件面打新修的名目jbpm4leave—>Properties2.3 加进jbpm所需要的摆设文献大家不妨从jbpm-4.4解压后的文献下,正在路径\examples\src中找到以下文献,加进到名目工程的src中其中jbpm.hibernate.cfg.xml是摆设jbpm4.4的hibernate摆设文献,包罗数据源的摆设,战普遍的hibernate.cfg.xml摆设文献好已几.Jbpm.mailkit开头的文献,是用于邮件功能的摆设.2.4 新修简朴的请假过程左键面打src New Other,采用JBoss jBPM下的Jbpm 4 Process Definition,文献名写leave,版本号写4.4即可.3)用过程安排器挨开新修的leave.jpdl.xml.Open With jBPM jPDL4 Editor,,瞅睹如下效验3)安排请假过程正在那个简朴的请假过程中,包罗开初(start)、中断(end)、任务(task)、计划(decision)四种过程元素.过程安排如下:4)仔细安排过程中的各任务节面的流转条件①选中“申请”任务节面,正在properties(属性)中,General标签的Name(属性值)挖为“申请”,Assignment标签的Type采用assignee (介进者,采用那个,不妨指定该任务节面的间接介进者),Expression的属性值挖为#{owner}(即指定那个任务节面的间接介进者便是那个过程的开用者).②选中“经理审批”任务节面,正在properties(属性)中,General 标签的Name(属性值)挖为“经理审批”,Assignment标签的Type 采用candidate-groups(介进者,采用那个,不妨该任务节面有某个用户组去介进),Expression的属性值挖为manager(即指定那个任务节面的有manager那个用户组去完毕).③“老板审批”节面共“经理审批”任务节面树坐类似,不过Expression改为boss④树坐计划节面,选中,正在属性标签General中按如下所示挖Name(节面称呼),Expression(推断表白式,其中day是正在过程流转历程中的一个记录天数的属性,所有表白式的意义是天数大于3天需要老板审批,如果天数没有大于3天,经理审批通过后便间接中断过程,没有需要老板审批).⑤安排佳过程后,面打保存,IDE将自动为您死成一个png的过程图片,切记没有成正在xml源码界里举止保存,可则会死成没有完备的过程图片.⑥正在面打下圆的“Source”属性,即可瞅到过程定义文献的xml 源码一下是leave.jpdl.xml的源码:<?xml version="1.0"encoding="UTF-8"?><process name="leave"xmlns="/4.4/jpdl"><start g="198,15,48,48"name="start1"><transition to="申请"/></start><task assignee="#{owner}"form="request.jsp"g="175,94,92,52"name="申请"><transition to="经理审批"/></task><task candidate-groups="manager"form="manager.jsp"g="176,174,92,52"name="经理审批"><transition g="-32,-8"name="接受"to="exclusive1"/><transition g="120,199;121,122:-42,-18"name="采与"to="申请"/></task><decision expr="#{day > 3 ? '老板审批' : '中断'}"g="196,259,48,48"name="exclusive1"><transition g="-39,-10"name="中断"to="end1"/><transition g="344,283:-71,-17"name="老板审批"to="老板审批"/></decision><task candidate-groups="boss"form="boss.jsp"g="299,305,92,52"name="老板审批"><transition g="342,378:"to="end1"/></task><end g="196,354,48,48"name="end1"/></process>2.5 颁布过程Jbpm的过程颁布本去很简朴,只消使用jbpm已经启拆佳的要领举履止用,即可.咱们新修一个deploy.jsp的页里用户颁布过程.正在此道解使用zip文献挨包颁布过程.1)将之前修坐佳的leave.jpdl.xml战leave.png文献,所有挨包进leave.zip文献.2)deploy.jsp代码如下:<%@page language="java"contentType="text/html; charset=gb2312"%> <%@pageimport="java.io.File,java.io.FileInputStream,java.io.InputStream,java.util.zi p.ZipInputStream,java.util.*,org.jbpm.api.*,java.util.zip.*"%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01Transitional//EN""/TR/html4/loose.dtd"><html><head><title>Insert title here</title></head><body><%request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");String deployFile = request.getParameter("processDef");if (deployFile != null && deployFile != "") {//必须使用的,过程引擎ProcessEngine processEngine = Configuration.getProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService();try {String file = deployFile;//将ZIP文献启转到IO流里InputStream is = new FileInputStream(new File(file)); ZipInputStream zis = new ZipInputStream(is);//将ZIP过程文献颁布到pvm(过程假造机中,他会把ZIP包中的xml文献战png图片保存到数据库中)repositoryService.createDeployment().addResourcesFromZipInputStream(zis).deploy();is.close();out.println("颁布过程乐成<br />");out.println("<a href='task-write.jsp'>返回</a><br />");} catch (Exception e) {e.printStackTrace();out.println("颁布过程波折");}}%><script type="text/javascript">function readFile(obj) {document.getElementById("file").value = obj.value;}</script><font color="red">可间接颁布zip文献</font><br/><form name="form1"method="post"action="deploy.jsp"><label>颁布过程文献<input type="file"name="processDef"onchange="readFile(this)"></label><label><input type="submit"name="Submit"value="提接"></label></form></body></html>3)尝试颁布乐成截止4)查看已颁布乐成的过程已经有的一个查看过程的页里,源码如下:<%@page language="java"contentType="text/html; charset=GB18030" pageEncoding="GB18030"%><%@include file="/head.jsp"%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01Transitional//EN""/TR/html4/loose.dtd"><%String username = (String) session.getAttribute("username");//过程引擎ProcessEngine processEngine = Configuration.getProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService();//过程定义集中List<ProcessDefinition> pdList = repositoryService.createProcessDefinitionQuery().list();<html><head><meta http-equiv="Content-Type"content="text/html; charset=GB18030"> <title>Insert title here</title><style type="text/css">body {font: normal 11px auto "Trebuchet MS", Verdana, Arial, Helvetica,sans-serif;color: #4f6b72;background: #E6EAE9;}a {color: #c75f3e;}#mytable {padding: 0;margin: 0;}caption {padding: 0 0 5px 0;width: 700px;font: italic 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; text-align: right;}th {font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; color: #4f6b72;border-right: 1px solid #C1DAD7;border-bottom: 1px solid #C1DAD7;border-top: 1px solid #C1DAD7;letter-spacing: 2px;text-transform: uppercase;text-align: left;padding: 6px 6px 6px 12px;background: #CAE8EA;}th.nobg {border-top: 0;border-left: 0;border-right: 1px solid #C1DAD7;background: none;}border-right: 1px solid #C1DAD7;border-bottom: 1px solid #C1DAD7;background: #fff;font-size: 11px;padding: 6px 6px 6px 12px;color: #4f6b72;}td.alt {background: #F5FAFA;color: #797268;}th.spec {border-left: 1px solid #C1DAD7;border-top: 0;background: #fff;font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; }th.specalt {border-left: 1px solid #C1DAD7;border-top: 0;background: #f5fafa;font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; color: #797268;}body.td {font-size: 11px;}</style></head><body><TABLE width="100%"id="mytable"id="mytable"><caption>过程定义</caption><thead><tr><th class="spec">过程id</th><th>过程称呼</th><th>版本号</th><th>过程简略</th><th>开用过程</th></tr><tbody><%for (ProcessDefinition pd : pdList) {%><tr><th class="spec"><%=pd.getId()%></th><td class="alt"><%=pd.getName()%></td><td class="alt"><%=pd.getVersion()%></td><td class="alt"><a href="remove.jsp?id=<%=pd.getDeploymentId()%>">简略过程</a></td><td class="alt"><a href="start.jsp?id=<%=pd.getId()%>">开用过程</a></td></tr><%}%></tbody></table></body></html>5)查看过程颁布情况6)过程定义所安排到的表JBPM4_DEPLOYMENTJBPM4_DEPLOYPROP//存搁过程定义的版本号,使用的jbpm版本号,已经过程名JBPM4_JOB//存搁timer的定义JBPM4_LOB //存搁过程定义的xml战png图片文献2.6 开用过程1)开用过程,本去很简朴,需要赢得过程定义的ID,使用jbpm已经启拆佳的过程开用要领便不妨了.<%@page import="java.util.*,org.jbpm.api.*,java.util.*"%><%request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");try{//过程引擎//过程真例服务ExecutionService executionService = processEngine.getExecutionService();Map map = new HashMap();//拔出过程中存搁的数据,那里存搁过程开用者的名字,参数id是过程定义的IDmap.put("owner", session.getAttribute("username")); executionService.startProcessInstanceById(request.getParameter("id"), map);response.sendRedirect("task-personal-list.jsp");}catch(Exception e){e.printStackTrace();}%>2)查看代庖任务//<%@page language="java"contentType="text/html; charset=GB18030" pageEncoding="GB18030"%><%@page import="org.jbpm.api.*,org.jbpm.api.task.*"%><%@include file="/head.jsp"%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01Transitional//EN""/TR/html4/loose.dtd"><%String username = (String) session.getAttribute("username");//过程引擎ProcessEngine processEngine = Configuration.getProcessEngine();//任务引擎TaskService taskService = processEngine.getTaskService();//目前用户代庖的任务集中List<Task> taskList2 = taskService.findPersonalTasks(username);%><html><head><meta http-equiv="Content-Type"content="text/html; charset=GB18030"> <title>Insert title here</title><style type="text/css">body {font: normal 11px auto "Trebuchet MS", Verdana, Arial, Helvetica,sans-serif;color: #4f6b72;a {color: #c75f3e;}#mytable {padding: 0;margin: 0;}caption {padding: 0 0 5px 0;width: 700px;font: italic 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; text-align: right;}th {font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; color: #4f6b72;border-right: 1px solid #C1DAD7;border-bottom: 1px solid #C1DAD7;border-top: 1px solid #C1DAD7;letter-spacing: 2px;text-transform: uppercase;text-align: left;padding: 6px 6px 6px 12px;background: #CAE8EA;}th.nobg {border-top: 0;border-left: 0;border-right: 1px solid #C1DAD7;background: none;}td {border-right: 1px solid #C1DAD7;border-bottom: 1px solid #C1DAD7;background: #fff;font-size: 11px;padding: 6px 6px 6px 12px;color: #4f6b72;}td.alt {background: #F5FAFA;color: #797268;th.spec {border-left: 1px solid #C1DAD7;border-top: 0;background: #fff;font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;}th.specalt {border-left: 1px solid #C1DAD7;border-top: 0;background: #f5fafa;font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; color: #797268;}body.td {font-size: 11px;}</style></head><body><table width="100%"id="mytable"id="mytable"><caption>部分待办任务</caption><thead><tr><th class="spec">过程ID</th><th>目前节面</th><th>查看仔细疑息</th><th>查看过程图</th></tr></thead><tbody><%for (Task task : taskList2) {%><tr><td class="alt"><%=task.getId()%></td><td class="alt"><%=task.getName()%></td><td class="alt"><ahref="<%=task.getFormResourceName()%>?id=<%=task.getId()%>">查看仔细疑息</a></td><td class="alt"><a href="view.jsp?id=<%=task.getExecutionId() %>">查看过程图</a></td></tr><%}%></tbody></table></body></html>3)真止如图://过程列表//过程开用后,成为目前用户的待办任务2.7 过程操持(申请)由于咱们的过程如下,开用开用过程后,过程便加进了“申请”那个过程节面(注:过程开用后,会正在过程第一个节面所有人/所有组的代处世项中找到).所以,目前便要正在申请中举止操持.由于咱们正在定义过程时如下定义了:<task assignee="#{owner}"form="request.jsp"g="175,94,92,52"name="申请"><transition to="经理审批"/></task>定义了,“申请”那个节面是有过程开用者举止操持的,form指定操持“申请”那个节面的处理页里,用户不妨自己定义处理页里.Transition 指定申请过程的下一个出心.1)正在代处世项中,咱们有一止如下代码:<ahref="<%=task.getFormResourceName()%>?id=<%=task.getId()%>">查看仔细疑息</a>正在那里会传一个任务ID,所以正在request.jsp中必须要博得那个任务ID.<%@page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><%request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");%><fieldset><legend>申请</legend><form method="post"onsubmit="return validate()"><input type="hidden"name="taskId"value="${param.id}">申请人:<input type="text"name="owner"value="${sessionScope['username']}"/><br />请假时间:<input type="text"name="day"value=""onchange="change(this)"/><br/>请假本果:<textarea name="reason"></textarea><br/><input type="submit"/></form></fieldset><script type="text/javascript">function change(obj){var reg = /^[1-9]\d*$/;if (!reg.test(obj.value)){alert("天数必须为正整数!");obj.value="";obj.focus();returnfalse;}}function validate(){var obj = document.getElementsByName("day")[0].value;var reg = /^[1-9]\d*$/;if (!reg.test(obj)){alert("天数必须为正整数!");document.getElementsByName("day")[0].value="";document.getElementsByName("day")[0].focus();returnfalse;}else{document.forms[0].action="submit.jsp";document.forms[0].submit();returntrue;}}</script></body></html>前台隐现如下:挖写完真质后,页里将会提接到submit.jsp,将对于提接的数据举止处理,共时过程继承流转,所以正在提接的的页里中要处理二件事务:1、处理用户提接数据,将数据战过程真例举止绑定2、将过程继承流转,提接给下一个节面操持。

jBPM 5 教程:实践指南说明书

jBPM 5 教程:实践指南说明书

About the T utorialOrganizations throughout the world have been searching for a structured approach of designing their actions or transactions which can be transformed by implementing them using automated solutions.jBPM is one such tool that helps business automation needs of an organization. This tutorial provides an overview of how to use jBPM 5 in practice.AudienceThis tutorial is designed for Java professionals who would like to understand the features and capabilities of jBPM in a simple and easily understandable way. PrerequisitesYou are expected to have a basic understanding of business processes and application of technology to automate manual processes.Disclaimer & CopyrightCopyright 2015 by Tutorials Point (I) Pvt. Ltd.All the content and graphics published in this e-book are the property of Tutorials Point (I) Pvt. Ltd. The user of this e-book is prohibited to reuse, retain, copy, distribute, or republish any contents or a part of contents of this e-book in any manner without written consent of the publisher.We strive to update the contents of our website and tutorials as timely and as precisely as possible, however, the contents may contain inaccuracies or errors. Tutorials Point (I) Pvt. Ltd. provides no guarantee regarding the accuracy, timeliness, or completeness of our website or its contents including this tutorial. If you discover any errors on our website or in this tutorial, please notify us at **************************T able of ContentsAbout the Tutorial (i)Audience (i)Prerequisites (i)Disclaimer & Copyright (i)Table of Contents .................................................................................................................................. i i OVERVIEW . (1)What is a Business Process? (1)What is jBPM? (2)Features of JBPM (2)JBPM – ECLIPSE PLUGIN (3)JBPM – HELLO WORLD! (8)JBPM – COMPONENTS (18)The Semantic Module (18)The Process Engine (18)Persistence and Transactions (19)Audit/History Logs (19)JBPM – WORKFLOW COMPONENTS (20)JBPM – DRAW AND VALIDATE A WORKFLOW (23)JBPM – EXAMPLE (32)jBPM 5 3JBPM stands for "Java Business Process Management". It is a JBoss product which is an open source framework. Before moving further, let us first define a business process.What is a Business Process?By definition, a business process is a sequence of tasks that takes place in a repeatable order, executed by humans and/or systems to achieve a business goal. It describes the order (using a flowchart) in which a series of steps needs to be executed. A business process can significantly improve the visibility and agility of a business logic.Let us take an example. The following screenshot depicts a workflow/flowchart that most IT professionals can relate to. It is a common process that is followed in most organizations to appraise the employees based on their performance.A Typical Organizational WorkflowThe process takes place in the following order:1. E mployees self-evaluate themselves and submit the report to their Project Managers.2. Y our performance is then evaluated by the Project Manager and the HR Manager.Based on the evaluation, they give the employees a rating.3. T he final rating or performance feedback is then relayed back to the employees.This process is applicable for almost all the employees and hence, it is a very good example to understand a business process. It is a sequence of tasks and it happens in a particular order.O VERVIEWjBPM 54What is jBPM?Business process is a key concept to understand any organizational framework. A technology like jBPM helps in managing complex business processes in an efficient way. JBPM is a tool that can orchestrate a business process effectively. Generally, every enterprise-level application will have a sequence of tasks which are executed in a specific order and those processes can be orchestrated with the help of jBPM.The beauty of jBPM is that it is similar to a flowchart. It can be easily understood by business analysts as well. jBPM can be embedded in a Java application and run as a service. Features of JBPMjBPM is a lightweight, open source, fully embeddable process engine written in Java. Its most notable features are listed below:∙jBPM executes business processes which are designed using the BPMN 2.0 specifications.∙jBPM can be fully integrated with Eclipse and similar IDEs to provide drag and drop support to create a workflow.∙jBPM has UI tools available to involve business analysts and users right from the design phase.∙jBPM supports persistence and transaction management with the help of JPA and JTA.∙One can define custom work item handlers to create a user-defined task which can be used as a component later on for other workflows.jBPM 5 5The following are the Prerequisites to install jBPM Plugin:∙Java 1.5 (or higher) SE JDK ∙ Eclipse 4.2 or any version and the jBPM pluginAs jBPM is written in Java, we will be covering how to add the desired plugins in this section. Considering maximum Java users use Eclipse, let us see how to add the jBPM plugin in Eclipse. Download the binaries from the following link:/drools/release/5.3.0.Final/Don't be confused on seeing Drools here. The same plugins are used for jBPM. If you already have installed Drools plugin, then you can skip the installation steps.Extract it to your hard disk. Then, launch Eclipse and go to Help Install New Software.J BPM – ECLIPSE PLUGIN6Click Add Repository:Click the Local button and then select ".../binaries/org.drools.updatesite" (where you downloaded on your machine)Select Drools and jBPM and then click the Next button.78Again Click Next and select “I accept the terms of license agreement” and then click Finish. The software installation starts:9Post successful installation, you will get the following dialog box:Click Yes. Eclipse restarts. Now, go to Windows -> Preferences -> Drools -> Drools Flow NodesjBPM 5 If you are able to see the nodes as shown in the above screenshot, it proves that the plugins were successfully installed. Now we are ready to write our first jBPM program.10jBPM 5 11Here in this chapter, we will write our first program "Hello World" using jBPM. Follow the steps given below:Go to File -> New -> Drools Project:Click Next . Give an appropriate name for the first project : "HelloWorld" in our case.J BPM – HELLO WORLD!Click Next. Select the bottom two checkboxes, viz:∙Add a sample HelloWorld process file to this project∙Add a sample class for loading and executing HelloWorld process12Click Next. Click Configure Workspace Settings (marked red in the following screenshot):13Click the Add button:1415End of ebook previewIf you liked what you saw…Buy it from our store @ https://16。

工作流框架jbpm使用说明书

工作流框架jbpm使用说明书

工作流框架JBPM使用说明书(V1.0)长城计算机软件与系统有限公司目录1引言 (2)1.1简介 (2)1.2使用版本 (2)1.3使用环境 (2)2使用说明 (3)2.1建立数据库 (3)2.2建立项目 (6)2.3建立工作流定义 (6)2.4工作流的发布 (8)2.5工作流中定义的类 (9)1引言1.1简介JBoss JBPM是一个灵活、可扩展的流程语言框架。

JPDL是建立在这个通用框架之上的一个流程语言。

它使用直观的流程语言以图形化的方式来表示业务流程,使用术语任务、异步通讯等待状态、定时器、自动操作等。

为了将这些操作绑定在一起,JPDL提供了强有力的、可扩展的流程控制机制。

JBoss jBPM有一个具有最小的依赖性和尽可能简单易用的java库。

当然它也可以用在吞吐量极为关键的J2EE集群应用服务器环境中。

持久层采用Hibernate实现,理论上说,只要Hibernate支持的数据库JBPM都支持。

1.2使用版本本例中使用的是JBPM-3.2-GA版本,需要JDK 1.4.2及以上版本,下载地址为:/jbossjbpm/jbpm_downloads/,建议下载完整包。

在jbpm安装路径\designer\eclipse中有支持图形化设计的插件,将其加到eclipse中,在eclipse的窗口-首选项中如果有jboss jbpm选项,则安装成功。

1.3使用环境本说明书中用到的软件环境如下:操作系统:Window XP sp3JDK:1.4.2_08IDE:MyEclipse 5.5应用服务器:Weblogic 8.1 Tomcat 5.0数据库:oracle 9i2使用说明该示例演示的是一个公司报销流程。

普通员工可以填写报销单,然后提交主管审批;主管审批可以有三种可能:一是主管可以驳回请求,那么报销人需要重填报销单,或者取消报销操作;二是主管不同意请求,请求直接结束;三是主管同意请求,那又存在两种情况,一是如果报销总费用大于1000的话那么会自动转到老板那里,如果小于1000就直接进入财务处理子流程,老板审批的话有两种可能,一是同意进入财务处理子流程,二是不同意请求直接结束。

JBPM_API文档

JBPM_API文档

JBPM API文档整理:王龙于2011-9-1TaskInstance(任务实例)Cancel():结束当前任务实例,如果任务实例对应的任务节点只有一个任务实例,则结束这个任务实例会触发位于该节点的Token向下流转;Cancel(String transitionName):结束任务实例,并且流程按指定Transition流转到下一节点;end():end(String transitionName):与cancel一样,如果任务实例对应的任务节点只有一个任务实例,则结束这个任务实例会触发位于该节点的Token向下流转;setActorId(String actorId):为当前任务实例分配一个任务参与者,这样新的任务参与者的任务池中就会多一个任务实例,而原参与者就失去这个任务实例;setPooledActors(String[] actorIds):为当前任务实例分配一批参与者,这些参与者都可以看见这个任务实例,这个任务实例的原有参与者就失去了这个任务实例;start():开始一个任务实例;JbpmConfiguraionPublic static JbpmConfiguraion getInstance():静态方法返回一个JbpmConfiguraion对象;Public JbpmContext createJbpmContext():创建一个新的JbpmContext对象;Public JbpmContext getCurrentJbpmContext():从当前局部变量(ThreadLocal)中获取一个JbpmContext对象;CreateSchema():创建Jbpm数据库表;DropSchema():删除JBPM数据表;Public JobExecutor getJobExecutor():得到系统中的任务调度服务对象Public void startJobExecutor():开始系统中的任务调度服务;JbpmContextdeployProcessDefinition(ProcessDefinition processDefinition):定的流程模板对象发布到数据库中;public Connection getConnection():返回一个JDBC Connection对象;public TaskInstance get/loadTaskInstance(long taskInstanceId):根据任务实例的ID得到对应的任务实例对象;public ProcessionInstance newProcessInstance(String processDefinitionName):根据流程名称创建一个流程实例public Session getSession():返回一个Hibernate Session对象;public ProcessInstance loadProcessInstance(processInstanceId):根据流程实例ID得到一个流程实例对象;public List getTaskList(“stringname”):根据任务参与者的ID得到该参与者任务的任务实例列表;ProcessDefinitionpublic ProcessInstance createProcessInstance():创建一个新的流程实例;public ProcessInstance createProcessInstance(java.util.Map variables):创建一个新的流程实例,同时将给出的Map里的值作为新的流程实例的流程变量插入到流程上下文中;public static ProcessDefinition parseXmlInputStream(java.io.InputStream inputStream):静态方法,通过给出的流程定义的XML文件,生成一个流程模板对象;public static ProcessDefinition parseXmlResource(ng.String xmlResource):将指定位置的xml文件解析成一个流程模板对象;public static ProcessDefinition parseXmlString(ng.String xml):将给出的流程定义的字符串内容解析成一个流程模板对象;ProcessInstancepublic ContextInstance getContextInstance():得到当前流程实例的流程上下文对象;public ProcessDefinition getProcessDefinition():得到当前流程实例对应的流程模板对象;public Token getRootToken():得到当前流程的根令牌;public void signal():对该流程实例对应的Token发出向下流转的信号;public void signal(String transitionName):对流程实例的Token发出沿着指定名称的Transition 向下流转的信号public void suspend():暂停该流程。

JBPM_精品文档

JBPM_精品文档

第一章绪论这是Jboss 的jBPM3.12框架的用户指南的中文翻译。

其中第一章的译文,是我在网上找到的。

其他几章都是我自己做的翻译。

我的翻译是中英文对照,只翻译部分我认为重要的,不翻译简单的英文,以免浪费你我的时间。

同时,对于其中的部分内容,我会在翻译中做出解释。

下面是从网络上找到的第一章,这是jBPM3.0的用户指南的译文。

但是第一章,3.0和3.1内容相差不大,我就不做翻译了。

直接使用这一篇。

目录第一章绪论JBoss jBPM 是一个灵活的,易扩展的工作流管理系统。

JBoss jBPM有一套直观的流程建模语言,这套语言能用任务(task),异步通信的等待状态(wait state ),定时器(timer),自动化的动作(automated action)等来图形化的表示业务流程。

为了把这些操作集成在一起,JBoss jBPM拥有强大的,易扩展的控制流程机制。

JBoss jBPM对外依赖程度很小,你完全可以像用java的类库一样用它。

并且它也可以被部署在高性能的J2EE集群应用服务器上。

JBoss jBPM能配置在任何数据库上,并且能被部署在任何的应用服务器上。

1.1 总览工作流和业务流程处理功能的核心部分被打包成一个简单的java类库。

这个类库包括了这样一个服务:流程信息的存储,更新,和从数据库中重新取回。

图1.1:JBoss jBPM组成模块的概略图1.2 JBoss jBPM starter kitstarter kit是一个包含jbpm所有模块的下载包。

这个下载包中包括以下模块:jbpm-server, 一个预选配置好的jboss应用服务器。

jbpm-designer, 图形化定制流程的eclipse插件。

jbpm-db, jBPM的数据库兼容包 (见后边论述)。

jbpm, jbpm的核心模块,其中包括libs文件夹和这个用户说明。

jbpm-bpel, JBoss jBPM对BPEL扩展的一些参考资料预先配置好的JBoss应用服务器具有如下组成部分:jBPM核心模块,被打包成一个用于提供服务的存档文件带有jbpm表的集成数据库:默认的hypersonic数据库拥有jbpm表,并且这个表已经拥有一个流程了。

jbpm与ssh完整示例

jbpm与ssh完整示例

目录说明 (1)流程的定义 (1)流程的发布 (3)流程实例的启动 (7)流程节点的流转 (12)查看流程节点图片 (17)说明Jbpm的开发流程可以按如下几步进行:流程的定义、流程的发布、流程实例的启动、流程节点的流转、查看流程节点图片。

本示例是在spring2.0、hibernate3.2、struts1.2下开发。

如果是其它版本的框架也很容易做程序的迁移。

流程的定义流程的定义建议使用jbpm提供的eclipse下的插件,图形化配置插件安装文件可以到jbpm-starters-kit-3.1.4\jbpm-designer\jbpm-gpd-feature\eclipse下找到,需注意版本。

使用这种方式可以把定义的流程描述的三个文件压缩成zip包,统一的部署到数据库中,方便b/s系统中显示图片当前节点信息。

1插件安装把jbpm-gpd-feature文件夹复制到C:\Program Files\MyEclipse-6.0M1\eclipse \plugins下,注意自己的ecplise路径。

在C:\Program Files\MyEclipse-6.0M1\eclipse\links文件夹下建立jbpm-gpd.lin k文件。

内容如下:path=C:\\Program Files\\MyEclipse-6.0M1\\eclipse\\plugins\\j bpm-gpd-feature。

这样再重新启动eclipse就可以使用流程定义功能了。

2流程的定义在eclipse环境中选择file->new->other下的jboss jbpm->process definition 流程定义。

要在自己的项目文件中先指定文件要创建的文件夹。

这样会产生三个文件:gpd.xml、processdefinition.xml、processimage.jpg。

processdefinition.xml为描述流程定义文件,本例为:<?xml version="1.0" encoding="UTF-8"?><process-definition name="文档测试流程"><start-state name="开始"><transition name="提交张三审批" to="张三审批"></transition> </start-state><task-node name="张三审批"><task name="审批1"><assignment actor-id="张三"/></task><transition name="提交李四审批" to="李四审批"></transition> </task-node><task-node name="李四审批"><task name="审批2"><assignment actor-id="李四"/></task><transition name="提交王五审批" to="王五审批"></transition> </task-node><task-node name="王五审批"><task name="审批3"><assignment actor-id="王五"/></task><transition name="结束流程" to="结束"></transition></task-node><end-state name="结束"></end-state></process-definition>processimage.jpg文件是定义流程产生的图片、gpd.xml文件是图形文件的座标说明。

jbpm开发文档

1 前台页面 (2)1.1前台总览: (2)1.2常用节点图标说明: (2)1.3前台操作: (3)2 后台设计 (4)2.1 Myeclipse配置JBPM4 (4)2.2 Jar包引入: (6)2.3 在项目中加入jbpm的配置文件: (6)2.4 后台接收说明: (6)2.5 后台处理说明: (7)3 Jbpm说明: (8)3.1 Jbpm常用的对象与方法: (8)3.2 流程的发布有以下几种方式: (8)3.3 流程开始: (9)3.4 处理人获得任务列表: (9)3.5 处理人结束任务 (9)4 补充: (10)4.1 用java类来动态指定处理人: (10)4.2 用java类来作判定条件: (11)4.3 流程中的变量 (12)4.3.1 流程实例变量的创建与获取: (12)4.3.2 任务实例变量的创建: (12)4.3.3 变量总结: (13)1 前台页面1.1前台总览:1.2常用节点图标说明:1.开始(start)节点,表示一个流程的开始,name属性作用主要是匹配节点流向。

2.任务(task)节点,表示流程执行的任务处理节点。

task节点属性有name(任务节点的名称),assignee(任务节点的执行人),g(节点坐标)。

其中name属性作用主要是匹配节点的流向;assignee属性有5中表达方式1、none这种表达方式就是不指定任务的执行人,一般会有动态指定,在task中加<assignment-handler class="com.yhte.GetAssignee"></assignment-handler>用class中java类来动态指定执行人。

2、assignee 可以指定特定的一个人,也可以用表达式来指定,表达式一般写作#{name}。

3、candidate-groups 指定了一个组来执行,指定了组中的每个成员都可以来执行此任务节点,但只要其中一个成员完成,那么这个任务节点便结束。

jbpm详细实例

JBPM4.2安装State、Decision 、Task活动详解:State表示一个等待状态。

当流程实例执行到state节点时会暂停下来(处于等待状态),流程的执行会在外部触发器被调用之前一直等待(会暂停)Decision条件判断节点,表示在多条路径中选择一条。

一个decision 活动拥有很多个传出的转移。

流程的执行到达一个decision 活动时,会自动进行计算来决定采用哪个传出的转移(满足条件时,向下执行,没有符合条件时会停留在decision活动的上一个活动)Task任务组件,主要用来为流程实例分配任务。

通常与form表单相关联.(会暂停下来) State节点示例无分支的state节点流程定义文件:<?xml version="1.0" encoding="UTF-8"?><process name="demo" xmlns="/4.3/jpdl"><start g="134,113,48,48" name="start"><transition g="-53,-17" name="to state" to="state"/></start><state g="219,204,92,52" name="state"><transition g="-41,-17" name="to end" to="end"/></state><end g="329,301,48,48" name="end"/></process>测试代码:ProcessInstance processInstance=executionService.startProcessInstanceByKey("demo");System.out.println("流程实例Id:"+processInstance.getId());System.out.println("流程定义Id:"+processInstance.getProcessDefinitionId());//判断当前是否位于start节点System.out.println("是否位于start节点:"+processInstance.isActive("start"));//false//判断当前是否位于state节点System.out.println("是否位于state节点:"+processInstance.isActive("state"));//true//判断流程是否结束System.out.println("判断流程是否结束:"+processInstance.isEnded());//falseSystem.out.println("------------------------>使流程继续向下执行");//使流程继续向下执行//ProcessInstanceinstanceState=executionService.signalExecutionById(processInstance.getId());//此处也可以这么写ProcessInstanceinstanceState=executionService.signalExecutionById(processInstance.getId(),"to end");//to end为流程定义中用于连接state和end节点之间transition的name属性的值//判断当前是否位于state节点System.out.println("是否位于state节点:"+instanceState.isActive("state"));//false//判断流程是否结束System.out.println("判断流程是否结束:"+instanceState.isEnded());//true执行结果:流程实例Id:demo.7流程定义Id:demo-1是否位于start节点:false是否位于state节点:true判断流程是否结束:false------------------------>使流程继续向下执行是否位于state节点:false判断流程是否结束:true有分支的state节点:注意:在此流程定义中在state节点后含有2个分支(2个transition 即to 400和to 200),那么在使流程实例从state节点向下执行的时候需要明确给出transition的方向name属性的值,否则流程实例会一直处于state节点executionService.signalExecutionById(processInstance.getId(), "to 200");流程定义文件:<?xml version="1.0" encoding="UTF-8"?><process name="demo" xmlns="/4.3/jpdl"><start g="347,27,48,48" name="start"><transition g="-53,-17" name="to state" to="state"/></start><state g="329,132,92,52" name="state"><transition name="to 200" to="200" g="-41,-17"/><transition name="to 400" to="400" g="-41,-17"/></state><end g="358,321,48,48" name="end"/><state name="200" g="420,226,92,52"><transition name="to end" to="end" g="-41,-17"/></state><state name="400" g="266,225,92,52"><transition name="to end" to="end" g="-41,-17"/></state></process>测试代码:ProcessInstance processInstance=executionService.startProcessInstanceByKey("demo");System.out.println("------------------------>使流程继续向下执行");System.out.println("------------------------>使流程流向200");ProcessInstanceprocessInstance200=executionService.signalExecutionById(processInstance.getId(), "to 200");System.out.println("当前流程是否位于200节点---->"+processInstance200.isActive("200"));//trueSystem.out.println("当前流程是否结束---->"+processInstance200.isEnded());//false/*System.out.println("------------------------>使流程流向400");ProcessInstanceprocessInstance400=executionService.signalExecutionById(processInstance.getId(), "to 400");System.out.println("当前流程是否位于400节点---->"+processInstance400.isActive("400"));System.out.println("当前流程是否结束---->"+processInstance400.isEnded());*/执行结果:------------------------>使流程继续向下执行------------------------>使流程流向200当前流程是否位于200节点---->true当前流程是否结束---->false流向400的自己测试由于流程定义中200和400均为state节点,所以流程在流经200或400节点后仍会停留在该节点,以下代码完成流程实例从start->200->end这一过程ProcessInstance processInstance=executionService.startProcessInstanceByKey("demo");//查询该流程实例的活动节点System.out.println(processInstance.findActiveActivityNames());//因为流程实例启动后,它会自动向下执行,直到遇到state或task等节点时暂停下来,在我们的流程定义文件中紧跟在start后的节点为state,所以流程实例会在state节点暂停下来Execution execution=processInstance.findActiveExecutionIn("state");//查询当前流程实例的当前节点ProcessInstanceprocessInstance200=executionService.signalExecutionById(execution.getId(), "to 200");//此时流程流向200System.out.println("当前流程是否位于200节点---->"+processInstance200.isActive("200"));//trueSystem.out.println("当前流程是否结束---->"+processInstance200.isEnded());//false//使流程继续向下执行(结束)System.out.println("-------使流程继续向下执行(结束)------->");//由于200节点后没有分支仅有end这一节点,所以200与end之间transition的name 属性的值可以省略,当然加上更好ProcessInstanceinstance=executionService.signalExecutionById(processInstance200.getId());//流程执行到end,结束流程实例System.out.println("当前流程是否结束---->"+instance.isEnded());//true执行结果:[state]当前流程是否位于200节点---->true当前流程是否结束---->false-------使流程继续向下执行(结束)------->当前流程是否结束---->trueDecision节点示例流程图:流程定义:在使用Decision时,一个Decision活动应配置为以下三种中的一种decision 会检查每一个传出的转移里的内置条件。

jbpm实例

jbpm实例1)编写流程:<?xml version="1.0" encoding="UTF-8"?><process name="recharge" xmlns="/4.4/jpdl"><start g="35,71,106,77" name="开始"><transition g="-26,-19" name="to 订单发起" to="填写订单"/></start><task assignee="#{owner}" g="133,68,92,52" name="填写订单"><transition g="-27,-21" name="to 充值完成" to="充值完成"/></task><end g="981,61,48,48" name="充值完成"/></process>2)部署流程:将*.jpdl.xml和png图⽚打包成zip包,然后发布流程代码:/*** 新的发布⽅法*/public String deployNew(String sourceUrl) {ZipInputStream zis = new ZipInputStream(this.getClass().getResourceAsStream(sourceUrl));// 发起流程,仅仅就是预定义任务,即在系统中创建⼀个流程,这是全局的,与具体的登陆⽤户⽆关。

然后,在启动流程时,才与登陆⽤户关联起来String did = repositoryService.createDeployment().addResourcesFromZipInputStream(zis).deploy();return did;}3)发起充值申请流程:/*** 充值申请流程启动* @throws Exception*/@RequestMapping("apply")public ModelAndView apply(RechargeEntity RechargeEntity,String usercode) {//启动流程Map<String, Object> map = new HashMap<String, Object>();map.put("owner", usercode);String stringVal= “recharge-1”;//靠流程id 启动流程ProcessInstance processInstance = executionService.startProcessInstanceById(stringVal, map);//根据节点名取⼀流程实例下的任务Task task1 = taskService.createTaskQuery().processInstanceId(processInstance.getId()).activityName("填写订单").uniqueResult(); taskService.setVariables(task1.getId(), map);pleteTask(task1.getId());/**********************************处理⾃⼰的业务逻辑*********************************///返回信息model.addObject("state", true);return model;}。

jbpm例子

学jbpm已经有三天了,按照<<jBPM开发入门指南》做了里面的一个例子,虽然这个例子不是自己想出来了,但毕竟自己重做了一遍,感觉还是不错,下面就说说我怎么做的例子原创地址是:/chengang/archive/2006/07/13/57986.html一、首先当然是安装jbpm环境了jdk,eclipse之类安装就不说了,首先下载jbpm,下载jBPM-JPDL3.2.2:/jbossjbpm/jbpm_downloads/下载jPDL Suite版,这个版本是包含所有的一整套工具,下载后是个压缩包解压到 F:\jbpm-jpdl-3.2.2 ,目录下主要包含以下几个子目录:●src —— jBPM 的源代码●config —— jBPM及Hibernate与log4j的配置文件●db ——各种数据库的建表SQL语句●lib ——依赖的第三方依赖类库●doc —— API文档及用户使用向导●designer ——辅助开发 jBPM 的 Eclipse 插件,具体在 eclipse子目录中●server ——一个已经配置好了的基于 JBoss 的 jBPM 控制台及示例将这个包解压到f盘下,F:\jbpm-jpdl-3.2.2二、安装jBPM 的Eclipse 开发插件有个辅助工具开发起来方便一点,只不过现在 jBPM 的开发工具插件功能还不算太强,也就一个“项目创建向导”的功能,让你:(1)不用再去配置 classpath 库的引用了(2)直接得到了一个 jBPM 的项目初始结构安装步骤如下:1)打开Eclipse选择菜单“Help->Software Updates->Find and Install”;(2)弹出窗口中选择“Search for new features to install”,然后点击“Next >”或者可能直接用link的方式安装这个插件如果安装成功,则 Eclipse 首选项里多了一个 JBoss jBPM ,另外我们也需要到这个 jBPM 的首选项里做一些配置工作――指定 jBPM 的安装路径(如下图所示)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1:在eclipse中导入ssh-jbpm工程
2:在sql server中创建一个名为jbpm的数据库(不需要创建任务表,工程会通过hibernate映射文件自动生成与之对应的数据库表)
3:在tomcat中部署并启动工程,(此时会创建本工程所需要的数据表)
4:工程成功启动后,打开SQL查询分析器,插入以下测试数据
insert into tb_user(user_name,user_password,user_type)
values('test','123',0)
insert into tb_user(user_name,user_password,user_type)
values('manager1','123',1)
insert into tb_user(user_name,user_password,user_type)
values('manager2','123',1)
insert into tb_user(user_name,user_password,user_type)
values('boss','123',2)
insert into tb_user(user_name,user_password,user_type)
values('caiwu','123',2)
test为普通用户,manager1,manager2为主管,boss为老板,caiwu为财务人员
用户身份通过tb_user表中的user_type标识
5:发布流程(一定要在tomcat启动时)
A:先发布子流程(caiwu),
接下来发布报销主流程,,步骤同上
注意:如果采用代码的方式发布流程的话,流程图不会插入到数据库,
6完成以上步骤后,就可以运行本工程
首先登录
http://localhost:8080/ssh-jbpm/login.jsp
我会先以test用户登录
用户名:test
密码:123
成功登录后显示以下界面
填写报销单如下
成功提交申请后,用户可以跟踪流程进度
目前还没有任何主管对test发起的申请处理,因为流程应该停留在<<部门主管审核节点>>
下来我们以manager1身份登录
用户名:manager1
密码:123
成功以manager1身份登录,在待处理的任务中就看到了一条任务,此任务为共享任务(所有的主管都可以处理,在你的项目中,你可以将此任务设置成个人任务)
因为是共享任务,所以我们只有点击”我来处理该任务时”,这个任务才能成为manager1的个人任务,只有个人任务才能处理,共享任务不能处理,
点击审核处理该申请,manager1将看到test发起的报销单
当manager1同意该申请时,因为项目金额小于10000,只要主管同意,此流程就结束.此时再以test用户登录,将看到以下信息
成功报销,在test发起的业务中,已经看不到那条申请,同时在”我的消息”栏中出现一条消息
流程中的各种情况,
此时以boss身份登录的话就会看到这条任务,这里没有写具体的老板审核代码,只能看到任务不能审核
当用户发起的申请,主管认为不合理时,可以打回修改,用户在自己的任务栏就会看到相应的任务,当然这里也仅仅只能看到任务,没有写具体的修改代码,
======================================================================此工程只是一个次品,还有很多的东西没有做,你就参考一下流程图是怎么显示的就成了,代码写的比较乱,没有什么可读性,你先凑合着看吧
,显示流程图不是关键的问题,你应该把精力放在用户自定义流程上面,如果是用户自定义流程,就不能这样显示流程图了,
还有,会签,任意节点的回退问题,jbpm事务与spring事务整合,这此才比较重要,要是没有搞定之前就上项目,中间你会很崩溃的,我的建意是你先把用户自定义流程攻下来,如果OA项目不能让用户自定义流程,那OA肯定很失败的.。

相关文档
最新文档