JBPM4"公司请假流程"实例步骤

在开始实例之前需安装JBPM4开发环境和所需数据库(百度搜索安装)
1:画流程图和生成png图片;
<?xml version="1.0" encoding="UTF-8"?>
<process name="leave" xmlns="http://jbpm.org/4.4/jpdl">
   <start g="214,37,48,48" name="start1">
      <transition g="-47,-17" name="to 申请" to="申请"/>
   </start>
   <task assignee="#{owner}" form="request.html" g="192,126,92,52" name="申请">
      <transition g="-71,-17" name="to 经理审批" to="经理审批"/>
   </task>
   <task assignee="manager" form="manager.html" g="194,241,92,52" name="经理审批">
      <transition g="-29,-14" name="批准" to="exclusive1"/>
      <transition g="105,267;103,152:-47,-17" name="驳回" to="申请"/>
   </task>
   <decision expr="#{day > 3 ? '老板审批' : '结束'}" g="218,342,48,48" name="exclusive1">
      <transition g="415,367:-47,-17" name="老板审批" to="老板审批"/>
      <transition g="-31,-16" name="结束" to="end1"/>
   </decision>
   <end g="219,499,48,48" name="end1"/>
   <task assignee="boss" form="boss.html" g="370,408,92,52" name="老板审批">
      <transition g="415,524:-91,-18" name="结束" to="end1"/>
   </task>
</process>
2:发布流程图;
           ProcessEngine processEngine=Configuration.getProcessEngine();
    	   RepositoryService repositoryService=processEngine.getRepositoryService();
    	   try{
    		   String file="J:/leave.zip";
    		   //将zip文件封装到IO流里
    		    System.out.println(new File(file));
    		   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();
3启动流程
首先要获取已发布流程列表:
public List<ProcessDefinition> getProcessDefinitions() {
		return repositoryService.createProcessDefinitionQuery().list();
}
<s:iterator value="processDefinitions" var="dfinition">
				<tr>
					<td>
						${id }
					</td>
					<td>
						${deploymentId }
					</td>
					<td>
						${key }
					</td>
					<td>
						${name }
					</td>
					<td>
						${version }
					</td>
					<td>
						<a href="undeploy.html?id=${deploymentId }">删除流程</a>
					</td>
					<td>
						<a href="start.html?id=${id }">启动流程</a>
					</td>
				</tr>
</s:iterator>
获取流程id,给“owner”赋值
Map map = new HashMap<String, Object>();
map.put("owner", ActionContext.getContext().getSession().get("role"));
ProcessEngine processEngine=Configuration.getProcessEngine();
	//流程实例服务
ExecutionService executionService=processEngine.getExecutionService();
executionService.startProcessInstanceById(id, map);//启动流程
 
4:用户待办任务
ProcessEngine processEngine=Configuration.getProcessEngine();
//任务引擎
TaskService taskService=processEngine.getTaskService();
//当前用户代办任务集合
taskService.findPersonalTasks(roleName);
<s:iterator value="tasks" var="task">
				<tr>
					<td>
						<s:property value="#task.id" />
					</td>
					<td>
						<s:property value="#task.key" />
					</td>
					<td>
						<s:property value="#task.name" />
					</td>
					<td>
						<s:property value="#task.activityName" />
					</td>
					<td>
					<s:property value="#task.assignee" />
					</td>
					<td>
						<a href="${formResourceName }?id=${id}">办理</a>//跳转到request.html页面
					</td>
				</tr>
</s:iterator>
-------------request.jsp页面
<form action="submit.html" method="post">
				<input type="hidden" name="processDto.taskId" value="${param.id}">
				<!-- 此处的owner与day两个name值要与流程图中定义的一致,owner是在xml中定义的变量,不属于具体登陆者 -->
				申请人:
				<input type="text" name="processDto.owner" value="${user}" />
				<br />
				请假时间:
				<input type="text" name="processDto.day" value="" />
				<br />
				请假原因:
				<textarea name="processDto.reason"></textarea>
				<br />
				<input type="submit" />
</form>
map = new HashMap<String, Object>();
map.put("owner", processDto.getOwner());
map.put("day", Integer.parseInt(processDto.getDay()));
map.put("reason", processDto.getReason());
map.put("name", processDto.getOwner());
taskService.setVariables(processDto.getTaskId(), map);
taskService.completeTask(processDto.getTaskId());//申请环节完成
----经理审批环节
根据“manager”角色获取待办任务
taskService.findPersonalTasks(roleName);
------进入manager.jsp
<fieldset>
<legend>
经理审核 username: ${user } param.id:${param.id }
</legend>
<form action="submitManager.html" method="post">
<input type="hidden" name="id" value="${param.id}">
申请人:
<s:property value="map['owner']" />
<br />
请假时间:
<s:property value="map['day']" />
<br />
请假原因:
<s:property value="map['reason']" />
<br />
姓名:
<s:property value="map['name']" />
<br />
<input name="result" type="submit" value="批准" />
<input name="result" type="submit" value="驳回" />
</form>
</fieldset>
taskService.completeTask(id, result);--经理审批结束“result”代表“批准”和“驳回”
--如果请假天数大于三天,转由老板审批,否则结束
taskService.findPersonalTasks(roleName);//获取老板待办任务
Task task = taskService.getTask(id);
String taskId = task.getId();
Set<String> strSet = new HashSet<String>();
strSet.add("owner");
strSet.add("day");
strSet.add("reason");
strSet.add("name");
strSet.add("age");
strSet.add("address");
return taskService.getVariables(taskId, strSet);--进入boss办理页面
<form action="submitBoss.html" method="post">
				<input type="hidden" name="id" value="${param.id}">
				申请人:
				<s:property value="map['owner']" />
				<br />
				请假时间:
				<s:property value="map['day']" />
				<br />
				请假原因:
				<s:property value="map['reason']" />
				<br />
				姓名:
				<s:property value="map['name']" />
				<br />
				性别:
				<s:property value="map['sex']" />
				<br />
				年龄:
				<s:property value="map['address']" />
				<br />
				<input type="submit" />
</form>
taskService.completeTask(id);//boss完成审批

 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值