欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOC文档下载  

    JBPM安装与请假流程实例.doc

    • 资源ID:21363       资源大小:857.55KB        全文页数:37页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    JBPM安装与请假流程实例.doc

    1、开发环境搭建1.1必须安装的软件1) pm-4.4.zip2) jdk 5或者更高版本3) 支持的数据库有hsqldb、mysql、oracle、postgresql、sybase,本说明以oracle作为数据库。4) GPD插件(pm在IDE中的流程设计器), eclipse(建议3.6版本以上)或者myeclipse(建议8.1版本以上)安装插件所需的zip在解压后pm-4.4installsrcgpd中的pm-gpd-site.zip,本说明以eclipse3.6为例。1.2配置PM运行时1) 打开window à preferences2) 选择 oss PM -> PM 4 -> Runtime Locations3) 点击 Add.4) 在 Add Location 对话框中,输入一个名字,比如 pm-4.0 然后点击 Search.5) 在 Browse For Folder 对话框中,选择你的pm 根目录,然后点击 OK6) 点击 OK 在 Add Location 对话框中1.3定义PM 用户库1) 点击窗口 -> 属性(Windows -> Preferences)2) 选择Java -> 创建路径 -> 用户类库(Java -> Build Path -> User Libraries)3) 点击新建(New)4) 类型名字PM Libraries5) 点击添加JARs(Add JARs.)6) 找到PM 安装程序下的lib 目录7) 选择lib 下的所有jar 文件并点击打开(Open)8) 选择PM Libraries 作为入口9) 重新点击添加JARs(Add JARs)10) 在PM 的安装程序的根目录下选择pm.jar 文件11) 点击打开(Open)12) 在pm.jar 下选择源码附件(Source attachment)作为入口13) 点击编辑(Edit)14) 在源码附件的配置(Source Attachment Configuration)对话框中,点击目录(External Folder.)15) 找到PM 安装程序下的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) 在打开的对话框中, 选择PM 安装目录下src 文件夹中jpdl.xsd 文件7) 点击打开(Open)并且关闭所有的对话框2、实例教程讲解这节我们将使用建立一个简单请假流程项目2.1 建立项目在eclipse中新建一个Dynamic Web Project的项目pm4leave。2.2 加入pm用户库1)点击新建的项目pm4leave>Properties2)如下图说示加入用户库2.3 加入pm所需要的配置文件大家可以从pm-4.4解压后的文件下,在路径examplessrc中找到以下文件,加入到项目工程的src中其中pm.hibernate.cfg.xml是配置pm4.4的hibernate配置文件,包括数据源的配置,和一般的hibernate.cfg.xml配置文件差不多。pm.mailkit开头的文件,是用于功能的配置。2.4 新建简单的请假流程1)新建一个pm4.4的流程定义文件右键点击srcàNewàOther,选择oss PM下的pm 4 Process Definition,文件名写leave,版本号写4.4即可。3)用流程设计器打开新建的leave.jpdl.xml。右键点击leave.jpdl.xmlàOpen WithàPM 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的源码:<?xmlversion="1.0"encoding="UTF-8"?><processname="leave"xmlns="pm.org/4.4/jpdl"><startg="198,15,48,48"name="start1"><transitionto="申请"/></start><taskassignee="#owner"form="request.jsp"g="175,94,92,52"name="申请"><transitionto="经理审批"/></task><taskcandidate-groups="manager"form="manager.jsp"g="176,174,92,52"name="经理审批"><transitiong="-32,-8"name="批准"to="exclusive1"/><transitiong="120,199;121,122:-42,-18"name="驳回"to="申请"/></task><decisionexpr="#day > 3 ? '老板审批' : '结束'"g="196,259,48,48"name="exclusive1"><transitiong="-39,-10"name="结束"to="end1"/><transitiong="344,283:-71,-17"name="老板审批"to="老板审批"/></decision><taskcandidate-groups="boss"form="boss.jsp"g="299,305,92,52"name="老板审批"><transitiong="342,378:"to="end1"/></task><endg="196,354,48,48"name="end1"/></process>至此工程的src文件下就有下面这些文件:2.5 发布流程pm的流程发布其实很简单,只要使用pm已经封装好的方法进行使用,即可。我们新建一个deploy.jsp的页面用户发布流程。在此讲解使用zip文件打包发布流程。1) 将之前建立好的leave.jpdl.xml和leave.png文件,一起打包进leave.zip文件。2) deploy.jsp代码如下:<%pagelanguage="java"contentType="text/html; charset=gb2312"%><%pageimport="java.io.File,java.io.FileInputStream,java.io.InputStream,java.util.zip.ZipInputStream,java.util.*,org.pm.api.*,java.util.zip.*"%><!DOCTYPEhtmlPUBLIC"-/W3C/DTD HTML 4.01 Transitional/EN"".w3.org/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();zis.close();is.close();out.println("发布流程成功<br />");out.println("<a href='task-write.jsp'>返回</a><br />"); catch (Exception e) e.printStackTrace();out.println("发布流程失败");%><scripttype="text/javascript">function readFile(obj) document.getElementById("file").value = obj.value;</script><fontcolor="red">可直接发布zip文件</font><br/><formname="form1"method="post"action="deploy.jsp"><label>发布流程文件 <inputtype="file"name="processDef"onchange="readFile(this)"></label><label><inputtype="submit"name="Submit"value="提交"></label></form></body></html>3) 测试发布成功结果4) 查看已发布成功的流程已经有的一个查看流程的页面task-write.jsp,源码如下:<%pagelanguage="java"contentType="text/html; charset=GB18030"pageEncoding="GB18030"%><%includefile="/head.jsp"%><!DOCTYPEhtmlPUBLIC"-/W3C/DTD HTML 4.01 Transitional/EN"".w3.org/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><metahttp-equiv="Content-Type"content="text/html; charset=GB18030"><title>Insert title here</title><styletype="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;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><TABLEwidth="100%"id="mytable"id="mytable"><caption>流程定义</caption><thead><tr><thclass="spec">流程id</th><th>流程名称</th><th>版本号</th><th>流程删除</th><th>启动流程</th></tr></thead><tbody><%for (ProcessDefinition pd : pdList) %><tr><thclass="spec"><%=pd.getId()%></th><tdclass="alt"><%=pd.getName()%></td><tdclass="alt"><%=pd.getVersion()%></td><tdclass="alt"><ahref="remove.jsp?id=<%=pd.getDeploymentId()%>">删除流程</a></td><tdclass="alt"><ahref="start.jsp?id=<%=pd.getId()%>">启动流程</a></td></tr><%></tbody></table></body></html>5) 查看流程发布情况6) 流程定义所设计到的表PM4_DEPLOYMENTPM4_DEPLOYPROP/存放流程定义的版本号,使用的pm版本号,已经流程名PM4_JOB/存放timer的定义PM4_LOB /存放流程定义的xml和png图片文件2.6 启动流程1)启动流程,其实很简单,需要获得流程定义的ID,使用pm已经封装好的流程启动方法就可以了。/start.jsp<%pageimport="java.util.*,org.pm.api.*,java.util.*"%><%request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");try/流程引擎ProcessEngine processEngine = Configuration.getProcessEngine();/流程实例服务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)查看代办任务/ task-personal-list.jsp<%pagelanguage="java"contentType="text/html; charset=GB18030"pageEncoding="GB18030"%><%pageimport="org.pm.api.*,org.pm.api.task.*"%><%includefile="/head.jsp"%><!DOCTYPEhtmlPUBLIC"-/W3C/DTD HTML 4.01 Transitional/EN"".w3.org/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><metahttp-equiv="Content-Type"content="text/html; charset=GB18030"><title>Insert title here</title><styletype="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;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><tablewidth="100%"id="mytable"id="mytable"><caption>个人待办任务</caption><thead><tr><thclass="spec">流程ID</th><th>当前节点</th><th>查看详细信息</th><th>查看流程图</th></tr></thead><tbody><%for (Task task : taskList2) %><tr><tdclass="alt"><%=task.getId()%></td><tdclass="alt"><%=task.getName()%></td><tdclass="alt"><ahref="<%=task.getFormResourceName()%>?id=<%=task.getId()%>">查看详细信息</a></td><tdclass="alt"><ahref="view.jsp?id=<%=task.getExecutionId() %>">查看流程图</a></td></tr><%></tbody></table></body></html>3)实现如图:/流程列表/流程启动后,成为当前用户的待办任务2.7 流程办理(申请)由于我们的流程如下,启动启动流程后,流程就进入了“申请”这个流程节点(注:流程启动后,会在流程第一个节点所有人/所有组的代办事项中找到)。所以,现在就要在申请中进行办理。由于我们在定义流程时如下定义了:<taskassignee="#owner"form="request.jsp"g="175,94,92,52"name="申请"><transitionto="经理审批"/></task>定义了,“申请”这个节点是有流程启动者进行办理的,form指定办理“申请”这个节点的处理页面,用户可以自己定义处理页面。Transition指定申请流程的下一个出口。1) 在代办事项中,我们有一行如下代码:<a href="<%=task.getFormResourceName()%>?id=<%=task.getId()%>">查看详细信息</a>在这里会传一个任务ID,所以在request.jsp中必须要取得这个任务ID。/request.jsp源码<%pagelanguage="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC"-/W3C/DTD HTML 4.01 Transitional/EN"".w3.org/TR/html4/loose.dtd"><html><head><metahttp-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><formmethod="post"onsubmit="return validate()"><inputtype="hidden"name="taskId"value="$param.id"> 申请人:<inputtype="text"name="owner"value="$sessionScope'username'"/><br/> 请假时间:<inputtype="text"name="day"value=""onchange="change(this)"/><br/> 请假原因:<textareaname="reason"></textarea><br/><inputtype="submit"/></form></fieldset><scripttype="text/javascript">function change(obj)var reg = /1-9d*$/;if (!reg.test(obj.value) alert("天数必须为正整数!"); obj.value="" obj.focus();returnfalse; function validate()var obj = document.getElementsByName("day")0.value;var reg = /1-9d*$/;if (!reg.test(obj) alert("天数必须为正整数!"); document.getElementsByName("day")0.value="" document.getElementsByName("day")0.focus();returnfalse; else document.forms0.action="submit.jsp"document.forms0.submit();returntrue; </script></body></html>前台显示如下:填写完内容后,页面将会提交到submit.jsp,将对提交的数据进行处理,同时流程继续流转,所以在提交的的页面中要处理两件事情:1、 处理用户提交数据,将数据和流程实例进行绑定2、 将流程继续流转,提交给下一个节点办理/submit.jsp源码如下<%pageimport="java.util.*,org.pm.api.*"%><%pageimport="java.sql.*"%><%request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");%><%ProcessEngine processEngine = Configuration.getProcessEngine();TaskService taskService = processEngine.getTaskService();String username = (String) session.getAttribute("username");String taskId = request.getParameter("taskId");String owner = request.getParameter("owner");int day = Integer.parseInt(request.getParameter("day");String reason = request.getParameter("reason");String sDBDriver = "oracle.jdbc.driver.OracleDriver" String sConnStr = "jdbc:oracle:thin:10.142.7.9:1521:orcl"Connection conn = null; PreparedStatement stmt = null;ResultSet rs = null;try Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr,"scott","scott"); conn.setAutomit(false);/查询待办事项列表String sql1 = "UPDATE pm4_hist_task task set task.assignee_=? where task.dbid_=?"stmt = conn.prepareStatement(sql1); stmt.setString(1,username);stmt.setString(2,taskId);stmt.executeUpdate();conn.mit();catch(Exception e) e.printStackTrace(); tryconn.rollback();catch(Exception e1)e1.printStackTrace();finallyif (stmt != null) stmt.close(); if (conn != null) conn.

    注意事项

    本文(JBPM安装与请假流程实例.doc)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开