jbpm4.4学习总结(四)请假流程

JBPM学习(四):执行流程实例 最近发现这篇文章挺多人看的,也挺多人有疑问,我很想帮你们解答,但是很无奈,这篇文章只是我当时在自学时看的一个教程的记录,当时对JBPM也没有深入去学习,并且到现在也已经快4年了,这期间我都没用过JBPM,因此JBPM的东西我也忘得差不多了。庆幸的是我把当时看的教程保存了下来,因此如果对此文章有疑问的可以直接看我下面链接的教程。另外,通过我分享的视频大家也能看到这是一个OA教程,我当时刚入门自学Ja... 阅读详情

一、创建流程实例

  • 界面部分概述:员工登录后填写请假单,然后点击提交……
  • 后台java处理:由于我没有用到hibernate,所以都是jdbc操作数据库(真心后悔没用hibernate),总的思路如下:
  1. Struct2接收完请假信息后,调用service层我写好的函数(jbpm相关操作)
  2.  punlic ProcessInstance createProcessInstance(String actorId);请看注释:
    1. /**
    2. * 本函数负责根据流程名("leaveProcess")创建一个流程实例
    3. * 将创建者的名字放进 variables对象中,取名为"name"
    4. * 返回流程实例对象pi
    5. */
    6. @Override 
    7.     public ProcessInstance createProcessInstance(String actorId) {  
    8.         deploy();  
    9.         Map<String, Object> variables = new HashMap<String, Object>();  
    10.         variables.put("name", actorId);  
    11.         ProcessInstance pi = processEngine.getExecutionService()  
    12.                 .startProcessInstanceByKey("leaveProcess", variables);  
    13.         System.out.println("id :" + pi.getId() + ", processDefination id:  " 
    14.                 + pi.getProcessDefinitionId());  
    15.         return pi;  
    16.     } 
  3. 将流程实例提交,持久化到数据库中
  4. public void submitApplication(String actorId, float days,ProcessInstance pi, int id)
    1. /**  
    2.      * submitApplication 2012-7-9  
    3.      */ 
    4.     @Override 
    5.     public void submitApplication(String actorId, float days,  
    6.             ProcessInstance pi, int id) {  
    7.         String taskId = processEngine.getTaskService().createTaskQuery()  
    8.                 .processInstanceId(pi.getId()).uniqueResult().getId();  
    9.         // 根据流程实例ID寻找TASKID  
    10.         LeaveDao dao = new LeaveDaoImpl();// 寻找上级  
    11.         Leaves leaves = null;  
    12.         try {  
    13.             List<Leaves> all = dao.queryParentById(id, 1);  
    14.             for (int i = 0; i < all.size(); i++) {  
    15.                 leaves = all.get(i);  
    16.             }  
    17.         } catch (Exception e) {  
    18.         }  
    19.         //System.out.println("TaskId" + taskId);  
    20.         Task tasks = processEngine.getTaskService().getTask(taskId);//根据taskId寻找task  
    21.         String executionId = tasks.getExecutionId();//根据task寻找executionId(跟processId好像没区别)  
    22.         processEngine.getExecutionService().setVariable(executionId,  
    23.                 "parentId",new String(leaves.getL_emp_id()+""));//给这个流程添加领导的id  
    24.         processEngine.getExecutionService().setVariable(executionId, "days",//给这个流程添加时间  
    25.                 days);  
    26.         processEngine.getTaskService().completeTask(taskId);//提交任务  
    27.     } 
  5. 最后,我们需要将流程实例跟你的请假单绑定,这样你的请假单就会跟着流程一起流转啦!!所以,在数据库设计上我们要在Leaves表中增加一个外键l_leave_processId varchar类型,因为processInstranceId是String类型的
  6. 我的Action(主要负责整合这几部分,我设计的比较烂)
  1. public String apply() throws Exception {  
  2.         session = ActionContext.getContext().getSession();  
  3.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");  
  4.         String lf = leaveInfo.getFromtime();  
  5.         String lt = leaveInfo.getTotime();  
  6.         Date df = sdf.parse(lf);  
  7.         Date dt = sdf.parse(lt);  
  8.         Leaves l = new Leaves();  
  9.         l.setL_emp_id(leaveInfo.getE_emp_id());  
  10.         l.setL_leave_depart_id(leaveInfo.getD_depart_id());  
  11.         l.setL_leave_from(df);  
  12.         l.setL_leave_to(dt);  
  13.         l.setL_leave_type_id(leaveInfo.getLeaveTypeId());  
  14.         l.setL_leave_reason(leaveInfo.getReason());// 乱码  
  15.         LeaveDao dao = new LeaveDaoImpl();  
  16.  
  17.         // LeaveWorkFlow lwf = new LeaveWorkFlow();  
  18.         // // 开始流程  
  19.         float days = ((LeaveDaoImpl) dao).getDays(df, dt);  
  20.         // List<Leaves> approvalList  
  21.         // =lwf.submitApplication(leaveInfo.getE_emp_id(), days, 9);  
  22.         // session.put("aprovalList", approvalList);  
  23.         EmployeeDao employeeDao = new EmployeeDaoImpl();  
  24.         Employee e = employeeDao.findEmployeeById(leaveInfo.getE_emp_id());  
  25.         // 如果days 大于3天,需要多executive审批  
  26.         JbpmFecade jbpmFecade = new JbpmFecadeImpl();  
  27.         ProcessInstance pi = jbpmFecade.createProcessInstance(e.getE_name_cn());  
  28.         jbpmFecade.submitApplication(e.getE_name_cn(), days, pi,  
  29.                 leaveInfo.getE_emp_id());// 提交公文  
  30.         // 插入数据库  
  31.         l.setL_leave_processId(pi.getProcessInstance().getId());  
  32.         dao.insertLeavesApplication(l);  
  33.         all = dao.queryAllLeavesByPV(leaveInfo.getE_emp_id());  
  34.         return "leaveApplyList";  
  35.     } 

 到此,创建流程实例的部分已经结束,下面是领导审批部分

二、领导审批

  • 界面部分概述:领导登录后查看任务列表,之后看请假的详细信息,进行审批
  • 后台java处理:我们需要几个方法,(1)查询自己任务列表的方法 (2)审批的方法
  1. 查询任务列表
  2. 根据领导的名字查询自己的任务列表
    1. public ArrayList<Leaves> findTaskViewList(String actorId) throws Exception {  
    2.         // 1 tasks  
    3.         List<Task> tasks = processEngine.getTaskService()//  
    4.                 .findPersonalTasks(actorId);  
    5.         // 2  流程 变量 封装到tasklist  
    6.         Leaves leave = null;  
    7.         ArrayList<Leaves> list = new ArrayList<Leaves>();  
    8.         for (Task task : tasks) {  
    9.             String processInstanceId = processEngine.getTaskService()//  
    10.                     .getTask(task.getId())//  
    11.                     .getExecutionId();  
    12.             leave = new Leaves();  
    13.             LeaveDao dao = new LeaveDaoImpl();  
    14.             leave = dao.findLeaveByProcessId(processInstanceId);  
    15.             list.add(leave);  
    16.         }  
    17.         return list;  
    18.     } 
  3. 领导审批
  4.  public void approveByManager(String actorId, boolean status, int did,int id);
    1. /**  
    2.      * approveByManager 2012-7-9  
    3.      */ 
    4.     @Override 
    5.     public void approveByManager(String actorId, boolean status, int did,int id) {  
    6.         LeaveDao dao = new LeaveDaoImpl();  
    7.         /**  
    8.          * 查找上级  
    9.          */ 
    10.         Leaves l = null;  
    11.         try {  
    12.             List<Leaves> all = dao.queryParentById(id, 1);  
    13.             for (int i = 0; i < all.size(); i++) {  
    14.                 l = all.get(i);  
    15.             }  
    16.         } catch (Exception e) {  
    17.         }  
    18.         List<Task> tasks = processEngine.getTaskService()//根据自己的名字查询任务列表       
    19.                 .findPersonalTasks(actorId);  
    20.         Leaves leaves = null;  
    21.         for (Task t : tasks) {//循环判断任务列表  
    22.             System.out.println(" id " + t.getId() + " ,name " + t.getName() + // 得到任务名称  
    23.                     " assignee " + t.getAssignee() + // 得到 任务的代理人  
    24.                     " , createTime " + t.getCreateTime()//  
    25.             );  
    26.             // 2 处理task  
    27.             String processInstanceId = processEngine.getTaskService()//  
    28.                     .getTask(t.getId())//  
    29.                     .getExecutionId();  
    30.             // 根据流程实例id 获取公文id  
    31.             try {  
    32.                 leaves = dao.findLeaveByProcessId(processInstanceId);  
    33.             } catch (Exception e) {  
    34.                 // TODO: handle exception  
    35.             }  
    36.  
    37.             if (did == leaves.getL_leave_id()) {//比较所传人的请假单id和公文id是否相等  
    38.                 if (status) {//领导审批通过状态(true or false)  
    39.                     processEngine.getExecutionService().setVariable(processInstanceId,  
    40.                             "exeId", new String(l.getL_emp_id()+""));//将自己领导的id存入exeId中  
    41.                     processEngine.getTaskService()//  
    42.                             .completeTask(t.getId(), "ManagerApproved");  
    43.                       
    44.                 } else {  
    45.                     processEngine.getTaskService()//  
    46.                             .completeTask(t.getId(), "ManagerDisApproved");  
    47.                 }  
    48.                 break;  
    49.             }  
    50.         }  
    51.     } 


    解释一下:首先我们接收几个参数:领导的名字>>>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业务与流程的整合 在这次学习工作流的过程中,工作流如何与业务结合有多种方式,虽然很简单,但是每次都要再次梳理几分钟,这次拿出来整理一下,将它真正成为自己的知识。   从启动流程开始说:   申请页面:选择所用流程(即画的流程图的id) 阅读详情

相关推荐

【升级篇】JBPM4.4过渡到Activiti

简单介绍一下Activiti背景   Activiti的出现:   Activiti的创始人Tom Baeyens是JBPM的创始人,由于与合作伙伴在JBPM的未来架构上产生意见分歧,Tom Baeyens在2010年离开了JBoss并加入Alfresco公司。Tom Baeyens的离开使得JBPM5完全放弃了JBPM4的架构,基于Drools Flow重新开发。而在20

何静媛 6430

C++实现PBR渲染管线:从数据流设计到性能优化的核心要点

Physically Based Rendering(PBR)是一种基于物理光学原理的渲染技术,它通过模拟光线与材质的真实交互,生成高度逼真的图像。其核心在于Cook-Torrance等BRDF模型,这些模型定义了光如何在微观表面散射。从工程实践角度看,PBR的价值在于提供了一套标准化的材质参数体系(如金属度、粗糙度),使得资产在不同光照环境下能保持视觉一致性。在游戏开发、影视制作和实时可视化等应用场景中,PBR已成为高质量渲染的基石。要将理论转化为高效代码,关键在于C++层面对渲染管线的掌控。这涉及将材质

weixin_33811539的博客 437

jbpm4.4实现企业请假流程详细教程

在现代企业中,工作流管理是确保业务流程高效、有序执行的重要手段。流程定义作为工作流管理的核心,其精确性和适用性直接关系到整个业务流程的执行效果。工作流实例则是流程定义在实际业务中的具体体现,它是业务执行过程中各个任务和节点的实际运作方式。工作流实例的创建通常涉及到流程设计,这包括对流程的步骤、参与人员、决策路径等进行明确规划。流程设计完成后,通过工作流引擎来实现流程定义的自动化执行。一个完整的流程实例涉及以下关键元素:开始节点:流程实例的启动点,一旦触发,流程即开始执行。

weixin_35578748的博客 716

JBPM(二)基本使用

test.png test.jpdl.xml [html] view plain copy xml version="1.0" encoding="UTF-8"?>      process name="test" xmlns="http://jbpm.org/4.4/jpdl">      start g="247,9,

快雪时晴天的专栏 730

jbpm实现请假流程管理:示例与实践

jbpm项目最初源于2004年,由Tom Baeyens等人发起,最初是作为Jboss应用服务器的一个业务流程管理(BPM)组件,那时称为jBPM。它的第一个版本是基于Drools工作流引擎构建的,主要用于Java EE环境。随着时间的发展,jBPM逐渐演变为一个独立的、可扩展的开源BPM平台,不再局限于Java EE环境,并且支持轻量级的运行时环境。jBPM的版本演进可以大致分为以下几个阶段:jBPM3:这一版本主要集成在JBoss中间件中,支持业务流程和规则引擎的集成。

weixin_42453228的博客 1039

一个Jbpm员工请假流程的实例

1. 概述 此实例包括的是一个员工请假审批的流程实例,和流程相关的代码以及相应的测试代码。此流程在Eclipse3.1.2 ,JBoss-IDE 1.6环境下测试通过。 说明,这篇文章说使用的流程实例是,学习《一个JBPM工作流管理示例》文章中的流程而来。原文中的流程实例不是jbpm3.1版本,不能适用于jbpm3.1。本人将其改写,并加入自己的设计和实现。 2. 流程说明 假设应用背景如下: 在某一公司中,部门员工要休假的话需要部门主管的批准。如果休假天数大于10天的话,在部门主管的同意后,还必须老板批准。如果是部门主管要休假只要老板批准即可。在休假被批准之前,申请人可以撤销休假申请。 每次休假申请结束之后,不管通过未通过或是否取消,都必须记录下来。主管在批复申请之后,系统要将批复结果Email给申请人。对于大于10天的申请,如果部门主管已批准同意而上级主管还未批准,这时申请人撤销申请后,系统应发Email通知部门主管申请已撤销。

JBPM4.4 入门 简单的请假流程

最近学习了一下jbpm工作流,感觉网上好多例子都不是很全,所以就做了一个完整的流程,使用jsp和servlet   1 . jbpm的配置文件 (1) jbpm.cg.xml  ,该文件可以从下载的jbpm4.4.rar 的example例子里面拷贝到。               2. jbpm.hibernate.cfg.xml 主要是hibern

6261

JBPM4.4工作流引擎实例demo

本示例是jBPM4工作流示例jbpmDemo,详细演示了jBPM4工作流引擎的使用,里面包含JBPM的课件,详解,非常实用, 希望您喜欢。

JBPM 7.17 学习笔记(9)用spring boot+jbpm 实现请假流程

本文不使用 jBPM 的业务中心和执行服务器,只使用核心 API。 新建 spring-boot-web 项目 pom.xml 文件中添加如下依赖: <repositories> <repository> <id>jboss-public-repository-group</id> &...

kmyhy的专栏 1万+

jbpm4.4 简单请假流程

采用jbpm4.4实现了简单的请假流程。

JBPM4.4视频教程(22集附源码)

资源名称:JBPM4.4视频教程(22集附源码)资源目录:【】(01)jbpm4.4简介【】(02)JBPM4.4开发环境搭建【】(03)jbpm4.4环境搭建续【】(04)jbpm4.4配置文件和开发前准备【】(05)jbpm4.4部署流程发起流程实例【】(06)jbpm4.4完成任务查看任务当前节点【】(07)jbpm4.4 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

jbpm学习笔记(四)--请假流程的设计(1)

在学习了jbpm流程的基本流程定义部署,流程实例发起,管理等基本操作后,我们以一个请假流程为例来进一步学习jbpm。 我们首先设计一个流程定义,然后将所设计的流程定义集成到web工程中,然后实现请假流程定义的发布,查看和删除操作。 闲话少叙,具体的操作如下: 1、新建web工程 在eclipse中file->new->other然后选择Dynamic web project新建web工程。

loveRooney的专栏 2511

FPGA实现Gardner环定时同步:Verilog代码与Testbench实战解析

本文深入解析了在FPGA上实现Gardner环定时同步的完整过程,详细阐述了其非数据辅助的定时误差检测原理。通过Verilog代码实战,展示了内插滤波器、定时误差检测器、环路滤波器和数控振荡器等核心模块的设计,并提供了完整的Testbench验证方法,帮助开发者解决数字通信系统中的时钟同步难题。

gpt4scribbler的博客 578

JBPM学习(4):设计请假流程

这一节的任务是学习如何设计一个请假流程,并将流程引擎放到web项目中集成,使用JSP达到在网页上管理流程定义的目的。 整体分为以下两个部分: 设计请假流程集成web工程 设计请假流程的主要是指设计流程定义,它分为以下几步: 1、创建动态web项目 2、在/src文件夹下创建JBPM流程定义 3、流程定义设计如图 启动节点——填写申请单——经理审批——决策节点(如果

ミ安之偌素 1963

【CTFSHOW】web入门 黑盒测试

文章目录写在前面web380web381web382web383web384web385web386web387web388web389web390web391web392web393web394web395参考资料 写在前面 一直没搞过渗透,先学学黑盒测试吧 web380 进入题目发现是一个关于灯泡的悲伤故事,点进去,看到跳转到page_1.php页面。 我们访问page.php试试: 发现报错:$id.php,可以猜想需要传名称为id的参数,来访问id.php。我们访问page.php?id=1试试

7ruth0hn的博客 1898

【卫星语音通信】神经网络语音编解码算法:AudioDec

最新研究表明,通过深度学习模型对语音信号进行智能压缩与重建,可在12 kbps码率下实现48 kHz采样率的高保真语音还原,其主观音质评分(MOS)可达3.9分(满分4.27分),远超传统参数编码技术。这意味着未来卫星电话的通话质量有望达到CD级水准,而蜂窝网络的语音业务带宽需求可降低60%以上,为蜂窝和卫星网络中的大规模物联网语音交互铺平道路。它的诞生为神经音频编解码技术带来了一次重要升级,有助于让未来实时语音交互更流畅、更清晰,也让我们进一步体验到人工智能与音频信号处理结合所带来的创新可能性。

u011376987的博客 1473

《partner4java 讲述jBPM4》之第一步:jBPM4概念 & helloworld

(《partner4java 讲述jBPM4》仅为技术储备 -- 本人并没有jBPM4实战方面丰富的经验;学习本内容最好有Hibernate的基础) 代码下载地址:文章中贴出的代码可能有所改动,以下载地址为准http://download.csdn.net/detail/partner4java/4998228 工作流: 工作流就是一系列相互衔接、自动进行的业务活动或任务。我们可以将整个业务

java相关技术(partner4java专栏)希望对您的学习有所帮助 3168

工业相机——靶面尺寸、像元尺寸、分辨率 、传感器尺寸

由Sensor对角线长度表示,单位英寸,这里的1英寸=16mm。——靶面尺寸为宽12.7mm*高9.6mm,对角线16mm。——靶面尺寸为宽8.8mm*高6.6mm,对角线11mm。——靶面尺寸为宽7.2mm*高5.4mm,对角线9mm。——靶面尺寸为宽6.4mm*高4.8mm,对角线8mm。——靶面尺寸为宽4.8mm*高3.6mm,对角线6mm。——靶面尺寸为宽3.2mm*高2.4mm,对角线4mm。——靶面尺寸为宽14*高10.5mm,对角线17mm。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 9608

jbpm学习笔记(五)--请假流程的设计(2)

在上一篇文章中我们已经基本上实现了一个请假流程定义的发布和删除操作,并且我们已经将jbpm4的流程定义集成到了web服务中。下面我们将要做如下几件事: 1)在web应用中实现请假流程的发起; 2)针对不同用户的登录,我们显示不同的代办任务以实现用户完成自己的task。 (再次声明:这只是我的个人学习笔记,主要是通过看了family168网--临远的视频教程,感谢原作。) 具体操作如下:

loveRooney的专栏 3652

HDR 成像技术学习(三)—— LOFIC

LOFIC(Lateral Overflow Integration Capacitor,横向溢出集合电容)介绍,从像素结构到工作时序。

沧海一升的博客 9729

第44节:cesium 大雾效果(cesium自带)(含源码+视频)

cesium 大雾效果(cesium自带)

qq_29384639的博客 1702

jbpm学习笔记(六)--请假流程的设计(3)

经过上一节的学习,我们已经将真整个请假流程的部署,发起以及执行分配都集成到web应用中,这里我们要做的新工作是为我们之前发布的请假流程实现流程图的跟踪。 1、流程定义图片生成 流程定义的图片生成很简单,这个工作jbpm4已经帮我们完成了,所以我们只需要将编辑好的流程定义保存即可,如下图6-1所示: 图6-1 自动生成流程定义png图片 2、更改流程定义发布方式 为了要在web应用

loveRooney的专栏 2346

把 OData V4 服务真正发布出去:事务码 /IWFND/V4_ADMIN 在 SAP S/4HANA On-Premise 里的定位与用法

本文介绍了SAP S/4HANA中的事务码/IWFND/V4_ADMIN,这是SAP Gateway管理OData V4服务的关键工具。该事务码主要负责将后端注册的OData V4服务以服务组形式发布到前端,并维护系统别名路由、测试入口和日志跳转。与OData V2不同,V4采用服务组概念以支持跨服务导航,类似商场统一管理多个专柜。文章还通过实际案例说明,未发布服务组会导致BAS等工具无法发现OData V4服务,并提供了验证服务组状态的访问路径和ABAP示例代码。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 208
上一篇: jbpm4.4学习总结(三)常用接口使用说明
下一篇: JavaScript世界的一等公民 - 函数
dw_java08
博客等级 码龄15年 122粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值