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未完...,将持续更新,以上内容皆是本人原创,创作不易,感谢帮忙点赞、转发,我是爱写代码的成成呀!

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颓了呀

收到你温暖的礼物,超开心,感激

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值