在 Java 代码中来一段 JavaScript?聊聊 Flowable 中的脚本任务

304 篇文章 966 订阅
订阅专栏

前面的文章我们一起玩了 Flowable 中的 ServiceTask,今天我们再来看看 Flowable 中的脚本任务。

1. 脚本任务

个人感觉脚本任务和我们前面说的 ServiceTask 很像,都是流程走到这个节点的时候自动做一些事情,不同的是,在 ServiceTask 中,流程在这个节点中所做的事情是用 Java 代码写的,在脚本任务中,流程在这个节点中所做的事情则是用其他一些脚本语言如 JavaScript、Groovy、Juel 等写的。

脚本任务的图标如下图所示:

2. 实践

写一个简单的例子我们来一起看下。

2.1 JavaScript 脚本

我们先来看用 JavaScript 写这个脚本。

假设我有如下流程图:

中间这个节点就是一个脚本任务。

选中该节点,我们先配置脚本语言是 JavaScript,如下图:

这里也可以使用简写的 js。

然后再点击右边的脚本,配置脚本,如下图:

上面这里我写了两行 JavaScript 脚本:

  1. 第一行表示流程执行到这里的时候,需要做一个简单的加法运算,a 和 b 两个变量则需要流程传入进来。
  2. 第二行表示往流程中存储一个名为 sum 的变量,变量值就是前面计算的结果,其中 execution 是一个内置变量。这个就类似于我们启动流程时候传入的变量一样。

在 ES6 中我们常用的 let 关键字这里并不支持,这个地方小伙伴们要注意。

配置完成之后,我们下载这个脚本来看下对应的 XML 文件是什么样子:

<process id="demo01" name="测试流程" isExecutable="true">
  <documentation>测试流程</documentation>
  <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
  <sequenceFlow id="sid-33A78082-C2FD-48BE-8B87-99FB20F0B331" sourceRef="startEvent1" targetRef="sid-8D88DFF6-0F37-42FA-9F94-29FE30536094"></sequenceFlow>
  <endEvent id="sid-A5F11956-15EA-4574-98D0-29A4E3DB5495"></endEvent>
  <sequenceFlow id="sid-0698809E-0A6C-4B92-A167-AE96A8CB75F2" sourceRef="sid-8D88DFF6-0F37-42FA-9F94-29FE30536094" targetRef="sid-A5F11956-15EA-4574-98D0-29A4E3DB5495"></sequenceFlow>
  <scriptTask id="sid-8D88DFF6-0F37-42FA-9F94-29FE30536094" scriptFormat="JavaScript" flowable:autoStoreVariables="false">
    <script><![CDATA[var sum=a+b;
execution.setVariable("sum",sum);]]></script>
  </scriptTask>
</process>

小伙伴们看到,scriptTask 中内嵌了一个 script 节点,里边就是我们自己写的脚本内容。

好啦,接下来小伙伴们就可以部署并启动这个流程了,启动代码如下:

@Test
void test01() {
    Map<String, Object> variables = new HashMap<>();
    variables.put("a", 99);
    variables.put("b", 98);
    ProcessInstance pi = runtimeService.startProcessInstanceByKey("demo01", variables);
    logger.info("id:{},activityId:{}", pi.getId(), pi.getActivityId());
}

大家注意启动的时候传递 a 和 b 两个变量。这个流程启动之后,直接就执行结束了,因为流程到达 scriptTask 并不会停止。

不过我们可以在 ACT_HI_VARINST 表中查看流程运行信息:

可以看到,相关的变量和变量值都保存着。

2.2 Groovy 脚本

看懂了 JavaScript 脚本,Groovy 就好懂了。不过 JavaScript 脚本估计大部分搞 Java 的小伙伴都懂,但是 Groovy 可能会比较陌生,我简单介绍下:

Groovy 是 Apache 旗下的一门基于 JVM 平台的动态/敏捷编程语言,在语言的设计上它吸纳了 Python、Ruby 和 Smalltalk 语言的优秀特性,语法非常简练和优美,开发效率也非常高(编程语言的开发效率和性能是相互矛盾的,越高级的编程语言性能越差,因为意味着更多底层的封装,不过开发效率会更高,需结合使用场景做取舍)。并且,Groovy 可以与 Java 语言无缝对接,在写 Groovy 的时候如果忘记了语法可以直接按 Java 的语法继续写,也可以在 Java 中调用 Groovy 脚本,都可以很好的工作,这有效的降低了 Java 开发者学习 Groovy 的成本。Groovy 也并不会替代 Java,而是相辅相成、互补的关系,具体使用哪门语言这取决于要解决的问题和使用的场景。

如果我们想要在流程中使用 Groovy 脚本,那么首先设置脚本格式为 Groovy:

然后设置脚本内容如下:

这段脚本表示流程执行到这个节点的时候输出一个 “hello groovy”(如果你熟悉 Groovy 脚本的话,就知道这段脚本其实也可以直接写 Java 代码,也能执行)。

另外说一句,使用 Groovy 脚本,千万别忘了加 Groovy 依赖,如下:

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
    <version>3.0.13</version>
</dependency>

2.3 Juel 脚本

JuelJava Unified Expression Language 的简称,它具有高性能,插件式缓存,小体积,支持方法调用和多参数调用,可插拔等多种特性,它是 JSP2.1 标准 (JSR-245) 中定义的一部分。尽管 EL 表达式是伴随着 JSP 而生,但现在已经可以在非 JS P应用中使用,相关的 API 放在 javax.el 包里面。

其实像我们之前写的 ${xxx} 这种表达式,其实就是 Juel 了。

来一个简单的例子看下。假设我们想在流程中使用 juel,首先设置脚本格式为 juel:

然后就可以设置具体的脚本内容了,如下:

这段脚本就表示调用一个名为 myServiceTask2 的 Bean 中的 hello 方法。

好啦,Flowable 中支持的三种常见脚本任务就和小伙伴们说完啦,感兴趣的小伙伴欢迎留言讨论~

Flowable进阶学习(十)定时器、ServiceTask服务任务、ScriptTask脚本任务
Huathy的博客
02-11 4779
可以通过给流程定义设置一个启动时间。这个流程就会延迟激活。在激活之前,无法启动该流程。部署流程。
Flowable源码注释(七十)脚本、业务规则、接收任务活动行为类
jinyangjie的博客
03-27 1154
Flowable-6.7.2 源码注释地址:https://github.com/solojin/flowable-6.7.2-annotated ScriptTaskActivityBehavior 脚本任务活动行为类 /** * 脚本任务活动行为类 * * BPMN 2.0脚本任务的实现。 * * @author Joram Barrez * @author Christian Stettler * @author Falko Menge */ public class ScriptTa
Flowable-任务-脚本任务
liuwenjun05101的博客
07-29 1263
脚本任务(Script Task)是一种自动执行的活动。当流程执行到达脚本任务时,会执行相应的脚本,完毕后继续执行后继路线。脚本任务无须人为参与,可以通过定义脚本实现自定义的业务逻辑。
Flowable入门系列文章43 - 脚本任务
分享牛
11-02 2381
flowable入门、flowable现状、flowable开源产品、flwoable入门系列、flowable课程、flowable与activiti区别 Flowable是用Java编写的轻量级业务流程引擎。Flowable流程引擎允许您部署BPMN 2.0流程定义(用于定义流程的行业XML标准),创建 流程定义的流程实例,运行查询,访问活动或历史流程实例以及相关数据等等。本节将逐步介绍各种概念和API,通过您可以在自己的开发 机器上进行的实例进行实现。
Flowable 6.6.0 BPMN用户指南 - 17 高级用例 - 17.12 安全脚本(Secure Scripting)
月满闲庭的博客
01-05 444
17.12 安全脚本(Secure Scripting) By default, when using a script task, the script that is executed has similar capabilities as a Java delegate. It has full access to the JVM, can run forever (due to infinite loops) or use up a lot of memory. However, Java dele
flowable/activity清库脚本
weixin_39102174的博客
11-23 696
DROP TABLE ACT_EVT_LOG; DROP TABLE ACT_GE_PROPERTY; DROP TABLE ACT_HI_IDENTITYLINK; DROP TABLE ACT_HI_TASKINST; DROP TABLE ACT_HI_VARINST; DROP TABLE ACT_ID_BYTEARRAY; DROP TABLE ACT_ID_INFO; DROP TA...
Flowable集成bpmn.js流程心开源系统后台
liuwenjun05101的博客
05-31 4077
后台讲解一、视频路径二、截图预览三、源码路径四、安装步骤1、安装数据库2、配置数据源3、启动应用程序4、访问路径 一、视频路径 二、截图预览 三、源码路径 github源码地址 码云源码地址 四、安装步骤 1、安装数据库 新建一个数据库flow 导入数据库脚本:docs/sql/flow.sql 2、配置数据源 修改flow-admin模块下的resources配置文件application-local.properties spring.datasource.druid.url=jdbc
BPMN2.0之脚本任务
Richard_666的博客
08-26 819
基于Flowable的低代码开源工作流引擎设计源码
最新发布
04-15
基于Flowable的低代码开源工作流引擎设计源码,该项目包含662个文件,主要文件类型有261个java源文件,229个javascript文件,以及70个css样式文件。此外,还包括59个svg图像文件,8个xml配置文件,以及8个sql数据库...
flowable v6.4.2版本文文档
01-10
Flowable V6.4.2版本是针对企业级工作流管理的一个强大工具,它是一个用Java语言开发的轻量级业务流程引擎。该版本的文文档对于国开发者来说尤其重要,因为它提供了详尽的说明,使得理解并使用Flowable变得更加...
Flowable深入浅出-14 Flowable-BPMN操作流程之任务完成
01-19
Flowable深入浅出-14 Flowable-BPMN操作流程之任务完成,欢迎进入我的专栏第14节查看,专栏地址:https://blog.csdn.net/houyj1986/column/info/31755
flowable.oracle.create.6.3.1.sql
06-19
如果你第一次跑Flowable6时,提示jar版本跟数据库版本不一致时,请下载这个脚本,这个是oracle版的。到现在都没搞懂,难道Flowable的开发人员都没测试过么,还是说我忽略了啥东西导致失败,项目第一次用Flowable,决定用Flowable6.3.0,因为这个版本官方有文文档,但是死活跑不起来,最后整理了这个建表脚本,然后把Flowable版本改为6.3.1,最后成功了!
flowable流程在线编辑项目
09-27
最新版flowable6.3.1流程在线编辑项目,war包形式,放置Tomcat的webapp下,自动部署安装。
flowable用户管理项目
09-27
最新版flowable6.3.1用户管理项目,war包形式,放置Tomcat的webapp下,自动部署安装。
flowable代码调用任务监听器
sihuangmeicuo的博客
05-22 881
flowable 自定义事件 代码调用任务监听器
Flowable 如何在任务节点添加抄送人员java代码实现
06-08
下面是两种在 Flowable 任务节点添加抄送人员的 Java 代码实现方式: 1. 使用 MultiInstanceActivityBehavior ```java public class CopyUserTaskBehavior extends AbstractBpmnActivityBehavior { // 抄送...
Flowable集成bpmn.js流程心开源系统前台
liuwenjun05101的博客
05-31 2758
企业级流程心前台视频地址系统预览源码地址安装步骤1、配置数据源2、启动应用程序3、访问路径4、登录账号密码 视频地址 系统预览 源码地址 github源码地址 码云源码地址 安装步骤 1、配置数据源 修改flow-front-rest模块下的resources配置文件application-local.properties spring.datasource.druid.url=jdbc:mysql://localhost:3306/flow?autoReconnect=t
bpmn-js显示Flowable的BpmnModel转换为xml文档的流程图排他网关丢失间“X”
honor_zhang的博客
04-01 4809
第一个想法就是继承类BPMNDIExport,重写方法createBpmnShape,但此方法是静态的,并不能重写,如果完全重写BpmnXMLConverter工作量太大了,放弃。改造xml了?对于convertToXML的结果,进行解析,在相应位置添加上属性isMarkerVisible="true"是不是就可以了。说干就干!!!
Flowable & Groovy
dove_wsy的博客
12-01 977
Flowable & Groovy1. 操作流程变量2. 流程变量打包&解析操作3. DCOM常用3.1 生成工单号3.2 供应商评价3.3 工具领用3.3.1 出库领用3.3.2 汇总归还情况3.4 SCP变更 1. 操作流程变量 // 获取流程变量 def returnUser = execution.getVariable("returnUser") // 设置流程变量,如果流程变量已存在,会用新值覆盖老值 execution.setVariable("forwardPayload"
写文章

热门文章

  • MVCC 水略深,但是弄懂了真的好爽 771223
  • 初识Spring Boot框架 513792
  • Spring RestTemplate中几种常见的请求方式 254250
  • 在Spring Boot中使用Spring Security实现权限控制 190632
  • 使用Spring Boot开发Web项目 167613

分类专栏

  • 关于Spring Boot 304篇
  • Git教程 10篇
  • idea 1篇
  • Spring和SpringMVC框架案例 9篇
  • android基础 53篇
  • 自定义View 9篇
  • 玩转ubuntu 20篇
  • 关于MyBatis 10篇
  • android源码解读 12篇
  • Android5.0 9篇
  • NDK实战 9篇
  • MongoDB教程 20篇
  • Spring Cloud系列 32篇
  • java 170篇
  • 玩转android 152篇
  • javascript 7篇
  • jquery 6篇
  • jquery mobile 4篇
  • 浏览器 2篇
  • chrome 1篇
  • c/c++ 2篇
  • jni 2篇
  • 管中窥豹 219篇
  • json 2篇
  • 新技术 2篇
  • webservice 11篇
  • git 11篇
  • oracle 16篇
  • 数据库 19篇
  • mysql 8篇
  • linux 19篇
  • ubuntu 19篇
  • android5.0 10篇
  • 开源控件
  • JavaEE 92篇
  • elasticsearch 6篇
  • redis 10篇
  • docker 2篇

最新评论

  • 权限想要细化到按钮,怎么做?

    爱吃芝麻汤圆: 有一种可行的操作,除去role表和permission表外,再新建一个role_permission表,主键和外键是roleId和permissionId,字段是true或者false,表示某个角色拥有某个权限

  • 一个比 Nginx 还简单的 Web 服务器

    软件技术NINI: 由浅入深,简单易懂的把网络编程套接字的知识讲的明明白白,不可多得的好文,赞。感谢博主的分享,期待博主持续带来更多好文

  • 为什么我们的微服务中需要网关?

    难搞哦~: 我对这个微服务网关的作用有了进一步理解,但是在实现层我还是不懂,例如你最后举例的客户端用户登录认证功能,当客户端的登录请求到微服务网关,然后微服务网关转发去专门的认证服务,认证后返回JWT字符串,这要怎么返回给客户端呢?难道网关一直阻塞等待认证服务的JWT然后再返回给客户端吗?这就有问题,客户端请求达到网关是会阻塞直到有结果,是不是意味着如果有些请求是耗时很长的,例如请求一部高清电影,一直阻塞到什么时候?不能并发?多个客户端同时请求怎么办呢?

  • 一个比 Nginx 还简单的 Web 服务器

    DebugDiva: Caddy确实是个好东西,轻量级又简单,自动HTTPS和灵活配置让人眼前一亮。用它替代Nginx,配置变得超级容易,还支持静态资源托管,跨平台和高性能。安装方式多样,用包管理器或Docker都行。Caddyfile配置清晰明了,搞定常见需求不在话下,还能处理复杂路由,按需操作,功能强大。

  • Spring Security 配置中的 and 到底该怎么理解?

    2401_86665652: 没看懂

大家在看

  • Java相关面试题(2024大厂高频面试题系列)
  • DzzOffice配置优化
  • cesium绘制矩形、立方体
  • SpringBoot与个人理财:打造现代财务管理工具
  • 国产安路FPGA SD NAND FLASH 初步描述 282

最新文章

  • MySQL8 窗口函数是真的省事!
  • Redis遇到Hash冲突怎么办?
  • Spring Boot3集成 LiteFlow 实现业务流程编排
2024
10月 6篇
09月 14篇
08月 6篇
06月 9篇
05月 2篇
04月 3篇
01月 1篇
2023年63篇
2022年96篇
2021年56篇
2020年95篇
2019年172篇
2018年70篇
2017年77篇
2016年70篇
2015年173篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家小型玻璃钢花盆制造玻璃钢雕塑模型复模玻璃钢卡通雕塑怎么合作梅州玻璃钢景观雕塑四川主题商场美陈供货商定制玻璃钢雕塑推荐厂家海口玻璃钢广场雕塑设计多少钱玻璃钢仿铜雕塑培训公司荷花鱼玻璃钢雕塑浮雕图片鹰潭玻璃钢大白菜雕塑日照动物玻璃钢雕塑制作商场玻璃钢花盆销售金昌玻璃钢雕塑宽城区玻璃钢雕塑工程电话商场美陈亭子吉林玻璃钢动物雕塑厂家批发杭州户外玻璃钢雕塑批发山东常用商场美陈批发价美陈装饰商场创意玻璃钢艺术雕塑口碑好郑州不锈钢景观校园玻璃钢雕塑常用商场美陈哪里买鹤壁玻璃钢仿铜雕塑制作上海仿铜玻璃钢雕塑供应商玻璃钢雕塑摆件收纳广西卡通玻璃钢动物狮子雕塑银川城市玻璃钢雕塑制作山西步行街玻璃钢雕塑晋中玻璃钢仿真水果雕塑价格组合式玻璃钢花盆香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化