jbpm4.4学习总结(三)常用接口使用说明

JBPM学习(六):详解流程图 其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。Kafka入门为什么选择KafkaKafka的安装、管理和配置。 阅读详情

在jbpm4.4开发过程中,我们需要使用其提供的接口来完成任务,为什么我们要心甘情愿的被jbpm绑架呢?主要是因为它简单呗……

1.AssignmentHandler

AssignmentHandler是jbpm为我们提供的一个绑定用户,分配任务的接口,我们可以通过实现这个接口来指定Task 的执行者,必须配合jpdl.xml下的标签和程序来使用,web环境下一般都是session中的用户。

举个例子:

一个员工提交一个请假申请,如果我们给这个Task添加一个AssignmentHandler,把员工的姓名绑定进去,那么jbpm就会知道,这个流程是这个员工创建的……

 按正常逻辑请假单已经提交到了领导那,我们可以通过再实现一个AssignmentHandler接口,通过AssignmentHandler动态的对流程实例定义Actor,将领导设置成task的执行者。这样做的好处就是灵活……

当领导登录时,session中是领导的姓名,领导查自己的任务列表就会看到那份员工提交的请假单了。

  • jpdl.xml的一部分(主要是<assignment-handler > 和<decision >两个标签)
 
  1.    <task assignee="${name}" g="235,146,92,52" name="LeaveApplication"> 
  2.       <assignment-handler class="com.mtf.jbpm.handler.NewApplicationAssignmentHandler"/> //创建请假单前绑定用户,员工    
  3.       <transition g="-113,-17" name="SubmitApply" to="ManagerApprove"/> 
  4.    </task> 
  5.    <task assignee="${name}" g="244,235,92,52" name="ManagerApprove"> 
  6.     <assignment-handler class="com.mtf.jbpm.handler.ManagerApproveAssignmentHandler"/>//当请假单流转到manager那时触发,领导     
  7.       <transition g="-46,-23" name="ManagerApproved" to="DaysCheck"/> 
  8.       <transition g="-15,-35" name="ManagerDisApproved" to="end"/> 
  9.    </task> 
  10.     <decision g="67,240,48,48" name="DaysCheck"> 
  11.    <handler class="com.mtf.jbpm.handler.DaysCheckHandler" />   //分支流程
  12.       <transition g="-20,-2" name="LessThan3Days" to="HrMakeSure"/> 
  13.       <transition g="-49,-11" name="MoreThan3Days" to="ExecutiveApprove"/> 
  14.    </decision> 
  15.  
  • 申请请假单的AssignmentHandler
 
  1. public class NewApplicationAssignmentHandler implements AssignmentHandler{  
  2.  
  3.     @Override 
  4.     public void assign(Assignable assignable, OpenExecution execution)  
  5.             throws Exception {  
  6.         System.out.println("pxj 创建一leave");  
  7.         String name =(String) execution.getVariable("name");  
  8.         System.out.println(name);  
  9.         assignable.setAssignee(name);    
  10.     }  
  11. } 
  • 领导的AssignmentHandler
 
  1. public class ManagerApproveAssignmentHandler implements AssignmentHandler{  
  2.  
  3.     @Override 
  4.     public void assign(Assignable assignable, OpenExecution execution)  
  5.             throws Exception {  
  6.         System.out.println("经理 开始审批");  
  7.         String id = (String) execution.getVariable("parentId");  
  8.         int managerId = Integer.parseInt(id);  
  9.         EmployeeDao employeeDao = new EmployeeDaoImpl();  
  10.         Employee  e= employeeDao.findEmployeeById(managerId);  
  11.         assignable.setAssignee(e.getE_name_cn());  
  12.     }  
  13. } 

其中parentId是请假单提交的时候设定的,解释一下:员工提交请假单当然是提交到自己领导那了,于是我在提交请假单的方法中查找了一下自己领导的id,存在这个parentId中,到这里面在寻找这个人的姓名(领导的名字)通过assignable.setAssignee(e.getE_name_cn());  将这个Task的执行者设置成领导……于是乎当领导查自己的任务列表时,就能查到自己下属提交的请假单了

  • 这个方法就是提交请假单的方法,应该写在前面才对,思路有些混乱……
 
  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.     // 绑定流程  
  10.     // 寻找上级  
  11.     LeaveDao dao = new LeaveDaoImpl();  
  12.     Leaves leaves = null;  
  13.     try {  
  14.         List<Leaves> all = dao.queryParentById(id, 1);  
  15.         for (int i = 0; i < all.size(); i++) {  
  16.             leaves = all.get(i);  
  17.         }  
  18.     } catch (Exception e) {  
  19.     }  
  20.     System.out.println("TaskId" + taskId);  
  21.     Task tasks = processEngine.getTaskService().getTask(taskId);  
  22.     String executionId = tasks.getExecutionId();  
  23.     processEngine.getExecutionService().setVariable(executionId,  
  24.             "parentId",new String(leaves.getL_emp_id()+""));  
  25.     processEngine.getExecutionService().setVariable(executionId, "days",  
  26.             days);  
  27.     processEngine.getTaskService().completeTask(taskId);  
  28. } 

主要接收:流程实例id,创建人姓名,请假人id,本次总结我只想把jbpm的接口总结一下,关于流程的部分请看下部分。

  • 实际上任务的分配方式有很多种
 
  1. 任务的分类与分配方式  
  2.         任务的分类:  
  3.             个人任务  
  4.                 方式一:指定assignee属性  
  5.                     可以指定为具体的某个String(具体某人);  
  6.                     也可以指定一个流程变量,会使用计算出的结果(结果要是String型)表示办理人。  
  7.                 方式二:  
  8.                     AssignmentHandler中  
  9.                     assignable.setAssignee(userId);  
  10.                 方式三:  
  11.                     processEngine.getTaskService().assignTask(taskId, userId);  
  12.             组任务  
  13.                 方式一:指定candidate-users属性  
  14.                     可以指定为具体的String(多个人之间用英文的逗号隔开);  
  15.                     也可以指定一个流程变量,会使用计算出的结果(结果要是String型,多个人之间用英文的逗号隔开)表示候选人。  
  16.                 方式二:  
  17.                     AssignmentHandler中  
  18.                     assignable.addCandidateUser(userId); // 添加一个组成员(候选人)  
  19.                 方式三:  
  20.                     processEngine.getTaskService().addTaskParticipatingUser(taskId, userId, Participation.CANDIDATE);  

到这里,有关AssignmentHandler的问题都差不多了

2.DecisionHandler

DecisionHandler接口的作用就是根据你给传入的条件进行判断,然后返回一条让你往下继续执行的线,就跟做决定一样。

 
  1. public class DaysCheckHandler implements DecisionHandler {  
  2.     
  3.     @Override 
  4.     public String decide(OpenExecution execution) {  
  5.         //加入判断天数的逻辑  
  6.         String days =execution.getProcessInstance().getVariable("days").toString();  
  7.         float day = Float.parseFloat(days);  
  8.         if(day>3){  
  9.             return "MoreThan3Days";  
  10.         }else{  
  11.             return "LessThan3Days";  
  12.         }  
  13.     }  
  14. } 

获取前面流过来的"days" 然后返回那条线的名字就OK,XML配置见上文,so easy

这两个接口还是比较常用的,我用的方式是比较简单的,但是jbpm比我们想象的灵活多了,尤其是AssignmentHandler,可以加上权限等等,一个实现服务多个用户我觉得应该也是能实现的,唉~~设计模式没学好,晚上继续看!!!

本文出自 “java点点滴滴” 博客,请务必保留此出处http://ug199313.blog.51cto.com/4772052/943385

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

相关推荐

JBPM4.4节点详解(常用)

启动节点start 每个流程里面至少有一个开始节点(到目前为止一个流程只能有一个开始节点),开始节点必须有一个向外的流向,这个流向会在流程启动时执行。 状态节点state State是一个等待状态节点,流程实例执行到state节点后,会一直处于等待状态,直到外部触发器调用API。State节点和其他的节点不同,它没有任何属性或元素。 让我们看一个用序列连接状态 和转移的例子。 <pr

xiatian_sun的博客 4738

jbpm中组任务的指定

组任务的分配: 1,直接指定:candidate-users="经理A,经理B,经理C" 2,使用流程变量: 代码:variables.put("userIds", "经理AAA,经理BBB,经理CCC"); 定义:candidate-users="#{userIds}" 3,使用AssignmentHandler,写代码: assignable.addCandidateUser("经

黄俊东的专栏 2197

jbpm4.4测试demo

下载jbpm:http://sourceforge.net/projects/jbpm/files/ 数据库表: create table JBPM4_DEPLOYMENT ( DBID_ bigint not null, NAME_ longtext, TIMESTAMP_ bigint, STATE_ varcha

交通部PC167 3869

jBPM二(表达业务流程)

业务流程包括三部分: 活动 Activity / 节点 Node (有很多种,不同的类型有不同的功能,必须要有一个Start Activity)连线 Transition / 转移 (从一个Activity指向另一个Activity)事件 Event Transition 开始活动中有且只能有一个连线,并且一个流程实例启动后,会在开始活动之后的一个活动处停下,所以只能有一个开始活动和连线.结束活动不能有连线.其它的活动可以一个或多个连线.当有一个或多个连线的时候,必须使用指定的连线名称离开当前活动,不指

Bannings的专栏 7852

jbpm4服务接口方法汇总

ProcessEngine processEngine = new Configuration().buildProcessEngine(); RepositoryService reporsityService = processEngine.getRepositoryService(); ExecutionService executionService=processEngine.getExecutionService(); TaskService taskService=processEngine.getTaskService(); HistoryService historyService=processEngine.getHistoryService(); IdentityService identityService=processEngine.getIdentityService(); ManagementService managementService=processEngine.getManagementService(); Jbpm 服务简介 我们开发中主要会使用到PVM提供的几类服务: 查看org.jbpm.api.ProcessEngine.java类,这个工厂类提供了所有对外发布的服务。包含: 1) RepositoryService getRepositoryService();//获取与流程部署有关的方法:

从NVLINK到EthLink:GPU互联技术演进全解析(含最新行业趋势)

本文深入解析了从NVLINK到EthLink的GPU互联技术演进,重点剖析了Scale-up与Scale-out两种核心范式。文章详细对比了NVLINK、UALINK及革命性的EthLink技术,后者创新性地将以太网改造为支持Load/Store与RDMA双语义的高性能互联网络,旨在打破封闭生态,实现高性能与开放性的统一。最后,文章提供了技术选型指南并展望了未来以以太网为主导、语义融合的行业趋势。

weixin_29204749的博客 179

十七、Decision节点和DecisionHandler的使用

 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;process-definition   xmlns="urn:jbpm.org:jpdl-3.2"  name="test6"&gt;    &lt;start-state name="开始"&gt;       &lt;transition

chongqingnantian的专栏 734

RYU+mininet——RYU

1. 使用RYU做mininet的控制器 1.1 RYU介绍与安装 RYU是一款基于python的控制器,你可用Ryu实现各种想要实现的网络功能,它可以下发或接收流表进行各种路由运算。 建议使用高版本的Ubuntu系统安装ryu,否则会有各种错误,安装过程比较简单,如下: apt install gcc libffi-dev libssl-dev libxml2-dev libxslt1-...

qq_34415266的博客 1万+

JBPM4 常用表结构及其说明

首先我想说,这不一篇原创博文。这里设置成原创,主要是为了分享,因为它对于jbpm的初学者,真的值得一看。原作者的博文地址并没有查到,我是在另一位转载此文的博主那儿获得的,地址在这儿。 本文从表结构、操作时表的变化以及jbpm4.4各个包的作用来介绍jbpm的。

崔成龙 . 勇往直前 7万+

【软碟通 | UltraISO】刻录光盘教程(制作U盘启动盘)

前言 今天老师说办公室的电脑有点卡,让我给重新安装一个 Windows 7 系统。于是就用软碟通(UltraISO)在 U 盘上刻录了一个 Windows 7 镜像,然后给老师重装了系统。顺便把制作 U 盘启动盘的教程也分享给大家。 软件 UltraISO v9.7.1.3519:点击跳转(密码:dd2k) 教程 将 U 盘插到电脑上,然后鼠标右击选择格式化(制作启动盘必须格式化) 点击文件-打开 选择下载好的系统镜像(如:Windows 7) 点击启动-写入硬盘映像 选择硬盘

XavierJ的博客 2万+

农业AI避坑指南:用YOLO11做叶片病害检测时遇到的5个典型问题

本文分享了使用YOLO11模型进行农业叶片病害检测时常见的五个典型问题及解决方案。针对田间多变光照、病害样本不均衡、标注歧义、背景干扰和边缘部署等挑战,提供了包括场景自适应数据增强、解耦训练、软标签与鲁棒损失函数、困难负样本构建以及模型轻量化部署在内的实战经验,旨在帮助开发者提升农业AI项目的落地效果。

ujm56789012的博客 206

JBPM4表结构说明

JBPM4_DEPLOYMENT   流程定义表 JBPM4_DEPLOYPROP 流程定义属性表 JBPM4_EXECUTION  流程实例表 JBPM4_HIST_ACTINST 流程活动(节点)实例表 JBPM4_HIST_DETAIL  流程历史详细表 JBPM4_HIST_PROCINST 流程实例历史表 JBPM4_HIST_TASK  流程任务实例历史表

交通部PC167 1076

UniApp X 网络请求避坑指南:从 JS 到 UTS 的 JSON 数据处理全解析

摘要:UniAppX开发中处理JSON数据时,UTS强类型特性要求开发者改变JS习惯。本文对比两种主流方案:1)UTSJSONObject通过keypath访问数据,兼容JS但缺乏类型提示;2)type+泛型方案,通过定义数据类型实现强类型校验和智能提示,推荐用于固定数据结构。文章详细演示了两种方式的具体实现、转换方法及实战案例,并提供了类型定义技巧和注意事项,帮助开发者编写更稳定高效的跨平台应用。

归梦工作室 2790

jbpm4.4 表结构说明

本文从表结构、操作时表的变化以及jbpm4.4各个包的作用来介绍jbpm的。 第一部分:表结构说明 Jbpm4 共有18张表,如下,其中红色的表为经常使用的表   一:资源库与运行时表结构 1.  JBPM4_DEPLOYMENT 流程定义表 2.  JBPM4_DEPLOYPROP 流程定义属性表 3.  JBPM4_EXECUTION  流程实例表

lichuang_0507的专栏 676

【UE5】RTS游戏的框选功能+行军线效果实现

步骤: 一、项目准备; 二、框选NPC并移动到指定地点; 三、框选效果; 四、行军线效果

ChaoChao66666的博客 2379

【教培管家】小程序实战(五):体验课预约——从流量到转化的闭环

本节我们通过变量状态管理和数据联动,实现了孩子选择和日期选定。下一篇我们继续讲解预约页面,根据选择的日期来筛选排课,供用户进行预约。

低代码布道师的博客 1563

jBPM3 vs jBPM4

转自http://www.javaeye.com/topic/333718 jBPM3 vs jBPM4JBoss Goup 目前已经发布了 jBPM4 Alpha1 版本,在版本 4 中最大的变化就是引入 PVM (流程虚拟机)的概念,而引擎内部的调度算法中重要的 Token 机制,在新版中也去掉了,纵观整个代码,变化可以说非常的大,笔者接下来就试着来比较一下这种变化,让

ucqqff的专栏 1220

Unreal从入门到精通之 UE4 vs UE5 VR性能优化实战

这篇文章分享了UE5 VR项目的性能优化经验。作者通过对比UE4和UE5的VR模板性能,发现UE5默认帧率只有45FPS,远低于UE4的100FPS。主要性能瓶颈来自Lumen全局光照、虚拟阴影贴图等新特性。文章详细列出了12项关键优化设置,包括禁用Lumen、关闭虚拟阴影、使用前向渲染等,并分析了各项调整对性能的影响程度。特别指出删除默认的VolumetricCloud可立即提升5帧。最后建议根据场景需求平衡画质与性能,对于高帧率要求的VR项目,可能需要谨慎使用UE5或关闭其部分高级渲染功能。

TxNet 1388

JBPM4.4(二)——初步运用

这篇博客重点描述一下JBPM4.4的初步运用,利用eclipse进行工作流开发,首先需要进行eclipse插件的安装jbpm-gpd-site.zip。通过help->Install NewSoftware进行安装即可。当我们右击新建other出现如图所示时,表示我们已经安装好了:            好,安装好了,看一下如何使用吧:

学会改变自己——才能突破 9116

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jBPM-4.4:安装配置

在学习和使用jBPM-4.4的时候,一开始首先安装好其发行包自带的examples,然后根据实际应用的需要进行开发。这里主要为学习jBPM-4.4的实例所使用工具及其配置进行了梳理,使我们快速搭建起学习环境。1、准备工作(1)jBPM-4.4发行包下载jBPM-4.4发行包,得到jbpm-4.4.zip压缩包,解压缩到E盘根目录下;(2)Eclipse工具下载Eclipse-3.5,或者使用eclipse-jee-helios(我使用的是eclipse-jee-helios-SR1-win32.zip),E

千与的专栏 7158

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

JBPM4中常用概念总结

1. 流程定义(Process Definition)   流程定义是记录在xml文件中的对流程的描述,它包含唯一的流程开始节点和多个流程功能节点,每个节点之间使用transition进行连接。     ProcessDefinition使用id, key和version进行标识,jBPM中可能包含多个key值相同的ProcessDefinition,key值相同的ProcessDefinit

说:/~不了的专栏 1539

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

java相关技术(partner4java专栏)希望对您的学习有所帮助 3168
上一篇: 学会这十点工作经验 可以让你少走很多路
下一篇: jbpm4.4学习总结(四)请假流程
dw_java08
博客等级 码龄15年 122粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值