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

Flowable 外置的 HTML 表單怎么玩?

開發(fā) 項目管理
現在的 flowable 中,我們既可以利用 JSON 的形式來定義 form 表單,也可以直接就使用 HTML 來定義,都是 OK 的。本文為了直觀,松哥這里采用 HTML 來定義表單。

上篇文章我們一起學習了 Flowable 中的動態(tài)表單,動態(tài)表單說白了就是把變量打包定義,零存整取。但是小伙伴們可能很難實實在在 GET 到動態(tài)表單一些有創(chuàng)造性的功能,所以今天我們就來繼續(xù)看看 Flowable 中的外置表單怎么玩,這個跟動態(tài)表單有一些本質上的差別。

1. 外置表單

首先,所謂的外置表單,其實說白了,類似我們平時在 HTML 中寫的 form 表單。

現在的 flowable 中,我們既可以利用 JSON 的形式來定義 form 表單,也可以直接就使用 HTML 來定義,都是 OK 的。本文為了直觀,松哥這里采用 HTML 來定義表單。

現在假設我有如下一個請假流程:

圖片

在開始節(jié)點中,我們需要一個表單來輸入用戶提交的請假信息,在組長審批和經理審批這兩個節(jié)點中我們希望能夠看到用戶提交的請假信息,那么我們準備兩個表單文件,第一個是提交請假信息的表單文件 askleave.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form actinotallow="">
<table>
<tr>
<td>請假天數:</td>
<td><input type="text" name="days"></td>
</tr>
<tr>
<td>請假理由:</td>
<td><input type="text" name="reason"></td>
</tr>
<tr>
<td>起始時間:</td>
<td><input type="date" name="startTime"></td>
</tr>
<tr>
<td>結束時間:</td>
<td><input type="date" name="endTime"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>

小伙伴們看到,這其實就是一個普通的 HTML 頁面,這里為了省事,我就沒寫 form 的 action 了。

還有一個是查看用戶提交的請假信息的表單 leader_approval.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form actinotallow="">
<table>
<tr>
<td>請假天數:</td>
<td><input type="text" name="days" value="${days}"></td>
</tr>
<tr>
<td>請假理由:</td>
<td><input type="text" name="reason" value="${reason}"></td>
</tr>
<tr>
<td>起始時間:</td>
<td><input type="date" name="startTime" value="${startTime}"></td>
</tr>
<tr>
<td>結束時間:</td>
<td><input type="date" name="endTime" value="${endTime}"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>

和前面的 askleave.html 文件相比,leader_approval.html 文件中,各個表單屬性只是多了 value 屬性而已,value 給了一個預填的變量,其他都是一樣的。

兩個表單文件定義完成之后,接下來我們?yōu)槲覀兊牧鞒虂砼渲眠@兩個表單文件,如下圖,為開始節(jié)點設置表單 key 為 askforleave.html,為組長審批和經理審批節(jié)點設置表單 key 為 leader_approval.html:

圖片

圖片

另:在 Spring Boot 項目中,外置表單默認放在 resources/forms 目錄下,也就是說,凡是放在這個目錄下的表單文件,會被自動部署(要求文件后綴為 .form)。

好啦,這樣我們的流程圖就準備完成了。

2. 流程部署

小伙伴們需要注意,外置表單的部署需要和流程圖一起部署,只有一起部署,他們才會有相同的 DEPLOYMENT_ID,否則兩者的 DEPLOYMENT_ID 不同,在后續(xù)的查找中就找不到對應的表單。

因此,我們來修改一下流程部署的接口:

@RestController
public class ProcessDeployController {

@Autowired
RepositoryService repositoryService;

@PostMapping("/deploy")
public RespBean deploy(MultipartFile[] files) throws IOException {
System.out.println(new Date());
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment()
.category("javaboy的工作流分類")
.name("javaboy的工作流名稱")
.key("javaboy的工作流key666");
for (int i = 0; i < files.length; i++) {
MultipartFile file = files[i];
deploymentBuilder.addInputStream(file.getOriginalFilename(), file.getInputStream());
}
Deployment deployment = deploymentBuilder
.deploy();
return RespBean.ok("部署成功", deployment.getId());
}
}

小伙伴們看到,這里我將上傳文件改為了數組,也就是流程圖、form 表單等統(tǒng)統(tǒng)都以文件的形式上傳,然后在部署的時候,統(tǒng)一都調用 addInputStream 方法進行添加。

我們來看下使用 POSTMAN 部署的方式:

圖片

部署成功之后,我們來看下 ACT_GE_BYTEARRAY 表中的記錄,如下:

圖片

小伙伴們看到,四條記錄具有相同的 DEPLOYMENT_ID,這一點尤為重要。

3. 流程開啟與執(zhí)行

在流程開啟之前,我們首先可以通過如下方式查詢啟動節(jié)點上的表單內容:

@Test
void test05(){
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().latestVersion().processDefinitionKey("FormDemo02").singleResult();
String startFormKey = formService.getStartFormKey(pd.getId());
String renderedStartForm = (String) formService.getRenderedStartForm(pd.getId());
System.out.println("startFormKey = " + startFormKey);
System.out.println("renderedStartForm = " + renderedStartForm);
}

控制臺輸出的內容如下:

圖片

可以看到,表單的內容就被輸出來了。

如果我們這里是一個 Web 工程,那么可以通過 Ajax 來請求到這個表單數據,并動態(tài)渲染到前端,然后在前端輸入對應的值,點擊提交按鈕,就可以在服務端開啟一個流程了。

服務端開啟流程方式如下:

@Test
void test02(){
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionKey("FormDemo02").latestVersion().singleResult();
Map<String, String> vars = new HashMap<>();
vars.put("startTime", "2022-10-10 10:10");
vars.put("endTime", "2022-10-12 10:10");
vars.put("reason", "玩兩天");
vars.put("days", "3");
ProcessInstance pi = formService.submitStartFormData(pd.getId(), vars);
}

調用 submitStartFormData 方法來開啟一個流程,我這里參數直接硬編碼了。

流程開啟之后,接下來組長 zhangsan 要來審批這個流程,審批之前他需要先查看一下用戶提交的表單信息,查看方式如下:

@Test
void test06(){
Task task = taskService.createTaskQuery().taskAssignee("zhangsan").singleResult();
String renderedTaskForm = (String) formService.getRenderedTaskForm(task.getId());
System.out.println("renderedTaskForm = " + renderedTaskForm);
}

小伙伴們注意,這個 getRenderedTaskForm 方法只有外置表單才有,動態(tài)表單調用這個方法是沒有東西的,因為動態(tài)表單單純的就只是變量的傳遞,不涉及到渲染問題,我們來看下這里打印出來的結果:

圖片

小伙伴們看到,和前面的表單相比,這里的表單都渲染出來了對應的值。如果這是一個 Web 項目,那么我們就可以使用 Ajax 請求這個渲染后的表單,并展示在前端頁面。當然實際審批中,這里可以有更多的字段,組長填完之后,進入到下一個環(huán)節(jié)。

zhangsan 進行流程審批的代碼如下:

@Test
void test08(){
Task task = taskService.createTaskQuery().taskAssignee("zhangsan").singleResult();
Map<String, String> vars = new HashMap<>();
vars.put("startTime", "2022-10-30 10:10");
vars.put("endTime", "2022-12-30 10:10");
vars.put("reason", "玩十天");
vars.put("days", "10");
formService.submitTaskFormData(task.getId(),vars);
}

可以使用 formService#submitTaskFormData 方法進行審批,也可以使用 taskService.complete 方法進行審批。

剩下的玩法就和普通流程一樣了。

好啦,這就是和大家介紹的外置表單。

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

2022-11-22 11:47:25

JSON格式外置表單

2022-10-08 11:40:18

Receive阻塞Trigger

2011-07-25 16:32:08

HTML 5

2016-09-27 19:28:37

2011-02-23 14:57:41

webweb開發(fā)HTML

2011-06-16 14:49:39

HTML5

2023-02-13 18:32:59

AI繪畫

2024-03-15 08:06:58

MySQLJOIN命令

2022-06-21 14:18:06

RBACTienChin項目

2011-12-16 10:08:36

Node.js

2018-06-26 15:58:39

進程內緩存緩存數據

2023-05-03 21:14:05

UbuntuwindowsIntel

2020-05-28 15:41:48

微軟C+語言

2017-03-27 15:07:15

云計算2BApp Store

2011-02-24 11:10:40

2009-06-30 11:18:16

HTML表單JSP教程

2012-06-26 11:27:40

Windows Pho

2011-05-04 12:57:50

連供外置墨盒工作原理

2022-11-08 10:52:25

Flowable節(jié)點表單

2020-10-10 08:49:02

JS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天操天天射天天舔 | 手机av免费在线 | 99久久婷婷 | 伊人精品在线视频 | 国产一区二区三区四区在线观看 | 一级欧美黄色片 | 欧美日韩在线观看视频 | 日日碰狠狠躁久久躁婷婷 | 国产在线不卡视频 | xxxxx黄色片 欧美一区免费 | 久久综合久 | 欧美在线综合 | 91免费看片| 国产激情视频网址 | 美女视频一区二区三区 | 欧美精品久久久 | 国产亚洲精品综合一区 | 丁香五月网久久综合 | 欧美一区二区三区视频 | 亚洲欧美激情精品一区二区 | 国产区在线视频 | 午夜视频免费网站 | 日韩欧美一级精品久久 | 一区二区三区中文 | 免费av毛片 | 中文字幕av网站 | 日韩欧美在线播放 | 中文精品一区二区 | 欧美精品综合在线 | 日本不卡高清视频 | 国产日韩精品视频 | 欧美精品在线播放 | 国产成人综合在线 | 欧美在线观看免费观看视频 | 日韩欧美手机在线 | 色婷婷综合久久久中字幕精品久久 | 国产精品爱久久久久久久 | 成人av电影免费在线观看 | 国产 日韩 欧美 在线 | 亚洲视频一区在线观看 | 国产成人网 |