本文基于:Activiti 模型管理
Model 模型管理需求:
在模型管理功能基础上添加动态配置外置表单,注意不是内置表单。
温馨提示:不管是内置表单还是外置表单,都是配置在指定模型的节点之上所有我们就必须更新模型Id查询指定模型涉及的节点列表信息。
Model 模型管理之新增表单配置功能:选择转正流程模型,查看节点列表:
温馨提示:这里还欠缺将自定义表单绑定值指定节点上。这个功能会在后期 实现。
SpringBoot 之Activiti Model 模型管理后台SpringBoot 添加流程模型节点查找控制器(NodeController)
package com.zzg.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.zzg.common.activiti.entity.NodeEntity;
import com.zzg.common.activiti.enums.NodeTypeEnum;
import com.zzg.common.vo.Resp;
import org.activiti.bpmn.model.*;
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.w3c.dom.Node;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
@RequestMapping("/node")
@RestController
public class NodeController {
private static Logger logger= LoggerFactory.getLogger(NodeController.class);
@Autowired
private HistoryService historyService;
@Autowired
private RepositoryService repositoryService;
@PostMapping(value = "/findModelAssociationNode/{modelId}")
public Resp> findModelAssociationNode(@PathVariable("modelId") String modelId) throws IOException {
List list = new ArrayList<>();
// 获取模型XML文件
ObjectNode objectNode = (ObjectNode) new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelId));
BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(objectNode);
//获得流程模型的所有节点
Collection flowElements = bpmnModel.getMainProcess().getFlowElements();
// 过滤序列流
List filterFlowElements = flowElements.stream().filter(item -> {
if(item instanceof SequenceFlow){
return false;
}
return true;
}).collect(Collectors.toList());
for(FlowElement e : filterFlowElements) {
NodeEntity entity = new NodeEntity();
String id = null;
String name = null;
String formKey = null;
List formProperties = null;
// 判断节点类型-- 用户任务节点
if (e instanceof UserTask) {
entity.setNodeTypeEnum(NodeTypeEnum.UserTask);
// 节点Id
id =((UserTask)e).getId();
// 节点名称
name = ((UserTask)e).getName();
// 配置表单(外置表单)
formKey = ((UserTask)e).getFormKey();
// 配置表单(内置表单)
formProperties = ((UserTask)e).getFormProperties();
}
// 判断节点类型 -- 开始任务
if(e instanceof StartEvent) {
entity.setNodeTypeEnum(NodeTypeEnum.StartEvent);
// 节点Id
id =((StartEvent)e).getId();
// 节点名称
name = ((StartEvent)e).getName();
// 配置表单(外置表单)
formKey = ((StartEvent)e).getFormKey();
// 配置表单(内置表单)
formProperties = ((StartEvent)e).getFormProperties();
}
// 判断节点类型 -- 结束任务
if(e instanceof EndEvent) {
entity.setNodeTypeEnum(NodeTypeEnum.EndEvent);
// 节点Id
id =((EndEvent)e).getId();
// 节点名称
name = ((EndEvent)e).getName();
}
entity.setId(id);
entity.setName(name);
entity.setFormKey(formKey);
entity.setFormPropertys(formProperties);
list.add(entity);
}
return Resp.OK(list);
}
}
package com.zzg.common.activiti.entity;
import com.zzg.common.activiti.enums.NodeTypeEnum;
import org.activiti.bpmn.model.FormProperty;
import java.util.List;
public class NodeEntity implements java.io.Serializable{
private String id;
private String name;
private String formKey;
private List formPropertys;
private NodeTypeEnum nodeTypeEnum;
public NodeTypeEnum getNodeTypeEnum() {
return nodeTypeEnum;
}
public void setNodeTypeEnum(NodeTypeEnum nodeTypeEnum) {
this.nodeTypeEnum = nodeTypeEnum;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFormKey() {
return formKey;
}
public void setFormKey(String formKey) {
this.formKey = formKey;
}
public List getFormPropertys() {
return formPropertys;
}
public void setFormPropertys(List formPropertys) {
this.formPropertys = formPropertys;
}
}
package com.zzg.common.activiti.enums;
public enum NodeTypeEnum {
StartEvent("开始节点", "start_event"), UserTask("用户任务", "user_task"), EndEvent("结束节点", "end_event");
private String name;
private String type;
NodeTypeEnum(String name, String type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
Model.html 页面添加表单配置前端代码:
**系统 - Layui
** 系统
- 超级管理员
- 基本资料
- 安全设置
- 退了
- 流程管理
- 流程定义
- 表单定义
- 用户管理
- 查询用户
- 新增用户
- 借阅信息
- 所有记录
- 个人记录
- 帮助



