下面咱们来看看正宗的做条件判断的流程是如何工作的。
1. transition下面的condition属性决定流向
流程图如下
Xml描述如下:
<?xml version="1.0" encoding="UTF-8"?>
<process name="decision" xmlns="http://jbpm.org/4.4/jpdl">
<start name="start1" g="200,38,48,48">
<transition name="to exclusive1" to="exclusive1" g="-79,-22" />
</start>
<decision name="exclusive1" g="204,141,91,48">
<transition name="accecpt" to="ok" g="67,164:-56,-22">
<condition expr="#{con=='good'}" />
</transition>
<transition name="refect" to="refect" g="-56,-22">
<condition expr="#{con=='bad'}" />
</transition>
<transition name="toend" to="toend" g="417,167:-56,-22" />
</decision>
<state name="ok" g="25,236,92,52" />
<state name="refect" g="190,252,92,52" />
<state name="toend" g="358,241,92,52" />
</process>
|
可以看出每一个transition通过condition中的EL表达式来决定应该转向哪个分支。
测试代码如下:
// 判断条件
Map<String, Object> con = new HashMap<String, Object>();
con.put("con", "bad");
// 开始process流程
ProcessInstance processInstance = executionService
.startProcessInstanceByKey("decision", con);
// 流程实例的ID
String pid = processInstance.getId();
System.out.println(pid);
boolean isAction = processInstance.isActive("refect");
System.out.println(isAction);
|
这样通过流程变量“con”来决定流程实例未来的走向。上个代码将流程走到了refect节点。
1. decision的expr属性决定流向
decision的expr属性和transition下面的condition差不多,无非是少定义几行代码。如下:
<decision expr=”#{con}” name=”start”>
|
测试代码和上面一样,结果亦同。
2. 单独的Java类决定流向
单独使用Java类来处理复杂流程的流向,则该处理类必须实现DecisionHandler接口(org.jbpm.api.jpdl.DecisionHandler)。
先看流程:
大致和第一个差不多
流程xml定义如下:
<?xml version="1.0" encoding="UTF-8"?>
<process name="decisionHandler" xmlns="http://jbpm.org/4.4/jpdl">
<start name="start1" g="201,40,48,48">
<transition name="to exclusive1" to="exclusive1" g="-79,-22" />
</start>
<state name="ok" g="26,234,92,52" />
<state name="delete" g="181,244,92,52" />
<state name="end" g="350,230,92,52" />
<decision name="exclusive1" g="200,133,48,48">
<handler class="myHandler.MyDecisionHandler" />
<transition name="took" to="ok" g="73,159:-56,-22" />
<transition name="todelete" to="delete" g="-56,-22" />
<transition name="toend" to="end" g="396,159:-56,-22" />
</decision>
</process>
|
在流程定义中加入了一个流程处理类MyDecisionHandler,自己实现decide方法。
该类代码如下:
package myHandler;
import org.jbpm.api.jpdl.DecisionHandler;
import org.jbpm.api.model.OpenExecution;
import vo.DesicionVO;
public class MyDecisionHandler implements DecisionHandler {
/**
*
*/
private static final long serialVersionUID = -8252198085094966729L;
@Override
public String decide(OpenExecution arg) {
DesicionVO desicionVO = (DesicionVO) arg.getVariable("con");
if ("took".equals(desicionVO.getName())) {
return "took";
} else if ("todelete".equals(desicionVO.getName())) {
return "todelete";
}
return "toend";
}
}
|
根据流程实例变量DesicionVO中的数值来决定流程转向哪里。
测试代码如下:
//判断条件
Map<String,Object> con = new HashMap<String,Object>();
DesicionVO desicionVO = new DesicionVO();
desicionVO.setName("took");
con.put("con", desicionVO);
// 开始process流程
ProcessInstance processInstance = executionService
.startProcessInstanceByKey("decisionHandler",con);
// 流程实例的ID
String pid = processInstance.getId();
System.out.println(pid);
boolean isAction = processInstance.isActive("ok");
System.out.println(isAction);
|
State和Decision都可以决定分支的流向,他们的区别就是:1.如果Decision活动没有得到条件的满足,那么流程进行不下去,会发生异常;2.如果State下面的多个活动没有达到满足则默认会走向第一个分支,让整个流程继续走下去。从而可以看出Decision比State具有更加严格的条件判断性。
- 大小: 15.3 KB
- 大小: 13.9 KB
分享到:
相关推荐
84 6.2.1 start(开始活动) 85 6.2.2 state(状态活动) 86 6.2.3 decision(判断活动) 89 6.2.4 fork – join(分支/聚合活动) 97 6.2.5 end(结束活动) 102 6.2.6 task(人工任务活动) 107 6.2.7 sub-process...
- 描述了jBPM4的核心组件——进程引擎的作用和功能。 - 进程引擎负责解析流程定义,并驱动流程实例的执行。 - **5.3 部署流程** - 介绍了如何将定义好的流程部署到jBPM环境中。 - 包括上传文件、配置参数等步骤...
本文将深入探讨JBPM的核心组成部分之一——数据库表结构。 #### 二、核心表介绍 JBPM的核心表结构覆盖了从流程定义到执行过程中的各个关键环节,具体包括但不限于以下几类: 1. **流程定义相关的表** - **JBPM_...
问题描述: 停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入; 当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 1.基本要求 (1)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 (2)每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。 (3)栈以顺序结构实现,队列以链表实现。 2.重点难点 重点:针对停车场问题的特点,利
精选毕设项目-人民好公仆小程序(生活+便民+政务)
精选毕设项目-相册;处理用户信息
精选毕设项目-喵喵小说
精选毕设项目-图片预览带后端
精选项目-爱靓女带后台
在科技与司法的交响曲中,智慧法院应运而生,成为新时代司法服务的新篇章。它不仅仅是一个概念,更是对法院传统工作模式的一次深刻变革。智慧法院通过移动信息化技术,为法院系统注入了强大的生命力,有效缓解了案多人少的矛盾,让司法服务更加高效、便捷。 立案、调解、审判,每一个阶段都融入了科技的智慧。在立案阶段,智慧法院利用区块链技术实现可信存证,确保了电子合同的合法性和安全性,让交易双方的身份真实性、交易安全性得到了有力见证。这不仅极大地缩短了立案时间,还为后续审判工作奠定了坚实的基础。在调解阶段,多元调解服务平台借助人工智能、自然语言处理等前沿技术,实现了矛盾纠纷的快速化解。无论是矛盾类型的多元化,还是化解主体的多元化,智慧法院都能提供一站式、全方位的服务,让纠纷解决更加高效、和谐。而在审判阶段,智能立案、智能送达、智能庭审、智能判决等一系列智能化手段的应用,更是让审判活动变得更加智能化、集约化。这不仅提高了审判效率,还确保了审判质量的稳步提升。 更为引人注目的是,智慧法院还构建了一套完善的执行体系。移动执行指挥云平台的建设,让执行工作变得更加精准、高效。执行指挥中心和信息管理中心的一体化应用,实现了信息的实时传输和交换,为执行工作提供了强有力的支撑。而执行指挥车的配备,更是让执行现场通讯信号得到了有力保障,应急通讯能力得到了显著提升。这一系列创新举措的实施,不仅让执行难问题得到了有效解决,还为构建诚信社会、保障金融法治化营商环境提供了有力支撑。智慧法院的出现,让司法服务更加贴近民心,让公平正义的阳光更加温暖人心。
西门子1200与3台台达DTK温控器通讯程序 功能:实现西门子1200 PLC对3台台达DTK温控器进行485通讯控制,在触摸屏上设定温度,读取温度 器件:西门子1200 1214DC DC DC.昆仑通态TPC7062Ti ,西门子KTP700 Basic PN,台达DTK 4848V12温控器。 说明:的是程序,带详细注释程序,西门子触摸屏程序,PLC设置和温控器设置,接线说明书。 #SIEMENS 西门子
机械设计电阻绕线焊线一体机sw18全套技术资料100%好用.zip
VB6编写的上位机源码,可实时显示曲线图,带有数据库,可以进行历史数据的保存 及 查看历史采集数据。
精选毕设项目-新浪读书
jQuery+Slick插件实现游戏人物轮播展示切换特效源码是一款通过背景图片的切换来显示不同的人物效果,轮播效果通过slick幻灯片插件来制作。效果非常棒,有需要的朋友可以直接下载使用,适应各大网站
精选毕设项目-地图查找附件
(蛐蛐voc数据)农作物病虫害识别目标检测数据集,VOC格式,蛐蛐数据集,纯手动标注,用来进行目标检测代码训练的数据。
MATLAB Simulink仿真模型 双馈风机并网频率控制仿真模型,利用下垂控制与惯性控制结合的综合惯性控制,实现电力系统的频率稳定,两台同步发电机组,具体参数可自行调节,频率波形比较可利用matlab工作区画出。
一、结题报告的类型及主要结构 结题报告是一种专门用于科研课题结题验收的实用性报告类文体,也叫研究报告。它是研究者在课题研究结束后对科研课题研究过程和研究成果进行客观、全面、实事求是的描述,是课题研究所有材料中最主要的材料,也是科研课题结题验收的主要依据。 一篇规范、合格的结题报告,需要回答好3个问题:一是“为什么要选择这项课题进行研究?”二是“这项课题是怎样进行研究的?”三是“课题研究取得哪些研究成果?” 基本结构大致包括以下部分: 第一个问题 “为什么要选择这项课题进行研究?” 1.课题提出的背景;2.课题研究的意义(包括理论意义和现实意义,这个部分也可以合并归入“课题提出的背景”部分);第二个问题“这项课题是怎样进行研究的?”3.文献综述;4.课题研究的理论依据;5.课题研究的目标;6.课题研究的主要内容;7.课题研究的对象;8.课题研究的方法;9. 课题研究的主要过程(研究的步骤); 除了第9部分外,从第1到第8部分在填报课题立项申报表、在制定课题研究方案、在开题报告中,都有要求,内容基本相同。到了撰写结题报告时,只须稍作适当修改就可以了。而第9部分,则需要通过对
内容概要:本文档重点讲述了网络安全应急响应的各项准备工作,涵盖了‘1+X’网络安全应急响应的职业技能等级证书概述、应急响应的基础知识、应急响应组织的建立、风险评估与改进、应急响应预案的制定以及详细的应急响应计划处置样例。文中详细介绍了各级职业技能的要求和任务,尤其关注如何未雨绸缪,制定完善的应急预案以应对潜在的网络安全风险;同时也探讨了如何在网络安全事件发生时,采取及时有效的应急处置措施。 适合人群:从事或有兴趣进入网络安全领域的从业人员,尤其是准备考取‘1+X’网络安全应急响应职业技能等级证书的相关人员。 使用场景及目标:帮助读者了解网络安全应急响应的基本概念及其在整个国家安全框架中的重要地位;指导读者学会如何建立健全高效的应急响应组织结构,如何进行全面的风险评估以及如何编制切实可行的应急预案;通过实例剖析,增强读者应对突发网络安全事件的能力。文档的目标在于提升读者在不同层面的专业技能,包括但不限于系统备份、日志分析、安全漏洞修复等方面的能力。 阅读建议:此文档结构清晰,内容详尽,非常适合有一定基础的技术从业者参考学习。建议读者逐章节深入了解,特别是关注自身岗位对应的技能细分类别。此外,结合实例深入理解和练习如何进行应急处置是非常有价值的,有助于提升自身的实战能力。