flowable05外置表单和绘制流程图

绘制流程进度图

图片上面的中文乱码:

流程图二进制数据存入的时候,,数据库中预览图片中文是乱码,,,因为部署时flowable使用内部的默认配置,,并没有指定中文字体,,部署的时候就自动生成了,,

手动生成图片的时候,,可以调用DefaultprocessDiagramGenerator 并且明确指定中文字体

java 复制代码
    @Test
    public void test01() throws IOException {

        ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionKey("test-form").latestVersion().singleResult();

        BpmnModel bpmnModel = repositoryService.getBpmnModel(pd.getId());

        // 绘制图片的生成器
        DefaultProcessDiagramGenerator generator = new DefaultProcessDiagramGenerator();

        // 图片乱码
        InputStream inputStream = generator.generateDiagram(bpmnModel,"png",Collections.emptyList(),Collections.emptyList(), "宋体","宋体","宋体",null,1.0);

        FileUtils.copyInputStreamToFile(inputStream,new File("F:\\code\\learn\\learn-flowable\\flowable-demo\\src\\main\\resources\\images\\1.png"));


        inputStream.close();

    }

BpmnModel : 是内存中的流程定义的对象模型,,它包含了流程的所有结构化信息,,能够以编程方式访问和操作流程的各个组成部分,,,无需解析xml,,直接以面向对象的方式,访问流程元素


画流程到哪里了,,画流程的走向,,但是为什么没有线条????

java 复制代码
    @Test
    public void test02() throws IOException {
        ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionKey("test-form").latestVersion().singleResult();

        BpmnModel bpmnModel = repositoryService.getBpmnModel(pd.getId());

        DefaultProcessDiagramGenerator generator = new DefaultProcessDiagramGenerator();

        // 所有已经执行过的活动
        List<String> highLightedActivities = new ArrayList<>();

        // 所有已经执行过的线条
        List<String> highLightedFlows = new ArrayList<>();


//        runtimeService.createActivityInstanceQuery

        HistoryService historyService = processEngine.getHistoryService();
        List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().processInstanceId("7501").list();
        for (HistoricActivityInstance ai : list) {
            
            // todo 为什么历史活动节点表里面 没有连线
            if (ai.getActivityType().equals("sequenceFlow")){
                highLightedFlows.add(ai.getActivityId());
            }else{
                highLightedActivities.add(ai.getActivityId());
            }
        }


        // 图片乱码
        InputStream inputStream = generator.generateDiagram(bpmnModel,"png",highLightedActivities,highLightedFlows, "宋体","宋体","宋体",null,1.0);

        FileUtils.copyInputStreamToFile(inputStream,new File("F:\\code\\learn\\learn-flowable\\flowable-demo\\src\\main\\resources\\images\\2.png"));


        inputStream.close();


    }

外置表单

flowable有内置表单,也有外置表单,,但是一般都用外置表单,,

外置表单有html的也有json的,,但是一般都用html的

引用:https://developer.aliyun.com/article/1233209

先放一个要提交内容的表单:
askleave.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="">
    <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>

这个可以设置在发起的时候,要提交的表单,,,在用户审批的时候,,就需要回显这个填写的表单,,就还需要一个表单,,去接收这个数据,这个表单用${xxx}去接收数据,,如果数据没有传过来,,这里的变量读取不到就会报错

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="">
<!--    查看用户提交的表单,,, 这个表单的属性多了value-->
    <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>

流程发起的时候设置表单:

第一个用户任务的时候,用一个表单去接收并回显数据:

发起一个外置表单的流程:

java 复制代码
    @Test
    public void test20(){


        Deployment deployment = repositoryService.createDeployment().name("test-form").key("test-form")
                .addClasspathResource("test-form.bpmn20.xml")
                .addClasspathResource("askleave.html")
                .addClasspathResource("leader_approval.html")
                .deploy();

        System.out.println("deployment = " + deployment.getId());
    }

在流程启动前,,获取到表单的信息:

java 复制代码
    @Test
    public void test21(){

        ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().latestVersion().processDefinitionKey("test-form").singleResult();

        FormService formService = processEngine.getFormService();

        String startFormKey = formService.getStartFormKey(pd.getId());


        // 查询启动节点的表单内容  ===》 前段拉取到表单内容,,就可以提交数据
        Object renderedStartForm = formService.getRenderedStartForm(pd.getId());

        System.out.println("startFormKey = " + startFormKey);
        System.out.println("renderedStartForm = " + renderedStartForm);
    }

获取到表单信息之后,,就可以填写要填写的数据,,填写数据之后发起流程:

java 复制代码
    @Test
    public void test22(){
        ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionKey("test-form").latestVersion().singleResult();
        Map<String, String> map = new HashMap<>();
        map.put("reason","我想玩两天");
        map.put("days","3");
        map.put("startTime","2022-1-1");
        map.put("endTime","2022-1-1");


        FormService formService = processEngine.getFormService();
        ProcessInstance pi = formService.submitStartFormData(pd.getId(), map);


    }

第一个用户任务的时候,可以获取预先设置好的表单,,并且把之前填写的表单数据回显回去:

用户审批的时候,,可以修改内容,修改表单的信息,然后完成任务

java 复制代码
    @Test
    public void test23(){
        Task task = taskService.createTaskQuery().taskAssignee("zs").singleResult();
        System.out.println("task.getId() = " + task.getId());
        FormService formService = processEngine.getFormService();
        Object renderedTaskForm = formService.getRenderedTaskForm(task.getId());
        System.out.println("renderedTaskForm = " + renderedTaskForm);

        // 审批人 获取到这个form,,可以修改这些表单

        Map<String, String> vars = new HashMap<>();
        vars.put("startTime","xxx");
        vars.put("endTime","yyy");
        vars.put("reason","玩尼玛");


        // 可以使用 submitTaskFormData进行审批,,也可以使用complete 进行审批
        formService.submitTaskFormData(task.getId(),vars);

//        taskService.complete(task.getId());

    }
相关推荐
静听松涛1339 小时前
门诊患者分诊引导流程图设计模板
大数据·论文阅读·人工智能·信息可视化·流程图·健康医疗
min18112345611 小时前
AI从工具向自主决策者的身份转变
大数据·网络·人工智能·架构·流程图
min18112345613 小时前
急诊患者抢救流程流程图学术模板
架构·流程图·健康医疗
川西胖墩墩14 小时前
患者转科交接流程流程图标准格式
大数据·人工智能·架构·流程图·健康医疗·敏捷流程
数说星榆1812 天前
本科毕业设计流程图在线生成
论文阅读·毕业设计·流程图·论文笔记·毕设
静听松涛1332 天前
本科毕业论文流程图制作方法
论文阅读·毕业设计·流程图·论文笔记·毕设
min1811234563 天前
HR人力资源招聘配置流程图制作教程
大数据·网络·人工智能·架构·流程图·求职招聘
Nile3 天前
Skills-Diagram流程图
流程图
檐下翻书1734 天前
HR人力资源管理流程图在线绘制方法
大数据·人工智能·架构·流程图·论文笔记
Coder_Boy_5 天前
基于SpringAI的在线考试系统-核心业务流程图(续)
java·大数据·人工智能·spring boot·流程图