自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用 JSON 格式來定義 Flowable 外置表單

開發(fā) 項(xiàng)目管理
在每一個(gè) filed 的定義中,id 表示字段名,name 則是字段的中文名稱,type 表示字段的類型,require 則表示這個(gè)字段是否是必填字段,placeholder 不用多說,跟我們?nèi)粘J褂玫?input 標(biāo)簽中的 placeholder 的含義一致。

在前面的案例中,我們定義的表單使用了 HTML,實(shí)際上這個(gè)表單不僅可以使用 HTML,也可以使用 JSON 來定義表單,可能也有不少小伙伴在網(wǎng)上已經(jīng)看到過一些使用 JSON 來定義表單的案例,今天這篇文章松哥就來和大家分享一下如何使用 JSON 來定義 Flowable 表單。

1. 默認(rèn)規(guī)則

使用 JSON 來定義 Flowable 表單,我們剛好可以利用 Spring Boot 中的默認(rèn)機(jī)制,即將表單文件置于 classpath:forms 目錄下,那么在系統(tǒng)啟動(dòng)的時(shí)候,表單文件就會被自動(dòng)部署。并且默認(rèn)情況下,表單文件的后綴是 .form。

不過對于默認(rèn)的表單文件位置和表單文件后綴,我們也可以通過在 application.properties 配置文件中添加如下內(nèi)容進(jìn)行修改:

# 默認(rèn)的表單文件后綴
flowable.form.resource-suffixes=**.form
# 默認(rèn)的表單文件位置
flowable.form.resource-location=classpath*:/forms/

2. 創(chuàng)建表單

還是以我們的請假請求為例,我來創(chuàng)建一個(gè)表單文件,文件名為 application_form.form,如下:

{
"key": "application_form.form",
"name": "經(jīng)理審批表單",
"fields": [
{
"id": "days",
"name": "請假天數(shù)",
"type": "string",
"required": true,
"placeholder": "empty"
},
{
"id": "reason",
"name": "請假原因",
"type": "string",
"required": true,
"placeholder": "empty"
},
{
"id": "startTime",
"name": "開始時(shí)間",
"type": "date",
"required": true,
"placeholder": "empty"
},
{
"id": "endTime",
"name": "結(jié)束時(shí)間",
"type": "date",
"required": true,
"placeholder": "empty"
}
]
}

這個(gè) key 就是表單的唯一標(biāo)識符,當(dāng)有多個(gè)表單的時(shí)候,這個(gè)該值不可以重復(fù),name 是表單是名稱,fields 則定義了具體的字段,這里一共有四個(gè)。

在每一個(gè) filed 的定義中,id 表示字段名,name 則是字段的中文名稱,type 表示字段的類型,require 則表示這個(gè)字段是否是必填字段,placeholder 不用多說,跟我們?nèi)粘J褂玫?input 標(biāo)簽中的 placeholder 的含義一致。

OK,這樣,我們的表單現(xiàn)在就創(chuàng)建好了。

由于 .form 文件,在 IDEA 中,默認(rèn)會被當(dāng)成 Swing 里邊的 form 去處理,所以需要小伙伴提前先用其他的編輯器寫好 .form 文件,然后再拷貝到 IDEA 中即可。

3. 創(chuàng)建流程

接下來我們來創(chuàng)建一個(gè)流程圖,流程中中引用這個(gè)表單。流程圖如下:

圖片

在流程圖的三個(gè) UserTask 中,分別通過如下方式去配置表單的標(biāo)識:

圖片

關(guān)于流程圖的其他細(xì)節(jié)我這里就不多說了,前面和大家介紹了很多了。

最后我們下載這個(gè)流程圖,將之放在 Spring Boot 項(xiàng)目的 classpath:/processes/ 目錄下,這樣當(dāng)項(xiàng)目啟動(dòng)的時(shí)候,這個(gè)流程圖會被自動(dòng)部署。

4. 測試

接下來,我們啟動(dòng) Spring Boot 項(xiàng)目,啟動(dòng)之后,流程和表單都會被自動(dòng)部署好,我們執(zhí)行如下代碼啟動(dòng)一個(gè)流程實(shí)例:

@Test
void contextLoads(){
runtimeService.startProcessInstanceByKey("askforleave");
}

流程啟動(dòng)成功之后,進(jìn)入到 提交請假申請 環(huán)節(jié),該環(huán)節(jié)有一個(gè)表單需要填寫,我們可以先通過如下代碼來查看需要填寫的表單內(nèi)容:

@Test
void test01(){
Task task = taskService.createTaskQuery().singleResult();
FormInfo formInfo = taskService.getTaskFormModel(task.getId());
SimpleFormModel formModel = (SimpleFormModel) formInfo.getFormModel();
System.out.println("formInfo.getId() = " + formInfo.getId());
System.out.println("formInfo.getName() = " + formInfo.getName());
System.out.println("formInfo.getKey() = " + formInfo.getKey());
List<FormField> fields = formModel.getFields();
for (FormField field : fields) {
System.out.println("field.getId() = " + field.getId());
System.out.println("field.getName() = " + field.getName());
System.out.println("field.getValue() = " + field.getValue());
System.out.println("field.getType() = " + field.getType());
System.out.println("===============");
}
}

最終打印出來的內(nèi)容如下:

formInfo.getId() = a5b1306a-5ab0-11ed-b35b-acde48001122
formInfo.getName() = 經(jīng)理審批表單
formInfo.getKey() = application_form.form
field.getId() = days
field.getName() = 請假天數(shù)
field.getValue() = null
field.getType() = text
===============
field.getId() = reason
field.getName() = 請假原因
field.getValue() = null
field.getType() = text
===============
field.getId() = startTime
field.getName() = 開始時(shí)間
field.getValue() = null
field.getType() = date
===============
field.getId() = endTime
field.getName() = 結(jié)束時(shí)間
field.getValue() = null
field.getType() = date

小伙伴們看到,打印出來的 value 都是 null,這是因?yàn)槲覀冞€沒有填寫表單。

接下來我們先來完成 提交請假申請 這一任務(wù):

@Test
void test02(){
Task task = taskService.createTaskQuery().singleResult();
Map<String, Object> vars = new HashMap<>();
vars.put("days", 10);
vars.put("reason", "玩一下");
vars.put("startTime", "2022-10-10");
vars.put("endTime", "2022-11-10");
taskService.complete(task.getId(),vars);
}

完成之后,此時(shí)任務(wù)進(jìn)入到 組長審批 這一環(huán)節(jié),現(xiàn)在我們再去執(zhí)行 test01 方法,此時(shí)查詢的就是 組長審批 這個(gè)任務(wù)的表單信息,最終打印出來日志如下:

formInfo.getId() = a5b1306a-5ab0-11ed-b35b-acde48001122
formInfo.getName() = 經(jīng)理審批表單
formInfo.getKey() = application_form.form
field.getId() = days
field.getName() = 請假天數(shù)
field.getValue() = 10
field.getType() = text
===============
field.getId() = reason
field.getName() = 請假原因
field.getValue() = 玩一下
field.getType() = text
===============
field.getId() = startTime
field.getName() = 開始時(shí)間
field.getValue() = 2022-10-10
field.getType() = date
===============
field.getId() = endTime
field.getName() = 結(jié)束時(shí)間
field.getValue() = 2022-11-10
field.getType() = date

可以看到,此時(shí)都有對應(yīng)的 value 了。

后續(xù)的流程就不需要我多說了吧,小伙伴們可以自行嘗試下~

責(zé)任編輯:武曉燕 來源: 江南一點(diǎn)雨
相關(guān)推薦

2022-11-14 10:44:59

HTMLFlowable外置

2024-08-06 11:17:58

SpringJSON數(shù)據(jù)

2019-07-22 08:49:37

PythonJSON編程語言

2020-09-02 07:19:41

printf 格式化輸出Unix

2023-03-29 09:01:46

HSBRGB模型

2010-01-06 15:03:34

JSON格式封裝

2024-11-25 08:14:09

Gin框架格式

2022-11-08 10:52:25

Flowable節(jié)點(diǎn)表單

2023-11-29 13:59:00

trait定義接口

2022-08-11 11:35:43

Vuev-model?表單

2010-01-07 17:41:19

JSON定義法

2022-08-01 21:38:25

Linux fmt命令

2011-05-26 13:54:04

Json

2023-11-12 11:56:28

Json格式弊端

2015-04-15 13:33:23

2024-03-28 10:17:03

JDK 17字符串十六進(jìn)制

2010-01-08 15:30:15

JSON格式舉例

2010-01-06 17:06:05

Json格式

2023-11-27 08:24:57

FormikReact

2010-01-05 14:49:03

JSON格式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號