当前位置: 首页 > news >正文

flowable05外置表单和绘制流程图

绘制流程进度图

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

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

    @Testpublic 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,,直接以面向对象的方式,访问流程元素


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

    @Testpublic 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.createActivityInstanceQueryHistoryService 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

<!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}去接收数据,,如果数据没有传过来,,这里的变量读取不到就会报错

<!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>

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

在这里插入图片描述

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

在这里插入图片描述

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

@Testpublic 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());}

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

    @Testpublic 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);}

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

@Testpublic 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);}

第一个用户任务的时候,可以获取预先设置好的表单,,并且把之前填写的表单数据回显回去:
用户审批的时候,,可以修改内容,修改表单的信息,然后完成任务

@Testpublic 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());}
http://www.dtcms.com/a/605374.html

相关文章:

  • UDP网络编程:从客户端封装到服务端绑定的深度实践
  • Arbess从初级到进阶(4) - 使用Arbess+GitLab实现React.js 项目自动化部署
  • 内网穿透技术
  • asp.net做织梦网站长沙商城网站开发
  • [免费]基于Python的深度学习豆瓣电影数据可视化+情感分析推荐系统(Flask+Vue+LSTM+scrapy)【论文+源码+SQL脚本】
  • SQL 分类
  • 微信小程序项目上传到git仓库(完整操作)
  • Vue 3响应式系统的底层机制:Proxy如何实现依赖追踪与自动更新?
  • 【MySQL】MySQL库的操作
  • 研发管理知识库(10)AWS云的核心DevOps工具介绍
  • PostgreSQL 备份导致的 Cache Pollution(缓存污染)
  • 拒绝繁杂,一款轻量,极致简洁的开源DevOps平台 - TikLab
  • 深入解析Flink会话窗口机制
  • 南京建设网站企业wordpress的伪静态
  • redis的下载和安装详解
  • 搜索智能体
  • 第27集科立分板机:东莞科立自动化流水线带领生产新变革
  • 物流网站开发实训离型剂技术支持东莞网站建设
  • Ubuntu 24.04 一站式 Flask 生产部署:pyenv + PyCharm + Gunicorn + Nginx + systemd
  • 青海省公路建设服务网站模块化网站开发
  • 开源CICD工具-Drone
  • 给予虚拟成像台尝鲜版十之二,完善支持 HTML 原型模式
  • 原生表格文本过长展示问题,参考layui长文本,点击出现文本域
  • 桂林网站建设培训asp.net网站建设
  • Ubuntu 24.04 MariaDB 完整安装与配置文档
  • [特殊字符] 在 Linux 上设置 SQLite
  • Arbess从初级到进阶(2) - 使用Arbess+GitLab实现Vue.js项目自动化部署
  • 网站开发外文参考文献邯郸小学网站建设
  • C语言编译器最新版 | 提升开发效率,优化性能
  • 手游网站怎么做企业型网站