Activiti 规则任务(businessRuleTask

作者:邓家海

目前国内研究Activiti规则任务businessRuleTask)的文章在网上应该不超出3篇

小觑夜漫酒作伴,破晓黎明当笑言

前言:

最近一直在研究Activiti工作流的自动化,方便日后实现办公自动化奠下基础。然后查了相关资料发现Activity里面有一个规则任务(businessRuleTask),这个规则任务(businessRuleTask)可以通过制定一系列的规则来实现流程自动化。但是,当我真正去接触这个东西的时候,才发现很少人做过这个东西。网络上面的相关资料也几乎一片空白。我只能自己去钻研,自己去调试。耗费了一个周末的晚上时间,外加一个星期的晚上时间。终于突破了这个关卡,这个系列的文章在国内网络上面应该是不多,希望对读者研究Activity有所帮助。

关于Activiti规则任务(businessRuleTask)官方怎么说的?

描述
业务规则任务用于同步执行一个或更多规则。 Activiti 使用 Drools Expert 和 Drool 规则引擎来执行业务规则。 目前而言,包
含有业务规则的.drl 文件必须与定义了业务规则任务的流程定义一同部署才能执行这些规则。这意味着在流程中使用的所
有.drl 文件必须像任务表单一样被打包进流程的 BAR 文件中。更多关于使用 Drool Expert 来创建业务规则的信息,请参考
Jboss Drools 上的 Drools 文档。
图形化符号
业务规则任务是使用表格图标来表示的。
XML 表示
要执行部署在与流程定义所在 BAR 文件中的一个或更多业务规则,我们需要定义输入变量和结果变量。对于输入变量的
定义,可以定义一个由逗号分隔的流程变量列表。输出变量的定义可以只包含一个变量名,用来将执行过的业务规则的
输出对象存储到一个流程变量中。注意,结果变量将包含一个对象列表。如果没有指定结果的变量名,默认使用
org.activiti.engine.rules.OUPUT。
下面的业务规则任务会执行所有随流程定义一块部署的规则:
<processid="simpleBusinessRuleProcess">
<startEventid="theStart"/>
<sequenceFlowsourceRef="theStart"targetRef="businessRuleTask"/>
<businessRuleTaskid="businessRuleTask"activiti:ruleVariablesInput="${order}"
activiti:resultVariable="rulesOutput"/>
<sequenceFlowsourceRef="businessRuleTask"targetRef="theEnd"/>

<endEventid="theEnd"/>
</process>
也可以配置业务规则任务让它只执行被部署的.drl 文件中定义的一组规则。由逗号分隔开的规则名列表必须像这样来指定:
<businessRuleTaskid="businessRuleTask"activiti:ruleVariablesInput="${order}"
activiti:rules="rule1, rule2"/>
这个例子中,只有 rule1 和 role2 会执行。
你也可以定义一个不会被执行的规则列表。
<businessRuleTaskid="businessRuleTask"activiti:ruleVariablesInput="${order}"
activiti:rules="rule1, rule2"exclude="true"/>
在这个例子中,与流程定义部署在同一个 BAR 文件中,除了 rule1 和 rule2 之外的所有流程都会被执行。

官方文档只有这么一点的介绍,然而这里就牵扯到两个新东西了,第一个新东西就是规则任务,它本来就是一个新东西,还有一个东西就是规则任务的Drools 规则。

什么是Drools ?

Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。

开发步骤:

(1)准备必须的jar包

(2)设计规则任务

(3)编写代码实现

(4)编写Drools规则

(5)部署运行

必须的jar包:

knowledge-api-6.4.0.Final.jar

drools-core-6.4.0.Final.jar

droolsjbpm-knowledge-services-6.0.0.Alpha9.jar

drools-compiler-6.4.0.Final.jar

knowledge-internal-api-5.6.0.Final.jar

kie-api-6.4.0.Final.jar

mvel2-2.3.1.Final.jar

antlr-runtime-3.5.2.jar

kie-internal-6.4.0.Final.jar

设计规则任务

规则任务很简单,一个开始节点,结束节点,还有一个规则任务节点。至于实际应用里面,自己去设计更多的规则。只要启动了流程后,这一整个流程都是自动执行的。这就是所谓的自动化,当然前提是制定好规则。

规则任务的代码:

 1 <?xml version='1.0' encoding='UTF-8'?>
 2
 3 <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
 4
 5   <process id="process" isExecutable="true">
 6
 7
 8
 9     <startEvent id="sid-2A81E362-DCDF-45AF-8F01-BBF1AD5A08AB" />
10
11     <businessRuleTask id="sid-E45C70B0-D9A4-4492-B1CD-D92845553C2B" name="规则任务" activiti:rules="rule1,rule2" activiti:ruleVariablesInput="${Value}" activiti:resultVariable="result" >
12
13  <extensionElements>
14
15       <activiti:executionListener event="task" class="light.mvc.workflow.taskListener.RuleListenerImpl"></activiti:executionListener>
16
17     </extensionElements>
18
19 </businessRuleTask>
20
21     <endEvent id="sid-C52E0189-4FC3-45E2-BA2D-DAD47E6E24FB" />
22
23     <sequenceFlow id="sid-F77516EB-4BEC-40D5-BC85-178F0C3BEAB6" sourceRef="sid-E45C70B0-D9A4-4492-B1CD-D92845553C2B" targetRef="sid-C52E0189-4FC3-45E2-BA2D-DAD47E6E24FB" />
24
25     <sequenceFlow id="sid-3A813C3C-2657-4EC4-8E34-E3921439474E" sourceRef="sid-2A81E362-DCDF-45AF-8F01-BBF1AD5A08AB" targetRef="sid-E45C70B0-D9A4-4492-B1CD-D92845553C2B" />
26
27   </process>
28
29   <bpmndi:BPMNDiagram id="BPMNDiagram_process">
30
31     <bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process">
32
33       <bpmndi:BPMNShape bpmnElement="sid-2A81E362-DCDF-45AF-8F01-BBF1AD5A08AB" id="BPMNShape_sid-2A81E362-DCDF-45AF-8F01-BBF1AD5A08AB">
34
35         <omgdc:Bounds height="30.0" width="30.0" x="192.75" y="87.0" />
36
37       </bpmndi:BPMNShape>
38
39       <bpmndi:BPMNShape bpmnElement="sid-E45C70B0-D9A4-4492-B1CD-D92845553C2B" id="BPMNShape_sid-E45C70B0-D9A4-4492-B1CD-D92845553C2B">
40
41         <omgdc:Bounds height="80.0" width="100.0" x="313.75" y="62.0" />
42
43       </bpmndi:BPMNShape>
44
45       <bpmndi:BPMNShape bpmnElement="sid-C52E0189-4FC3-45E2-BA2D-DAD47E6E24FB" id="BPMNShape_sid-C52E0189-4FC3-45E2-BA2D-DAD47E6E24FB">
46
47         <omgdc:Bounds height="28.0" width="28.0" x="458.75" y="88.0" />
48
49       </bpmndi:BPMNShape>
50
51       <bpmndi:BPMNEdge bpmnElement="sid-F77516EB-4BEC-40D5-BC85-178F0C3BEAB6" id="BPMNEdge_sid-F77516EB-4BEC-40D5-BC85-178F0C3BEAB6">
52
53         <omgdi:waypoint x="413.75" y="102.0" />
54
55         <omgdi:waypoint x="458.75" y="102.0" />
56
57       </bpmndi:BPMNEdge>
58
59       <bpmndi:BPMNEdge bpmnElement="sid-3A813C3C-2657-4EC4-8E34-E3921439474E" id="BPMNEdge_sid-3A813C3C-2657-4EC4-8E34-E3921439474E">
60
61         <omgdi:waypoint x="222.75" y="102.0" />
62
63         <omgdi:waypoint x="313.75" y="102.0" />
64
65       </bpmndi:BPMNEdge>
66
67     </bpmndi:BPMNPlane>
68
69   </bpmndi:BPMNDiagram>
70
71 </definitions>

编写Drools规则

Drools规则我就不仔细说,如果对drools规则不熟悉的,可以自行去查阅相关的资料。关于drools规则的资料还是不少的。而且drools规则也很容易入门上手。

 

代码:

 

 1 package com.product;
 2
 3 import light.mvc.workflow.fact.Rule;
 4
 5 rule "rule1"
 6
 7     when
 8
 9         u : Rule(Value == 3);
10
11     then
12
13         u.PrintOut("Success!Value==3");
14
15 end
16
17 rule "rule2"
18
19     when
20
21        u : Rule(Value < 3);
22
23     then
24
25        u.PrintOut("Success!Value<3");
26
27 end
28
29 rule "rule3"
30
31    when
32
33        u : Rule(Value > 3);
34
35    then
36
37        u.PrintOut("Success!Value>3");
38
39
40
41 end 

 

这个代码的实现就是说,当流程设计里面有这个规则,流程就会跑进这个规则里面去干一些事情。拿我设计的流程来说,我设置了rule1,rule2,所以流程就会去判断Value < 3或者Value =3,如果满足Value = 3,就会执行   u.PrintOut("Success!Value==3");输出uccess!Value==3,如果Value <3就会执行  u.PrintOut("Success!Value<3"); 输出Success!Value<3。

 

 

 

  

其中,rule1,rule2是在设计规则任务的时候填写的规则,设计的时候在rule的这一项里面填上规则,多个规则要用逗号隔开。

 

代码实现

 

 1 /**
 2
 3  *
 4
 5  */
 6
 7 package light.mvc.workflow.fact;
 8
 9
10
11 import java.io.Serializable;
12
13
14
15 /**
16
17  *
18
19  * 项目名称:lightmvc
20
21  * 类名称:Rule
22
23  * 类描述:
24
25  * 创建人:邓家海
26
27  * 创建时间:2017年6月17日 下午10:20:55
28
29  * 修改人:deng
30
31  * 修改时间:2017年6月17日 下午10:20:55
32
33  * 修改备注:
34
35  * @version
36
37  *
38
39  */
40
41
42
43 public class Rule implements Serializable  {
44
45 public Rule(int Value){
46
47 System.out.println(this.Value);
48
49 }
50
51 private int Value=3;
52
53
54
55 /**
56
57  * @return the value
58
59  */
60
61 public int getValue() {
62
63 return Value;
64
65 }
66
67
68
69 /**
70
71  * @param value the value to set
72
73  */
74
75 public void setValue(int value) {
76
77 Value = value;
78
79 }
80
81
82
83     public void PrintOut(String str){
84
85     System.out.println(str);
86
87     }
88
89 }

 

部署运行

运行结果:

注意事项:部署的时候一般三个文件一起部署,最好使用压缩包的部署方式,部署清单(.drl+bpmn.xml+.png)

至少也要(.drl+bpmn.xml)

不能分开部署,分开部署会导致deployment 175011 doesn't contain any rules

失败。

提升扩展:

实际应用里面,我们怎么使用的?下面我简单设计一个规则任务说说:

这种情况我们就可以制定规则来执行任务了。而且规则我们后期是可以很灵活更改的,就是说最小代价的去更改。(不用修改代码,不用更改流程)

 

 Activiti交流QQ群:634320089

 

转载于:https://www.cnblogs.com/dengjiahai/p/7051288.html

Activiti 规则任务(businessRuleTask)相关推荐

  1. Activiti-businessRuleTask(业务规则任务)

    Activiti 规则任务(businessRuleTask) 作者:邓家海 目前国内研究Activiti规则任务businessRuleTask)的文章在网上应该不超出3篇 小觑夜漫酒作伴,破晓黎明 ...

  2. activiti入门系列文章14 - 集成规则引擎drools

    activiti如何集成规则引擎drools呢 三个步骤: 1.pom加入依赖,activiti引擎集成部署器 1.首先进行drools规则编写.然后挂到流程图节点上 2.进行规则文件和bpmn流程文 ...

  3. 14、flowable、camunda(卡蒙达) 等开源工作流引擎选择

    市场上比较有名的开源流程引擎有osworkflow.jbpm.activiti.flowable.camunda.其中:Jbpm4.Activiti.Flowable.camunda四个框架同宗同源, ...

  4. activiti 5.21工作流规则引擎扩展(businessRuleTask)

    2019独角兽企业重金招聘Python工程师标准>>> 背景介绍: 公司有自己的规则引擎配置平台,执行核心为drools,配置后生成规则脚本,存入数据库,执行的时候调用drools的 ...

  5. Liferay7 BPM门户开发之11: Activiti工作流程开发的一些统一规则和实现原理(完整版)...

    注意:以下规则是我为了规范流程的处理过程,不是Activiti公司的官方规定. 1.流程启动需要设置启动者,在Demo程序中,"启动者变量"名统一设置为initUserId 启动时 ...

  6. 《Activiti 深入BPM工作流 》--- 数据库表的命名规则是什么?

    <Activiti 深入BPM工作流 >---  数据库表的命名规则是什么? 一. 问题:  数据库表的命名规则是什么? 二. 详细      Activiti的表都是以ACT_ 开头. ...

  7. 规则引擎-activiti

    规则引擎(Drools): 1. 规则文件结构: 1 package :规则文件的包名,定义一个名称空间.(package必须定义在规则文件的最前面,其他可以自由定义) 2 import: 声明规则在 ...

  8. activiti使用详解

    文章目录 activiti使用详解 快速开始 在项目中添加如下依赖项 修改application.yml配置文件和启动类 在resources目录下新建processes目录并添加如下流程文件task ...

  9. activiti 6.0 editor汉化详解

    添加汉化文件到如下: 源代码: 汉化文件 stencilset_bpmn.json {"title" : "BPMN 2.0标准工具","namesp ...

最新文章

  1. 从0开始的Python学习001快速上手手册
  2. 用 CentOS 做一个 BGP 路由器
  3. java super extends_Java继承extends与super关键字
  4. 关于Mozilla浏览器不支持innerText的解决办法
  5. Excel 向程序发送命令时出现问题 解决方法 VS
  6. c++学习笔记之类和对象的进阶
  7. 七夕了!!聊聊《最受欢迎的男友职业排行榜Top10》
  8. 恍然小悟,去掉Excel的worksheet(工作表)保护的新方法
  9. 腾讯自研分布式远程Shuffle服务Firestorm正式开源
  10. hdu 1800 Flying to the Mars
  11. 动态sql语句基本语法
  12. centos8网络配置开启wifi_在centos 8中安装各种路由协议
  13. 170925_Spring Cloud 微服务实战(翟永超著) 读书笔记(二)_什么是Spring Cloud Eureka?
  14. Matlab---示波器Scope-Measurements
  15. ,进门安卓手机首选 三星盖世S5670评测
  16. 20221017在线识鸟
  17. 3D打印云平台在线显示
  18. 计算机多系统启动光盘制作,多系统U盘启动盘制作方法图文介绍
  19. 【托业】【跨栏】TEST04
  20. Hexo-显示用户头像

热门文章

  1. es日期format_elasticsearch存储日期格式字段
  2. usaco Sorting a Three-Valued Sequence 三值的排序
  3. 军团要塞2正版服务器,专用服务器配置 - Official TF2 Wiki | Official Team Fortress Wiki
  4. Java快速创建大量对象_3分钟 快速理解JVM创建对象的步骤!
  5. wps解析json数据_通过WordPress HTTP API 获取json内容并解析
  6. java response.write_response设置编码方式 print和write方法的对比
  7. java如何生成唯一码_java – 如何为方法实例生成唯一的哈希码?
  8. java服务器gc停顿_如何避免后台IO高负载造成的长时间JVM GC停顿(转)
  9. mysql replication延迟_MySQL Replication--复制延迟01--源码瞎猜
  10. php jwt使用案例,PHP使用JWT创建Token的实例详解