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());

    }
相关推荐
细节处有神明7 小时前
开源工具推荐 AI 自动生成流程图
ai·流程图·开源软件·ai编程
小狗爱吃黄桃罐头7 小时前
CodeGeex + ProcessOn 绘制源码流程图
流程图·processon
Light607 小时前
进行 MQTT5 的压测:从场景到落地的系统方法论(含脚本、流程图与对比表)
物联网·流程图·压力测试·可观测性·mqtt5·分布式负载
2401_861277557 小时前
软考程序员2017年上半年,流程图逻辑题解析
流程图
檐下翻书17315 小时前
集团组织架构图在线设计 多部门协作编辑工具
大数据·论文阅读·人工智能·物联网·架构·流程图·论文笔记
川石课堂软件测试2 天前
自动化测试的基本概念及常用框架
数据库·python·功能测试·测试工具·单元测试·自动化·流程图
ZeroNews内网穿透6 天前
公网访问本地搭建开源在线流程图工具Draw.io
服务器·数据库·网络协议·安全·http·流程图·draw.io
帅次7 天前
系统分析师:系统规划与分析的业务流程分析、业务流程图、数据与数据流程分析和系统方案建议
流程图·软件工程·软件构建·需求分析·敏捷流程·设计规范·规格说明书
一起学开源13 天前
分布式基石:CAP定理与ACID的取舍艺术
分布式·微服务·架构·流程图·软件工程
晓华-warm15 天前
Warm-Flow 1.8.4 票签新增多种通过率策略!
java·中间件·流程图·jar·开源软件·工作流