一、创建流程实例
- 界面部分概述:员工登录后填写请假单,然后点击提交……
- 后台java处理:由于我没有用到hibernate,所以都是jdbc操作数据库(真心后悔没用hibernate),总的思路如下:
- Struct2接收完请假信息后,调用service层我写好的函数(jbpm相关操作)
-
punlic ProcessInstance createProcessInstance(String actorId);请看注释:
- /**
- * 本函数负责根据流程名("leaveProcess")创建一个流程实例
- * 将创建者的名字放进 variables对象中,取名为"name"
- * 返回流程实例对象pi
- */
- @Override
- public ProcessInstance createProcessInstance(String actorId) {
- deploy();
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("name", actorId);
- ProcessInstance pi = processEngine.getExecutionService()
- .startProcessInstanceByKey("leaveProcess", variables);
- System.out.println("id :" + pi.getId() + ", processDefination id: "
- + pi.getProcessDefinitionId());
- return pi;
- }
- 将流程实例提交,持久化到数据库中
-
public void submitApplication(String actorId, float days,ProcessInstance pi, int id)
- /**
- * submitApplication 2012-7-9
- */
- @Override
- public void submitApplication(String actorId, float days,
- ProcessInstance pi, int id) {
- String taskId = processEngine.getTaskService().createTaskQuery()
- .processInstanceId(pi.getId()).uniqueResult().getId();
- // 根据流程实例ID寻找TASKID
- LeaveDao dao = new LeaveDaoImpl();// 寻找上级
- Leaves leaves = null;
- try {
- List<Leaves> all = dao.queryParentById(id, 1);
- for (int i = 0; i < all.size(); i++) {
- leaves = all.get(i);
- }
- } catch (Exception e) {
- }
- //System.out.println("TaskId" + taskId);
- Task tasks = processEngine.getTaskService().getTask(taskId);//根据taskId寻找task
- String executionId = tasks.getExecutionId();//根据task寻找executionId(跟processId好像没区别)
- processEngine.getExecutionService().setVariable(executionId,
- "parentId",new String(leaves.getL_emp_id()+""));//给这个流程添加领导的id
- processEngine.getExecutionService().setVariable(executionId, "days",//给这个流程添加时间
- days);
- processEngine.getTaskService().completeTask(taskId);//提交任务
- }
- 最后,我们需要将流程实例跟你的请假单绑定,这样你的请假单就会跟着流程一起流转啦!!所以,在数据库设计上我们要在Leaves表中增加一个外键l_leave_processId varchar类型,因为processInstranceId是String类型的
- 我的Action(主要负责整合这几部分,我设计的比较烂)
- public String apply() throws Exception {
- session = ActionContext.getContext().getSession();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
- String lf = leaveInfo.getFromtime();
- String lt = leaveInfo.getTotime();
- Date df = sdf.parse(lf);
- Date dt = sdf.parse(lt);
- Leaves l = new Leaves();
- l.setL_emp_id(leaveInfo.getE_emp_id());
- l.setL_leave_depart_id(leaveInfo.getD_depart_id());
- l.setL_leave_from(df);
- l.setL_leave_to(dt);
- l.setL_leave_type_id(leaveInfo.getLeaveTypeId());
- l.setL_leave_reason(leaveInfo.getReason());// 乱码
- LeaveDao dao = new LeaveDaoImpl();
- // LeaveWorkFlow lwf = new LeaveWorkFlow();
- // // 开始流程
- float days = ((LeaveDaoImpl) dao).getDays(df, dt);
- // List<Leaves> approvalList
- // =lwf.submitApplication(leaveInfo.getE_emp_id(), days, 9);
- // session.put("aprovalList", approvalList);
- EmployeeDao employeeDao = new EmployeeDaoImpl();
- Employee e = employeeDao.findEmployeeById(leaveInfo.getE_emp_id());
- // 如果days 大于3天,需要多executive审批
- JbpmFecade jbpmFecade = new JbpmFecadeImpl();
- ProcessInstance pi = jbpmFecade.createProcessInstance(e.getE_name_cn());
- jbpmFecade.submitApplication(e.getE_name_cn(), days, pi,
- leaveInfo.getE_emp_id());// 提交公文
- // 插入数据库
- l.setL_leave_processId(pi.getProcessInstance().getId());
- dao.insertLeavesApplication(l);
- all = dao.queryAllLeavesByPV(leaveInfo.getE_emp_id());
- return "leaveApplyList";
- }
到此,创建流程实例的部分已经结束,下面是领导审批部分
二、领导审批
- 界面部分概述:领导登录后查看任务列表,之后看请假的详细信息,进行审批
- 后台java处理:我们需要几个方法,(1)查询自己任务列表的方法 (2)审批的方法
- 查询任务列表
-
根据领导的名字查询自己的任务列表
- public ArrayList<Leaves> findTaskViewList(String actorId) throws Exception {
- // 1 tasks
- List<Task> tasks = processEngine.getTaskService()//
- .findPersonalTasks(actorId);
- // 2 流程 变量 封装到tasklist
- Leaves leave = null;
- ArrayList<Leaves> list = new ArrayList<Leaves>();
- for (Task task : tasks) {
- String processInstanceId = processEngine.getTaskService()//
- .getTask(task.getId())//
- .getExecutionId();
- leave = new Leaves();
- LeaveDao dao = new LeaveDaoImpl();
- leave = dao.findLeaveByProcessId(processInstanceId);
- list.add(leave);
- }
- return list;
- }
- 领导审批
- public void approveByManager(String actorId, boolean status, int did,int id);
- /**
- * approveByManager 2012-7-9
- */
- @Override
- public void approveByManager(String actorId, boolean status, int did,int id) {
- LeaveDao dao = new LeaveDaoImpl();
- /**
- * 查找上级
- */
- Leaves l = null;
- try {
- List<Leaves> all = dao.queryParentById(id, 1);
- for (int i = 0; i < all.size(); i++) {
- l = all.get(i);
- }
- } catch (Exception e) {
- }
- List<Task> tasks = processEngine.getTaskService()//根据自己的名字查询任务列表
- .findPersonalTasks(actorId);
- Leaves leaves = null;
- for (Task t : tasks) {//循环判断任务列表
- System.out.println(" id " + t.getId() + " ,name " + t.getName() + // 得到任务名称
- " assignee " + t.getAssignee() + // 得到 任务的代理人
- " , createTime " + t.getCreateTime()//
- );
- // 2 处理task
- String processInstanceId = processEngine.getTaskService()//
- .getTask(t.getId())//
- .getExecutionId();
- // 根据流程实例id 获取公文id
- try {
- leaves = dao.findLeaveByProcessId(processInstanceId);
- } catch (Exception e) {
- // TODO: handle exception
- }
- if (did == leaves.getL_leave_id()) {//比较所传人的请假单id和公文id是否相等
- if (status) {//领导审批通过状态(true or false)
- processEngine.getExecutionService().setVariable(processInstanceId,
- "exeId", new String(l.getL_emp_id()+""));//将自己领导的id存入exeId中
- processEngine.getTaskService()//
- .completeTask(t.getId(), "ManagerApproved");
- } else {
- processEngine.getTaskService()//
- .completeTask(t.getId(), "ManagerDisApproved");
- }
- break;
- }
- }
- }
解释一下:首先我们接收几个参数:领导的名字>>>actorId、请假单的ID>>>did、领导审批的状态变量>>>status、领导自己的Id>>>id用途:
actorId 负责查询任务列表tasks,所以只会查到自己下属提交的
status 的值为true or false ,这样任务会提交到不同的地方
did 上层模块传来公文id(请假单的id,很好获得)当循环遍历任务列表时,我们可以通过task t获取流程实例t.getId(),根据流程实例id获取那个请假单的id,大体过程如下:id>>>> processInstanceId>>>>l_leave_id,然后我们就和这个did进行比较就好啦,如果相等则证明这个是当前要审批的请假单啦,好乱!!
id 上层模块传来的领导自己的id,用来查找自己上级(因为请假天数大于3天后会增加一个高层来审批,也就是你的上级)
高层审批和hr确认实际上跟这部分类似,这里就不再多写了
相关推荐
【jbpm4.4+s2sh请假流程例子】是一个典型的结合了jbpm4.4工作流引擎和Struts2、Spring、Hibernate(S2SH)框架的实战项目,旨在演示如何在企业级应用中实现一个完整的请假流程。在这个例子中,jbpm4.4作为流程管理的...
jbpm4.4整合s2sh 请假流程例子,项目很好,是学习JBPM的很好的例子,已经测试过,很好用,可以下载后好好研究一下
利用JBPM4.4编写的完整请假流程,涉及申请人填写,经理审批以及决策节点后的老板审批,加入SSH2与JBPM4.4的jar包过后部署好就可以用,只用修改applicationContext.xml中的数据库相关信息即可!
【jbpm4.4-请假流程】是一个基于Java开发的流程引擎示例,主要用于演示如何在企业级应用中实现请假流程。jbPM是Java Business Process Management的缩写,它是一个开源的工作流和业务流程管理系统,提供了对BPMN 2.0...
JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子。带有文档教程和所有源码+JAR包。在网上找了半天jbpm6\jbpm7的资料,都很少。所以 环境:Myeclipse2015 JDK1.7 mysql 5.0 Struts2+Spring3.1 1...
综上,"jbpm4.4简单请假流程"项目展示了如何利用jbpm4.4的特性设计和实现一个典型的业务流程,涵盖了流程定义、任务处理、决策逻辑以及系统集成等方面,为企业级流程管理提供了实用范例。通过对这个项目的理解和实践...
使用JBPM4.4,开发者可以设计复杂的审批流程,例如请假申请、报销审批等,通过图形化的流程设计器(Business Process Designer)创建流程模型。流程中的每个步骤可以关联到一个任务,任务可以分配给不同的角色或用户...
【jbpm4.4请假例子】是一个基于jbpm4.4流程引擎的示例项目,它展示了一个在Eclipse环境中开发的请假流程。jbPM(Java Business Process Management)是一个开源的工作流和业务流程管理框架,它允许开发者设计、执行...
自从前些日子发布了如何整合JBPM4.4+ssh2后,有些朋友问我有没有一个完整一点的实例,我看过贩卖你的jbpm的教程,我就参考那个请假的实例把它改装成ssh2版的吧。顺便也加入了模拟不同的角色登陆后能接到不同的待办...
在【jbpm4.4经典请假流程】中,我们可以看到JBPM如何处理日常的业务流程,如员工请假申请。这个流程可能包括请假申请的提交、审批、以及不同角色之间的交互。JBPM4.4通过图形化的流程设计工具(BPMN 2.0模型),使得...
**jbpm4.4入门编程小例子** ...通过学习这个入门编程小例子,你可以了解如何使用jbpm4.4定义流程、启动流程实例、执行任务以及监控流程状态。这将为你在实际项目中应用工作流管理打下坚实的基础。
总结起来,这个项目是一个很好的学习资源,让初学者了解如何在Java EE环境中使用jbpm4.4构建和部署一个简单的请假流程应用。通过实际操作,可以掌握流程建模、工作流引擎使用、Web应用开发以及服务器配置等一系列...
【JBPM4.4+MySQL完整请假实例】是基于JBPM工作流引擎和MySQL数据库构建的一个实际应用案例,主要用于演示如何在企业环境中实现一个简单的请假流程。JBPM(Java Business Process Management)是一款开源的工作流管理...
【jbpm4.4+SSH2 完整请假流程】是一个结合了业务流程管理(BPM)工具jbpm4.4与Spring、Struts、Hibernate...总之,"jbpm4.4+SSH2 完整请假流程"是一个综合性的学习案例,涵盖了BPM与企业级Java开发的多个重要方面。
**jBPM4.4请假流程JavaWeb完全版** jBPM(Java Business Process Management)是一个开源的工作流和业务流程管理框架,它允许开发者在Java应用程序中实现复杂的业务流程。jBPM4.4是该框架的一个较早版本,但仍然...
jbpm4.4实例是一个基于Java的企业工作流管理系统示例,它主要展示了如何利用jbpm框架来实现一个具体的业务流程,如本例中的请假流程。jbPM(Business Process Management)是一个开源的工作流管理系统,它提供了对...
在本文中,我们将探讨如何使用myeclipse7.5来搭建基于JBPM4.4的开发环境,并通过一个实际的请假流程实例深入理解其工作原理。 **一、JBPM概述** JBPM的核心功能包括: 1. **流程建模**:使用BPMN(Business ...
通过学习和研究这个【jbpm4.4 经典请假源码】,开发者不仅可以掌握jbpm工作流引擎的使用,还能了解到如何将工作流技术应用于实际的业务场景,如请假审批流程,这有助于提升开发人员在业务流程自动化领域的技能和经验...
总结来说,JBPM4.4+Hibernate3.5.4+Spring3.0.4+Struts2.1.8的整合是一项涉及多个层面的工作,需要对每个组件有深入的理解,并能熟练配置和使用。通过这个整合,开发者能够构建出强大的业务流程管理系统,同时利用...
整合JBPM4.4和SSH2的完整请假流程,部署项目加入SSH2和JBPM4.4相应的jar包即可运行,只用修改applicatinContext.xml配置文档里的数据库相关信息即可!(给出同项目的jar包下载地址:...