第十九篇Flowable中的动态表单

Posted 波波烤鸭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十九篇Flowable中的动态表单相关的知识,希望对你有一定的参考价值。

Flowable动态表单

  Flowable提供了一种简便灵活的方式,用来为业务流程中的人工步骤添加表单。 有两种使用表单的方法:使用(由表单设计器创建的)表单定义的内置表单渲染,以及外部表单渲染。 使用外部表单渲染时,可以使用(自Explorer web应用V5版本支持的)表单参数;也可以使用表单key定义,引用外部的、使用自定义代码解析的表单。

1.流程绘制

表单设计

2. 案例演示

2.1 部署流程

  流程图绘制好之后我们就可以直接来部署这个流程了

/**
     * Deploy 加V【boge3306】获取代码 
     */

2.2 查看流程关联的表单信息

  我们部署了一个流程后,如果不清楚之前关联了什么表单,表单中有哪些字段,属性是什么?这时我们可以通过定义的流程查询出对应的form表单信息

    @Test
/**
     * Deploy 加V【boge3306】获取代码 
     */

2.3 启动流程

  启动流程的方式有两种,一种是正常的通过RuntimeService来启动,还有一种就是通过FormService来启动,具体代码如下:

/**
     * Deploy 加V【boge3306】获取代码 
     */

2.4 保存表单数据

  在Task执行之前我们也可以保存表单数据到Task对应的Form表单中。

/**
     * Deploy 加V【boge3306】获取代码 
     */

2.5 查看任务表单数据

/**
     * Deploy 加V【boge3306】获取代码 
     */

输出结果

formProperty.getId() = days
formProperty.getName() = 请假天数
formProperty.getValue() = 3
formProperty.getId() = reason
formProperty.getName() = 请假理由
formProperty.getValue() = 出去玩玩11
formProperty.getId() = startDate
formProperty.getName() = 开始日期
formProperty.getValue() = 20220407

2.6 完成任务

  现在就可以通过指派人或者任务编号来完成当前任务,当然这时我们还是可以修改form表单中的数据

/**
     * Deploy 加V【boge3306】获取代码 
     */

2.7 查看完成的Task的表单数据

  一个Task完成后,如果我们想要查看之前的表单的历史数据可以通过如下的方法来实现

/**
     * Deploy 加V【boge3306】获取代码 
     */

3.外置表单

  我们会发现在上面的例子中通过内置的表单,我们需要在每个节点都设置一份表单数据,不是很灵活,这时我们可以单独创建一份表单,然后在对应的节点做应用就可以了。

3.1 创建表单

  表单定义文件是以.form为后缀, 内容格式为Json格式


"key": "form1",
"name": "请假流程",
"fields": [
            
            "id": "startTime",
            "name": "开始时间",
            "type": "date",
            "required": true,
            "placeholder": "empty"
            ,
            
            "id": "days",
            "name": "请假天数",
            "type": "string",
            "required": true,
            "placeholder": "empty"
            ,
            
            "id": "reason",
            "name": "请假原因",
            "type": "text",
            "required": true,
            "placeholder": "empty"
            
    ]

  注意:上面文件中的key是唯一标识,我们在表单处理的时候是根据这个key来获取的哦,

3.2 然后创建流程文件

  流程文件还是以我们上面的案例来演示,主要是对表单这块做了调整

form表单通过引用来关联

完整的xml文件:

/**
     * Deploy 加V【boge3306】获取代码 
     */

3.3 部署流程

  接下来我们先部署流程

/**
     * Deploy 加V【boge3306】获取代码 
     */

3.4 部署表单

  这个步骤很重要,我们需要单独把我们的form文件部署到流程中。

/**
     * Deploy 加V【boge3306】获取代码 
     */

  我们需要通过FormRepositoryService来部署我们的form表单。对应的会在这几种表中生成对应的数据

Form部署表:

Form定义表:

Form资源表:

3.5 启动任务

  带有外置Form表单的流程我们需要通过runtimeService.startProcessInstanceWithForm来启动

    /**
     * 启动流程实例,并且设置对应的值
     */
    @Test
    void startTask()
        Map<String,Object> map = new HashMap<>();
        map.put("days","4");
        map.put("startTime","20220404");
        map.put("reason","出去玩玩");
        ProcessInstance processInstance = runtimeService.startProcessInstanceWithForm(
                "myProcess:1:4"
                , null
                , map
                , "请假流程");
        String id = processInstance.getId();
        System.out.println("id = " + id);

    

可以看到对应的任务

3.6 查看任务表单数据

  在任务处理之前我们可以查看表单的对应信息。

    /**
     * 查看流程定义表单数据
     */
    @Test
    public void getTaskFormData1()
        Task task = taskService.createTaskQuery()
                .processDefinitionId("myProcess:1:4")
                .taskAssignee("zhangsan")
                .singleResult();
        // FormInfo 表单的元数据信息
       /**
     * Deploy 加V【boge3306】获取代码 
     */
    

	/**
	* 查看具体的Task的表单数据
	*/
    @Test
    void getTaskData()
        FormInfo formInfo = taskService.getTaskFormModel("17505");
        System.out.println("formInfo.getId() = " + formInfo.getId());
        System.out.println("formInfo.getName() = " + formInfo.getName());
        System.out.println("formInfo.getKey() = " + formInfo.getKey());
        SimpleFormModel formModel = (SimpleFormModel) formInfo.getFormModel();
        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());
        
    

3.7 完成任务

  在外置表单的场景中我们需要通过taskService.completeTaskWithForm来完成表单的任务

    /**
     * 完成任务
     */
    @Test
    public void completeTaskForm()
        Map<String,Object> map = new HashMap<>();
        map.put("days","4");
        map.put("startTime","20220404");
        map.put("reason","出去玩玩");
        String taskId = "5010";
        String formDefinitionId = "2503";
        String outcome = "波哥";
        taskService.completeTaskWithForm(taskId,formDefinitionId,outcome,map);
    

然后任务就流转到了下一个节点来处理了

搞定~!

以上是关于第十九篇Flowable中的动态表单的主要内容,如果未能解决你的问题,请参考以下文章

python学习[第十九篇] 模块

Python开发第十九篇:Python操作MySQL

第十九篇 ResNet——论文翻译

C++进阶第十九篇——红黑树(概念+代码实现)

flask第十九篇——模板

flask第十九篇——模板