当前位置: 首页 > 后端技术 > Java

Java代码中的一段JavaScript?说说Flowable中的脚本任务

时间:2023-04-01 16:22:43 Java

上一篇我们玩玩了Flowable中的ServiceTask。今天我们就来看看Flowable中的脚本任务。1.脚本任务个人感觉脚本任务和我们前面说的ServiceTask很像。当进程到达这个节点时,它会自动做一些事情。不同的是,在ServiceTask中,进程在这个节点做了什么,用的是脚本任务,进程在这个节点做了什么,是用其他脚本语言写的,比如JavaScript、Groovy、Juel等。脚本任务如下图所示:2.练习写一个简单的例子下面我们一起来看看吧。2.1JavaScript脚本让我们先看看用JavaScript编写这个脚本。假设我有如下流程图:中间的节点是一个脚本任务。选择该节点,我们首先配置脚本语言为JavaScript,如下图所示:这里也可以使用简写的js。然后点击右边的脚本配置脚本,如下图:上面我写了两行JavaScript脚本:第一行表示这里执行流程的时候,需要进行简单的加法运算,两个变量a和b需要在流程中传入,第二行表示在流程中存储一个名为sum的变量,该变量的值是前面计算的结果,其中execution是一个内置变量.这类似于我们启动流程时传入的变量。这里不支持我们在ES6中常用的let关键字,请注意这个地方。配置完成后,我们下载这个脚本,看看对应的XML文件是什么样子的:id="startEvent1"flowable:formFieldValidation="true">朋友看到了,在scriptTask中有一个脚本节点是embedded,就是我们自己写的脚本的内容。接下来小伙伴们就可以部署开始这个流程了。启动代码如下:@Testvoidtest01(){Mapvariables=newHashMap<>();variables.put("a",99);变量.put("b",98);ProcessInstancepi=runtimeService.startProcessInstanceByKey("demo01",变量);logger.info("id:{},activityId:{}",pi.getId(),pi.getActivityId());}大家注意在启动的时候传递两个变量a和b。进程启动后,直接结束执行,因为进程不会走到scriptTask就停止。不过,我们可以在ACT_HI_VARINST表中查看进程运行信息:可以看到,相关的变量和变量值都被保存了。2.2Groovy脚本一旦理解了JavaScript脚本,就可以轻松理解Groovy。不过JavaScript脚本估计大部分搞Java的小伙伴都懂,但是Groovy可能比较陌生。简单介绍一下:Groovy是Apache下一种基于JVM平台的动态/敏捷编程语言。在语言设计上,吸收了Python、Ruby、Smalltalk语言的优秀特性,语法非常简洁美观,开发效率也非常高(编程语言的开发效率和性能都是矛盾,而且高级编程语言的性能更差,因为意味着更多的底层封装,但开发效率会更高,需要结合使用场景做出取舍).而且,Groovy可以与Java语言无缝连接。在写Groovy的时候,如果忘记了语法,可以直接按照Java语法继续写,也可以调用Java中的Groovy脚本,效果很好,有效降低了Java开发者学习Groovy的成本。Groovy不会取代Java,而是一种相辅相成的关系。使用哪种语言取决于要解决的问题和使用场景。如果我们要在流程中使用Groovy脚本,首先设置脚本格式为Groovy:然后设置脚本内容如下:该脚本表示当流程执行到该节点时,输出一个“hellogroovy”(如果你是熟悉Groovy脚本,就知道这个脚本其实可以直接写Java代码,也可以执行)。另外,在使用Groovy脚本时,不要忘记添加Groovy依赖,如下:org.codehaus.groovygroovy-all3.0。132.3Juel脚本Juel是JavaUnifiedExpressionLanguage的缩写。JSP2.1标准(JSR-245)中的部分定义。EL表达式虽然是伴随JSP诞生的,但现在也可以在非JSP应用中使用,相关的API都放在了javax.el包中。其实像我们之前写的${xxx}这样的表达式其实就是juel。让我们看一个简单的例子。假设我们要在流程中使用juel,首先设置脚本格式为juel:然后就可以设置具体的脚本内容,如下:这个脚本就是调用一个名为myServiceTask2的Bean中的hello方法。好了,说下Flowable支持的三种常见的脚本任务。欢迎感兴趣的朋友留言讨论~