成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 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í)候,表單文件就會(huì)被自動(dòng)部署。并且默認(rèn)情況下,表單文件的后綴是 .form。

不過對(duì)于默認(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)建表單

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

{
"key": "application_form.form",
"name": "經(jīng)理審批表單",
"fields": [
{
"id": "days",
"name": "請(qǐng)假天數(shù)",
"type": "string",
"required": true,
"placeholder": "empty"
},
{
"id": "reason",
"name": "請(qǐng)假原因",
"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)識(shí)符,當(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)會(huì)被當(dāng)成 Swing 里邊的 form 去處理,所以需要小伙伴提前先用其他的編輯器寫好 .form 文件,然后再拷貝到 IDEA 中即可。

3. 創(chuàng)建流程

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

圖片

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

圖片

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

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

4. 測(cè)試

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

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

流程啟動(dòng)成功之后,進(jìn)入到 提交請(qǐng)假申請(qǐng) 環(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() = 請(qǐng)假天數(shù)
field.getValue() = null
field.getType() = text
===============
field.getId() = reason
field.getName() = 請(qǐng)假原因
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)槲覀冞€沒有填寫表單。

接下來我們先來完成 提交請(qǐng)假申請(qǐng) 這一任務(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)入到 組長(zhǎng)審批 這一環(huán)節(jié),現(xiàn)在我們?cè)偃?zhí)行 test01 方法,此時(shí)查詢的就是 組長(zhǎng)審批 這個(gè)任務(wù)的表單信息,最終打印出來日志如下:

formInfo.getId() = a5b1306a-5ab0-11ed-b35b-acde48001122
formInfo.getName() = 經(jīng)理審批表單
formInfo.getKey() = application_form.form
field.getId() = days
field.getName() = 請(qǐng)假天數(shù)
field.getValue() = 10
field.getType() = text
===============
field.getId() = reason
field.getName() = 請(qǐng)假原因
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í)都有對(duì)應(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ù)

2020-09-02 07:19:41

printf 格式化輸出Unix

2019-07-22 08:49:37

PythonJSON編程語(yǔ)言

2023-03-29 09:01:46

HSBRGB模型

2010-01-06 15:03:34

JSON格式封裝

2022-11-08 10:52:25

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

2024-11-25 08:14:09

Gin框架格式

2023-11-29 13:59:00

trait定義接口

2022-08-11 11:35:43

Vuev-model?表單

2022-08-01 21:38:25

Linux fmt命令

2010-01-07 17:41:19

JSON定義法

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)制

2016-11-14 19:45:39

JavaScript

2023-11-27 08:24:57

FormikReact

2010-01-08 15:30:15

JSON格式舉例

2010-01-06 17:06:05

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

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

主站蜘蛛池模板: 亚洲色图网址 | 久久综合888| 久久99久久 | 中文字幕国产一区 | 三级av免费 | 99久久久无码国产精品 | 日韩成人国产 | 一级欧美一级日韩片 | 免费一区 | 欧美精品一区二区三区在线四季 | 一区二区在线看 | 一区二区三区四区不卡视频 | 久久精品免费 | 51ⅴ精品国产91久久久久久 | 欧日韩不卡在线视频 | 亚洲一区视频在线 | 久久国产精品网站 | 欧美日韩精品一区二区三区视频 | 小早川怜子xxxxaⅴ在线 | 久久九九99 | 亚洲视频中文字幕 | 亚洲福利一区 | 91视频网 | 亚洲精品www. | 国产精品不卡视频 | 亚洲国产aⅴ精品一区二区 免费观看av | 中文字幕日韩欧美 | 日韩三区在线 | 视频一区二区三区中文字幕 | 亚洲国产精品网站 | 午夜久久久久久久久久一区二区 | 日本精品在线播放 | 欧美日韩一区在线观看 | 91看国产| 久久久久久亚洲欧洲 | 91精品国产综合久久久久久 | 国产农村一级国产农村 | 99精品国产成人一区二区 | 一区二区中文 | 午夜爱爱毛片xxxx视频免费看 | 97超碰在线播放 |