偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

在 Java 代碼中來一段 JavaScript?聊聊 Flowable 中的腳本任務

開發(fā) 前端
個人感覺腳本任務和我們前面說的 ServiceTask 很像,都是流程走到這個節(jié)點的時候自動做一些事情,不同的是,在 ServiceTask 中,流程在這個節(jié)點中所做的事情是用 Java 代碼寫的,在腳本任務中,流程在這個節(jié)點中所做的事情則是用其他一些腳本語言如 JavaScript、Groovy、Juel 等寫的。

前面的文章我們一起玩了 Flowable 中的 ServiceTask,今天我們再來看看 Flowable 中的腳本任務。

1. 腳本任務

個人感覺腳本任務和我們前面說的 ServiceTask 很像,都是流程走到這個節(jié)點的時候自動做一些事情,不同的是,在 ServiceTask 中,流程在這個節(jié)點中所做的事情是用 Java 代碼寫的,在腳本任務中,流程在這個節(jié)點中所做的事情則是用其他一些腳本語言如 JavaScript、Groovy、Juel 等寫的。

腳本任務的圖標如下圖所示:

圖片

2. 實踐

寫一個簡單的例子我們來一起看下。

2.1 JavaScript 腳本

我們先來看用 JavaScript 寫這個腳本。

假設我有如下流程圖:

圖片

中間這個節(jié)點就是一個腳本任務。

選中該節(jié)點,我們先配置腳本語言是 JavaScript,如下圖:

圖片

這里也可以使用簡寫的 js。

然后再點擊右邊的腳本,配置腳本,如下圖:

圖片

上面這里我寫了兩行 JavaScript 腳本:

第一行表示流程執(zhí)行到這里的時候,需要做一個簡單的加法運算,a 和 b 兩個變量則需要流程傳入進來。

第二行表示往流程中存儲一個名為 sum 的變量,變量值就是前面計算的結果,其中 execution 是一個內(nèi)置變量。這個就類似于我們啟動流程時候傳入的變量一樣。

在 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 中內(nèi)嵌了一個 script 節(jié)點,里邊就是我們自己寫的腳本內(nèi)容。

好啦,接下來小伙伴們就可以部署并啟動這個流程了,啟動代碼如下:

@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 兩個變量。這個流程啟動之后,直接就執(zhí)行結束了,因為流程到達 scriptTask 并不會停止。

不過我們可以在 ACT_HI_VARINST 表中查看流程運行信息:

圖片

可以看到,相關的變量和變量值都保存著。

2.2 Groovy 腳本

看懂了 JavaScript 腳本,Groovy 就好懂了。不過 JavaScript 腳本估計大部分搞 Java 的小伙伴都懂,但是 Groovy 可能會比較陌生,我簡單介紹下:

Groovy 是 Apache 旗下的一門基于 JVM 平臺的動態(tài)/敏捷編程語言,在語言的設計上它吸納了 Python、Ruby 和 Smalltalk 語言的優(yōu)秀特性,語法非常簡練和優(yōu)美,開發(fā)效率也非常高(編程語言的開發(fā)效率和性能是相互矛盾的,越高級的編程語言性能越差,因為意味著更多底層的封裝,不過開發(fā)效率會更高,需結合使用場景做取舍)。并且,Groovy 可以與 Java 語言無縫對接,在寫 Groovy 的時候如果忘記了語法可以直接按 Java 的語法繼續(xù)寫,也可以在 Java 中調(diào)用 Groovy 腳本,都可以很好的工作,這有效的降低了 Java 開發(fā)者學習 Groovy 的成本。Groovy 也并不會替代 Java,而是相輔相成、互補的關系,具體使用哪門語言這取決于要解決的問題和使用的場景。

如果我們想要在流程中使用 Groovy 腳本,那么首先設置腳本格式為 Groovy:

圖片

然后設置腳本內(nèi)容如下:

圖片

這段腳本表示流程執(zhí)行到這個節(jié)點的時候輸出一個 "hello groovy"(如果你熟悉 Groovy 腳本的話,就知道這段腳本其實也可以直接寫 Java 代碼,也能執(zhí)行)。

另外說一句,使用 Groovy 腳本,千萬別忘了加 Groovy 依賴,如下:

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

2.3 Juel 腳本

Juel? 是 Java Unified Expression Language 的簡稱,它具有高性能,插件式緩存,小體積,支持方法調(diào)用和多參數(shù)調(diào)用,可插拔等多種特性,它是 JSP2.1 標準 (JSR-245) 中定義的一部分。盡管 EL 表達式是伴隨著 JSP 而生,但現(xiàn)在已經(jīng)可以在非 JS P應用中使用,相關的 API 放在 javax.el 包里面。

其實像我們之前寫的 ${xxx} 這種表達式,其實就是 Juel 了。

來一個簡單的例子看下。假設我們想在流程中使用 juel,首先設置腳本格式為 juel:

圖片

然后就可以設置具體的腳本內(nèi)容了,如下:

圖片

這段腳本就表示調(diào)用一個名為 myServiceTask2 的 Bean 中的 hello 方法。

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2022-06-21 12:27:12

JavaScript前端

2012-03-01 14:13:36

Java

2023-09-05 09:42:18

if分支源碼

2020-12-31 10:14:42

防注入代碼繞過

2019-07-23 15:04:54

JavaScript調(diào)用棧事件循環(huán)

2020-10-27 07:51:12

Shell腳本日期

2025-06-11 08:20:00

JVM線程代碼

2014-07-08 09:21:10

死代碼創(chuàng)意歌曲

2015-03-27 11:34:59

JavaJava編寫引發(fā)內(nèi)存泄露

2018-06-19 08:02:00

統(tǒng)計程序微信

2020-11-20 07:51:02

JavaSPI機制

2018-11-02 16:16:41

程序硬盤存儲

2024-03-04 08:45:30

JavaScript深度拷貝對象

2020-08-18 18:11:54

架構師腳本語言

2021-02-04 07:55:28

代碼離職互聯(lián)網(wǎng)

2023-04-06 00:22:19

JavaScrip任務開發(fā)

2021-07-26 23:39:20

Java變量代碼

2022-12-06 08:12:11

Java關鍵字

2022-04-02 08:14:02

JavaThreadLoca數(shù)據(jù)

2021-12-11 19:00:54

Java中斷機制
點贊
收藏

51CTO技術棧公眾號