Flowable决策任务(decision task)

摘要:Flowable中引入了一个decision task(我们可以将其称之为决策任务)。在讲解decision task之前,我们不妨看一下dmn引擎。因为如果大家不了解dmn,那肯定不知道如何使用decision task了。

dmn是decision Modeling Notation几个单词的缩写,他强调的是决策方式建立模型,而不是过度依赖文档方式建立模型。bpmn强调的是文档流程模型,而dmn强强调的是决策模型。这也是bpmn与dmn最大的不同之处。接下来,我们分步骤看一下如何使用dmn以及decision task。

文章目录

  • 一、dmn使用/定义/规则
    • 1. dmn引擎使用
    • 2. dmn文件定义
    • 3. 执行 dmn规则
  • 二、决策任务使用
    • 2.1. 部署流程文档
    • 2.2. 启动流程实例

一、dmn使用/定义/规则

1. dmn引擎使用

首先,我们需要引入一些dmn引擎的包,pom.xml信息如下:
     <dependency><groupId>org.flowable</groupId><artifactId>flowable-dmn-engine-configurator</artifactId><version>${flowable.version}</version></dependency><dependency><groupId>org.flowable</groupId><artifactId>flowable-dmn-engine</artifactId><version>${flowable.version}</version></dependency>

2. dmn文件定义

    dmn强强调的是决策模型,因此我们可能会大量的定义决策模型文件,比如现在我有一个最最简单的需求,现在有三个变量,变量的名称分别是input1、output1、output2。假如我们使用这个规则,比如input1>10 则output1=test,output2=1;input1=10 则output1=test3,output2=3;input1<10 则output1=test2,output2=2;假如这个规则让我们自己定义规则文件,我们该如何定义呢?首先我们需要定义一个decision元素,该元素可以定义的属性如下:
id="decision" name="Simple decision"  三个变量如何定义呢?实例代码如下:<decisionTable id="decisionTable"><input><inputExpression id="input1" typeRef="number"><text>input1</text></inputExpression></input><output id="output1" label="Output 1" name="output1" typeRef="string" /><output id="output2" label="Output 2" name="output2" typeRef="number" />

input1>10 则output1=test,output2=1;input1=10 则output1=test3,output2=3;input1<10 则output1=test2,output2=2;这应该是三个规则,哪我们就可以定义三个规则,示例代码如下:

		<rule><inputEntry id="inputEntry1"><text><![CDATA[> 10]]></text></inputEntry><outputEntry id="outputEntry1_1"><text>'test'</text></outputEntry><outputEntry id="outputEntry2_1"><text>1</text></outputEntry></rule><rule><inputEntry id="inputEntry2"><text><![CDATA[< 10]]></text></inputEntry><outputEntry id="outputEntry1_2"><text>'test2'</text></outputEntry><outputEntry id="outputEntry2_2"><text>2</text></outputEntry></rule><rule><inputEntry id="inputEntry3"><text><![CDATA[== 10]]></text></inputEntry><outputEntry id="outputEntry1_3"><text>'test3'</text></outputEntry><outputEntry id="outputEntry2_3"><text>3</text></outputEntry></rule>

上面我们分别定义了三个rule元素(规则),相信大家也能猜测到每个规则的含义。inputEntry是输入的元素,outputEntry是输出的元素。上述的dmn文件完整代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/DMN/20151101" id="simple" name="Simple" namespace="http://flowable.org/dmn"><decision id="decision" name="Simple decision"><decisionTable id="decisionTable"><input><inputExpression id="input1" typeRef="number"><text>input1</text></inputExpression></input><output id="output1" label="Output 1" name="output1" typeRef="string" /><output id="output2" label="Output 2" name="output2" typeRef="number" /><rule><inputEntry id="inputEntry1"><text><![CDATA[> 10]]></text></inputEntry><outputEntry id="outputEntry1_1"><text>'test'</text></outputEntry><outputEntry id="outputEntry2_1"><text>1</text></outputEntry></rule><rule><inputEntry id="inputEntry2"><text><![CDATA[< 10]]></text></inputEntry><outputEntry id="outputEntry1_2"><text>'test2'</text></outputEntry><outputEntry id="outputEntry2_2"><text>2</text></outputEntry></rule><rule><inputEntry id="inputEntry3"><text><![CDATA[== 10]]></text></inputEntry><outputEntry id="outputEntry1_3"><text>'test3'</text></outputEntry><outputEntry id="outputEntry2_3"><text>3</text></outputEntry></rule></decisionTable></decision></definitions>

dmn文件部署
dmn文件跟bpmn设计出来的流程文档操作步骤基本类似,也是需要部署该规则文件的,示例代码如下:

String resource = "com/shareniu/shareniu_flowable_study/dmn/DeploymentTest.testDeployWithXmlSuffix.dmn.xml";dmnRepositoryService.createDeployment().addClasspathResource(resource).deploy();

部署上述代码之后,数据库ACT_DMN_DEPLOYMENT表数据变化如下。
select * from ACT_DMN_DEPLOYMENT;在这里插入图片描述

3. 执行 dmn规则

下面,我们开始执行定义的规则文件,实例代码如下:

@Test
public void executeDecisionByKey() {Map<String, Object> inputVariables = new HashMap<>();inputVariables.put("input1", 11);List<Map<String, Object>> result = ruleService.executeDecisionByKey("decision", inputVariables);System.out.println(result);
}

运行上述代码,程序的输出如下:

[{output1=test, output2=1.0}]

我们将input1的值修改为10,再次运行上述代码,输出信息如下:

[{output1=test3, output2=3.0}]

通过上面的实例,我们发现自定义的决策规则是完全可以执行的,并符合我们的预期效果。

二、决策任务使用

接下来,我们看一下如何在流程文档中使用decision task。相关的流程图如下:
在这里插入图片描述
上图中,我们定义了一个决策表和一个任务节点,请注意决策任务是不会等待,也就是说当流程实例经过决策任务的时候,计算完毕决策任务对应的决策规则之后实例继续往下走。上图中的决策任务xml定义如下:

<serviceTask id="sid-64DC19A4-1CBA-45C6-859F-83F3EE44C7F4" name="决策表" flowable:type="dmn"><extensionElements><flowable:field name="decisionTableReferenceKey"><flowable:string><![CDATA[decision]]></flowable:string></flowable:field><flowable:field name="decisionTaskThrowErrorOnNoHits"><flowable:string><![CDATA[false]]></flowable:string></flowable:field></extensionElements></serviceTask>

上述的xml中,decisionTableReferenceKey定义的值是我们上文中提到的 中的id值。

2.1. 部署流程文档

@Test
public void addBytes() {byte[] bytes = IoUtil.readInputStream(ProcessengineTest.class.getClassLoader()
.getResourceAsStream("com/shareniu/shareniu_flowable_study/dmn/decision.bpmn20.xml"), "decision.bpmn");String resourceName = "decision.bpmn";Deployment deployment = repositoryService.createDeployment().addBytes(resourceName, bytes).deploy();System.out.println(deployment);
}

2.2. 启动流程实例

接下来,开始启动流程实例如下所示:

@Test
public void startProcessInstanceByKey() {String processDefinitionKey = "decision";Map<String, Object> var = new HashMap<>();var.put("input1", 11);runtimeService.startProcessInstanceByKey(processDefinitionKey, var);
}

ACT_RU_VARIABLE表新增的输入如下:
在这里插入图片描述
换言之,决策任务确实已经执行了,并且将规则的执行结果outputEntry元素的值作为变量进行使用了。

ACT_RU_TASK表新增的输入如下:
在这里插入图片描述
ok,决策任务使用基本已经讲解完毕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5G精华问答 | 5G技术已经成熟了吗?

1G时我们用手机打电话&#xff0c;2G时我们能互发短信、看文字信息&#xff0c;3G时上网看图片&#xff0c;而4G时我们看视频和直播&#xff0c;从1G到4G&#xff0c;不仅信号越来越好&#xff0c;安全性越来越高&#xff0c;上网也越来越快了。1Q&#xff1a;5G技术已经成熟了…

PyODPS DataFrame:统一的数据查询语言

摘要&#xff1a; 前几天&#xff0c;PyODPS发布了0.7版本&#xff0c;这篇文章给大家介绍下PyODPS新版本带来的重要特性。 之前也有若干篇文章介绍过了&#xff0c;我们PyODPS DataFrame是延迟执行的&#xff0c;在调用立即执行的方法&#xff0c;比如execute、persist等之前&…

AliOS Things 持续集成(CI)系统介绍

摘要&#xff1a; AliOS Things在快速的迭代进化之中&#xff0c;如何保证提交的代码质量&#xff0c;并保证在各个硬件平台上的稳定性&#xff0c;是一个非常大的挑战。同时物联网硬件碎片化&#xff0c;资源紧张&#xff0c;对持续集成&#xff08;CI&#xff09;系统也提出了…

从青铜到王者,助力企业轻松上云的四大绝招!

戳蓝字“CSDN云计算”关注我们哦!IBM在7月份发生了很多大事&#xff0c;其中这两件你知道吗&#xff1f;第一&#xff0c;IBM&#xff08;NYSE: IBM&#xff09;与美国电话电报公司&#xff08;AT&T&#xff09;&#xff08;NYSE: T&#xff09;达成一项为期多年的战略联盟…

PyODPS 中使用 Python UDF

摘要&#xff1a; PyODPS 中使用 Python UDF 包含两方面&#xff0c;一个是直接使用&#xff0c;也就是在 MaxCompute SQL 中使用&#xff1b;一个是间接的方式&#xff0c;也就是 PyODPS DataFrame&#xff0c;这种方式你不需要直接写 Python UDF&#xff0c;而是写普通的 Pyt…

无服务器计算,如何节省时间和成本?

戳蓝字“CSDN云计算”关注我们哦&#xff01;译者 | 风车云马出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcould&#xff09;为了解决面临的业务问题&#xff0c;通常需要开发人员花费一定的时间编写完代码&#xff0c;再交由运维工程师确保正常的运行&#xff0c;整个过程…

一张图看懂阿里云新发布的物联网设备上云神器——HiTSDB + IoT套件

近日&#xff0c;阿里云针对物联网企业遇到的设备认证困难、安全问题突出等问题&#xff0c;发布了HiTSDB IoT 套件的一体化解决方案&#xff0c;能够支持物联设备快速上云&#xff0c;高效设备管理&#xff0c;数据安全&#xff0c;低成本海量数据存储&#xff0c;实时掌握设备…

Spark精华问答 | 谈谈spark中的宽窄依赖

总的来说&#xff0c;Spark采用更先进的架构&#xff0c;使得灵活性、易用性、性能等方面都比Hadoop更有优势&#xff0c;有取代Hadoop的趋势&#xff0c;但其稳定性有待进一步提高。我总结&#xff0c;具体表现在如下几个方面。1Q&#xff1a;Spark RDD是什么&#xff1f;A&am…

阿里云产品头条(2017年12月刊)

摘要&#xff1a; 一、新产品发布1、云防火墙 商业化 发布云防火墙是一款云环境下的防火墙产品&#xff0c;首创了基于业务可视的结果&#xff0c;实现业务梳理和业务隔离的技术。适用于互联网&#xff0f;通用&#xff0f;游戏&#xff0f;金融&#xff0f;新零售&#xff0f;…

一张图解读阿里云数据管理DMS企业版

摘要&#xff1a; 阿里云数据管理DMS企业版&#xff0c;作为数据管理产品大家族里的新成员&#xff0c;于2017年11月开启公测&#xff0c;今年1月底正式发布商业化版本。 作为业界领先的面向企业的数据库DevOps解决方案&#xff0c;DMS企业版旨在帮助企业安全、高效的使用数据库…

架构设计之「 微服务入门 」

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 奎哥来源 | 不止思考微服务这几年不可谓不火&#xff0c;很多技术团队都开始在自己的项目上引入了微服务。一方面这些团队确实很好的推动了微服务的应用和发展&#xff0c;另一方面也可以看到一些盲目追技术热点的行为所带来…

提升研发效率 保障数据安全——阿里云宣布数据管理DMS企业版正式商业化

摘要&#xff1a; 阿里云数据管理DMS企业版&#xff0c;作为数据管理产品大家族里的新成员&#xff0c;于2017年11月开启公测&#xff0c;今年1月底正式发布商业化版本。 作为业界领先的面向企业的数据库DevOps解决方案&#xff0c;DMS企业版旨在帮助企业安全、高效的使用数据库…

flowable实战(五)flowable驳回/退回上一步/退回到

一、驳回/退回上一步/退回到&#xff08;历史某一个节点&#xff09; 我们经常需要工作流中退回上一步&#xff0c;或者退回历史某一个节点。但由于流程的场景是很复杂的&#xff0c;回退有以下一些场景&#xff1a;1.串行路线上的退回&#xff1a;流程中没有任何网关&#xff…

全链路压测一招搞定,阿里云性能测试铂金版发布

摘要&#xff1a; 阿里云性能测试&#xff08;Performance Testing Service&#xff09;是卓越的SaaS性能测试平台&#xff0c;具备强大的分布式压测能力&#xff0c;可模拟海量用户的真实业务场景&#xff0c;让所有性能问题无所遁形。近日&#xff0c;PTS宣布推出了基于阿里双…

老司机教你分析日志:分析用户的地理位置信息

摘要&#xff1a; 地理位置的需求 通常我们分析用户的需求&#xff0c;了解到用户当前位置在哪里非常重要&#xff0c;例如&#xff0c;可以根据用户的地理位置&#xff0c;针对性的推广本地广告。 通常&#xff0c;我们可以在客户端获取定位权限来获取GPS信息。但是如果用户关…

java中的switch的规则_细细讲述Java技术开发的那些不为人知的规则

本文介绍的Java规则的说明分为3个主要级别&#xff0c;中级是平时开发用的比较多的级别&#xff0c;在今后将陆续写出其他的规则。遵守了这些规则可以提高程序的效率、使代码又更好的可读性等。一、在finally方法里关掉input或者output资源方法体里面定义了input或者output流的…

华为,百度豪投,这类程序员要再次上榜了!

前不久百度AI开发者大会&#xff0c;李彦宏高调宣布百度AI技术&#xff1b;同时&#xff0c;AI测试权威软件AI Benchmark的测试数据显示&#xff0c;中国华为研发的7nm旗舰手机芯片麒麟810的AI分数&#xff0c;远远超过美国高通骁龙855了&#xff01;早前华为就宣布&#xff1a…

flowable实战(六)flowable的意见表和附件表应用

一、act_hi_comment和act_hi_attachment两表表&#xff0c;前者意见表后者是附件表 意见表它里面有一个类型type字段&#xff0c;分别是comment代表意见(这个type可以自定义,例如自定义为&#xff1a;通过/退回/提前终止&#xff09;&#xff0c;缺省提供了comment&#xff0c…

Serverless在游戏、电商行业的一个运用场景示例

摘要&#xff1a; Serverless 是一种架构理念&#xff0c;具有自己的独特的优势和适用场景。本文以使用阿里云函数计算为例&#xff0c;构建一个简单具体的microservice为例&#xff0c;看看这种架构是如何达到快速开发和节约运维成本的。 点此查看原文&#xff1a;http://clic…

SDN精华问答 | SDN的核心技术是什么?

SDN火热了好一阵子&#xff0c;无论运营商、政府企业、投资机构&#xff0c;一段时间&#xff0c;不知道SDN、不能甩几个SDN相关的名词术语&#xff0c;似乎都落后于时代了。今天&#xff0c;就来看看关于SDN的精华问答吧。1Q&#xff1a;SDN的目的是什么&#xff1f; A&#x…