昆明理工大学 工作流技术 实验报告.docx
- 文档编号:11702696
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:18
- 大小:415.74KB
昆明理工大学 工作流技术 实验报告.docx
《昆明理工大学 工作流技术 实验报告.docx》由会员分享,可在线阅读,更多相关《昆明理工大学 工作流技术 实验报告.docx(18页珍藏版)》请在冰点文库上搜索。
昆明理工大学工作流技术实验报告
昆明理工大学信息工程与自动化学院学生实验报告
(2014—2015学年第2学期)
课程名称:
工作流技术开课实验室:
信自楼4422015年4月24日
年级、专业、班
计科122
学号
201210405204
姓名
邹华宇
成绩
实验项目名称
基于JBPM的请假流管理系统
指导教师
胡守成
教
师
评
语
该同学是否了解实验原理:
A.了解□B.基本了解□C.不了解□
该同学的实验能力:
A.强□B.中等□C.差□
该同学的实验是否达到要求:
A.达到□B.基本达到□C.未达到□
实验报告是否规范:
A.规范□B.基本规范□C.不规范□
实验过程是否详细记录:
A.详细□B.一般□C.没有□
教师签名:
年月日
一、实验目的与内容
目的:
熟悉在eclipse的开发环境,加深对工作流图的理解。
内容:
基于JBPM实现一个员工请假管理系统。
假设应用背景如下:
在某一公司中,部门员工要请假的话需要提交申请。
需要经理审批,在得到经理的同意后,还必须老板批准。
如果是经理请假期间只要老板批准即可。
在请假被批准之前,申请人可以撤销请假申请。
二、实验背景
JBPM,全称是JavaBusinessProcessManagement(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。
jBPM是公开源代码项目,使用它要遵循ASL和EULA协议。
本系统是基于工作流技术的员工请假系统,便于企业更加高效便捷对员工事务进行管理。
确定了员工的请假制度,实现了请假制度的结构化、规范化。
随着企业办公自动化的发展,网上协同办公显的日趋重要,而工作流技术在协同办公系统的应用也日益普及。
针对企业请假流程繁琐的问题,提出利用JBPM工作流的方法,并应用实践中,效果良好。
三、所用仪器、材料(设备名称、型号、规格等或使用软件)
PC机一台,JBPM4.4,MyEclipse10.1,数据库MySQL等。
四、程序代码及操作过程
1.新建简单的请假流程
(1)新建一个jbpm4.4的流程定义文件
右键点击src→New→Other,选择JBossjBPM下的Jbpm4ProcessDefinition,文件名写leave,版本号写4.4即可。
(2)用流程设计器打开新建的leave.jpdl.xml。
右键点击leave.jpdl.xml→OpenWith→jBPMjPDL4Editor,,看见如下效果
(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源码
至此工程的src文件下就有下面这些文件:
2.发布流程
JBPM的流程发布其实很简单,只要使用JBPM已经封装好的方法进行使用,即可。
我们新建一个deploy.jsp的页面用户发布流程。
在此讲解使用zip文件打包发布流程。
(1)将之前建立好的leave.jpdl.xml和leave.png文件,一起打包进leave.zip文件。
(2)deploy.jsp代码如下:
<%@pagelanguage="java"contentType="text/html;charset=gb2312"%>
<%@page
import="java.io.File,java.io.FileInputStream,java.io.InputStream,java.util.zip.ZipInputStream,java.util.*,org.jbpm.api.*,java.util.zip.*"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:
//www.w3.org/TR/html4/loose.dtd">
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
StringdeployFile=request.getParameter("processDef");
if(deployFile!
=null&&deployFile!
=""){
//必须使用的,流程引擎
ProcessEngineprocessEngine=Configuration.getProcessEngine();
RepositoryServicerepositoryService=processEngine
.getRepositoryService();
try{
Stringfile=deployFile;
//将ZIP文件封转到IO流里
InputStreamis=newFileInputStream(newFile(file));
ZipInputStreamzis=newZipInputStream(is);
//将ZIP流程文件发布到pvm(流程虚拟机中,他会把ZIP包中的xml文件和png图片存储到数据库中)
repositoryService.createDeployment()
.addResourcesFromZipInputStream(zis).deploy();
zis.close();
is.close();
out.println("发布流程成功
");
out.println("
");
}catch(Exceptione){
e.printStackTrace();
out.println("发布流程失败");
}
}
%>
functionreadFile(obj){
document.getElementById("file").value=obj.value;
}
发布流程文件
(3)测试发布成功结果
(4)流程定义所设计到的表
JBPM4_DEPLOYMENT
JBPM4_DEPLOYPROP//存放流程定义的版本号,使用的jbpm版本号,已经流程名
JBPM4_JOB//存放timer的定义
JBPM4_LOB//存放流程定义的xml和png图片文件
3.启动流程
启动流程,其实很简单,需要获得流程定义的ID,使用jbpm已经封装好的流程启动方法就可以了。
//start.jsp
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
<%@pageimport="java.util.*,org.jbpm.api.*,java.util.zip.ZipInputStream"%>
<%
ProcessEnginepe=Configuration.getProcessEngine();
ExecutionServicees=pe.getExecutionService();
//获取用户名
Map
Stringusername=(String)session.getAttribute("username");
map.put("owner",username);
//获取流程id
StringpdId=request.getParameter("id");
es.startProcessInstanceById(pdId,map);
response.sendRedirect("index.jsp");
%>
4.流程办理(本部分代码过多,因此省略)
由于我们的流程如下,启动启动流程后,流程就进入了“申请”这个流程节点(注:
流程启动后,会在流程第一个节点所有人/所有组的代办事项中找到)。
所以,现在就要在申请中进行办理。
由于我们在定义流程时如下定义了:
定义了,“申请”这个节点是有流程启动者进行办理的,form指定办理“申请”这个节点的处理页面,用户可以自己定义处理页面。
Transition指定申请流程的下一个出口。
(1)在代办事项中,我们有一行如下代码:
id=<%=task.getId()%>">查看详细信息
在这里会传一个任务ID,所以在request.jsp中必须要取得这个任务ID。
前台显示如下:
填写完内容后,页面将会提交到submit.jsp,将对提交的数据进行处理,同时流程继续流转,所以在提交的的页面中要处理两件事情:
处理用户提交数据,将数据和流程实例进行绑定,将流程继续流转,提交给下一个节点办理。
请假“申请”提交后,就进入经理审批流程了。
在之前的经理审批节点,我们进行如下定义:
name="经理审批"> -42,-18"name="驳回"to="申请"/> 注: form: 处理经理审批的处理页面 Candidate-groups: 处理当前任务节点的用户组,如果不定义则任务都在这里节点进行操作,还可以像“申请”节点一样,定义assignee的属性,但是candidate-groups和assigness同时只能使用其中的一个。 这里定义了两个transition,分别是“批准”和“驳回”,决定的流程的下一个流转节点是哪里。 在具体操作中,将详细说明。 其中,有两点需要注意: 1)taskService.getVariable(taskId,"owner")这样的内容是,取出之前在“申请”节点中,封装进流程实例的相应变量的值,如果你要对已有值进行修改或者要增加新值,只需要对你当前想要变更的变量封装进map,然后同“申请”一样绑定到流程实例中即可。 2)在页面中给出了两个submit提交按钮,他们的name相同,但是value不同: 这刚好和我们之前定义的流程的两个transition相同,他是为后面流转流程所做服务的。 在之前的流程定义点,我们进行如下定义: name="老板审批"> "to="end1"/> 注: form: 处理老板审批的处理页面 Candidate-groups: 处理当前任务节点的用户组,如果不定义则任务都在这里节点进行操作,还可以像“申请”节点一样,定义assignee的属性,但是candidate-groups和assigness同时只能使用其中的一个。 这里定义了两个transition,分别是“批准”和“驳回”,决定的流程的下一个流转节点是哪里。 在具体操作中,将详细说明。 4.数据库表简要说明 jBPM4.4的数据库表分成以下几类: 1)和系统相关: 这个只有JBPM4_PROPERTY 2)和ProcessDefinition相关的表: 有: JBPM4_DEPLOYMENT、JBPM4_DEPLOYPROP、JBPM4_LOB 3)和开启一个instance相关: 有JBPM4_EXECUTION、JBPM4_TASK、JBPM4_JOB、JBPM4_VARIABLE、JBPM4_SWIMLANE、JBPM_PARTICIPATION 4)和历史相关的表: JBPM4_HIS_ACTINST、JBPM4_HIS_DETAIL、JBPM4_HIS_PROCINST、JBPM4_HIS_TASK、JBPM4_HIS_VAR 5)和用户/组相关的表有: JBPM4_ID_USER、JBPM4_ID_GROUP、JBPM4_ID_MEMBERSHIP 六、实验结果、分析和结论(误差分析与数据处理、成果总结等。 其中,绘制曲线图时必须用计算纸或程序运行结果、改进、收获) 通过本次试验,我大体了解了工作流的概念,明白了工作流程的流转方式和工作流的原理,还熟悉了在eclipse中绘制工作流图的开发环境,加深和巩固了课堂上对工作流的了解。 在实验中增加了我对于软件工具的实践性与熟悉性,锻炼了我的动手能力。 提高了我对于流程的认知和对工作流的感性认识。 感谢胡守成老师的教导。 注: 教师必须按照上述各项内容严格要求,认真批改和评定学生成绩。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 昆明理工大学 工作流技术 实验报告 昆明 理工大学 工作流 技术 实验 报告