Flowable完整教程之FormService基础篇
前言
一般而言,工作流引擎常用表单有三种:普通表单、外置表单和动态表单。各自都有其优缺点,可根据具体场景灵活选用。需要说明的是,三种表单方式只是在任务节点上用户的表单定义方式上面有差别,而流程的运转机制则完全相同。
以下内容皆是本人原创,创作不易,感谢帮忙点赞、转发,我是爱写代码的成成呀
一、流程图&表单绘制
提示:以下是本篇文章正文内容,下面案例可供参考
1.创建流程
不耽误大家时间,这里流程我已经画好了,有问题可以在下方留言,帮忙点赞、转发,感谢大家支持!
2.给每个节点设置处理人
这里只展示一个节点,其余节点按需设置
3.绘制表单
4.点击鼠标位置,设置表单每个组件相关参数
嗯这里我尽量写的详细点,避免初学者耽误时间,具体内容如下,其余参数参考这个设置好就行了。
当表单创建完成后,回到刚创建流程模板处,给start event设置表单引用,
各位程序猿小伙伴们,这里的表单引用也可以设置在流程中其它节点上哦。
至此咱们的流程图&表单绘制工作做完了,接下来不废话,上代码
二、集成FormService程序编写
1.先把流程模板部署下,这里调的线上接口
2.查询流程定义信息
/**
* 查询流程定义的信息
*/
@Test
public void testDeployQuery() {
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
ProcessDefinition processDefinition = processDefinitionQuery.deploymentId("387448").singleResult();
System.out.println("processDefinition.getDeploymentId() = " + processDefinition.getDeploymentId());
System.out.println("processDefinition.getName() = " + processDefinition.getName());
System.out.println("processDefinition.getDescription() = " + processDefinition.getDescription());
System.out.println("processDefinition.getId() = " + processDefinition.getId());
// 输出结果为:
processDefinition.getId() = holidayRequest:2:2503
processDefinition.getName() = Holiday Request
processDefinition.getDeploymentId() = 2501
processDefinition.getDescription() = null
}
3.流程中的表单有两种:流程开始表单和流程中表单,这里是流程开始表单
/**
* 填写开始表单,启动流程实例
*/
@Test
public void submitStartFormData() {
System.out.println("-------------第一步: 查询出流程定义--------------------------");
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
ProcessDefinition processDefinition = processDefinitionQuery.deploymentId("387448").singleResult();
FormService formService = null;
// 判断是否存在流程开始表单
if (processDefinition.hasStartFormKey()) {
// 获取开始流程表单
formService = processEngine.getFormService();
StartFormData form = formService.getStartFormData(processDefinition.getId());
System.out.println("1.------==----"+form.getFormProperties());
System.out.println("2.------==----"+form.toString());
};
//StartFormData form = formService.getStartFormData(processDefinition.getId());
System.out.println("-------------第二步: 加载表单数据--------------------------");
Map<String, String> map = new HashMap<>();
// 报销名称
map.put("name", "通讯费报销");
// 报销内容
map.put("value", "3月份通讯费报销");
// 报销日期
map.put("time", "2022-03-24");
// 报销人 -即发起人
map.put("user", "张三");
System.out.println("-------------第三步: 启动流程实例--------------------------");
ProcessInstance holidayRequest = formService.submitStartFormData(processDefinition.getId(), UUID.randomUUID().toString(), map);
System.out.println("holidayRequest.getProcessDefinitionId() = " + holidayRequest.getProcessDefinitionId());
System.out.println("holidayRequest.getName() = " + holidayRequest.getName());
System.out.println("holidayRequest.getActivityId() = " + holidayRequest.getActivityId());
System.out.println("holidayRequest.getId() = " + holidayRequest.getId());
}
4. 测试表单数据传输
/**
* 测试任务查询
*/
@Test
public void testQueryFormTask() {
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
// 指定查询的流程key
.processDefinitionKey("form_test")
// 查询这个任务的处理人
.taskAssignee("user2")
.list();
for (Task task : list) {
Map<String, Object> variables = taskService.getVariables(task.getId());
System.out.println("variables.toString() = " + variables.toString());
System.out.println("task.getProcessDefinitionId() = " + task.getProcessDefinitionId());
System.out.println("task.getAssignee() = " + task.getAssignee());
System.out.println("task.getName() = " + task.getName());
System.out.println("task.getDescription() = " + task.getDescription());
}
}
测试结果如下,很显然发起者的表单数据已经在流程中了
log4j:WARN No appenders could be found for logger (org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
variables.toString() = {user1=null, name=通讯费报销, time=2022-03-24, value=3月份通讯费报销, user=张三}
task.getProcessDefinitionId() = form_test:1:387451
task.getAssignee() = user2
task.getName() = 填写报销表
task.getDescription() = null
Process finished with exit code 0
三、外置表单如何跟前端结合
四、测试BladeX流程设计器表单上传组件
五、总结
Flowable集成FormService未完...,将持续更新,以上内容皆是本人原创,创作不易,感谢帮忙点赞、转发,我是爱写代码的成成呀!