使用activity 获取流程中的各个节点id,并导出excel
最近工作中需要梳理 流程中的节点,方便对流程的规则进行初始化的一些默认定义。
talk is cheap ,show code!
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.activiti.bpmn.converter.BpmnXMLConverter;
import org.activiti.bpmn.converter.util.InputStreamProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.util.Collection;
public class ProcessNodesToExcel {
public static void main(String[] args) {
try {
// 获取 ProcessEngine 实例
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取 RepositoryService 对象
RepositoryService repositoryService = processEngine.getRepositoryService();
// 查询已部署的流程定义
ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
Collection<ProcessDefinition> processDefinitions = query.list();
// 创建 Excel 工作簿
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Process Nodes");
// 添加表头
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("Process Definition ID");
headerRow.createCell(1).setCellValue("Process Definition Name");
headerRow.createCell(2).setCellValue("Activity ID");
headerRow.createCell(3).setCellValue("Activity Name");
int rowNum = 1;
// 遍历流程定义,获取流程的节点名称
for (ProcessDefinition processDefinition : processDefinitions) {
String processDefinitionId = processDefinition.getId();
String processDefinitionName = processDefinition.getName();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
// 获取流程的所有节点名称
Collection<org.activiti.bpmn.model.FlowElement> flowElements = bpmnModel.getMainProcess().getFlowElements();
for (org.activiti.bpmn.model.FlowElement flowElement : flowElements) {
if (flowElement instanceof org.activiti.bpmn.model.UserTask) {
String activityId = flowElement.getId();
String activityName = flowElement.getName();
// 创建新行,写入流程节点信息
Row row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(processDefinitionId);
row.createCell(1).setCellValue(processDefinitionName);
row.createCell(2).setCellValue(activityId);
row.createCell(3).setCellValue(activityName);
}
}
}
// 将数据写入 Excel 文件
FileOutputStream fileOut = new FileOutputStream("ProcessNodes.xlsx");
workbook.write(fileOut);
fileOut.close();
// 提示成功导出
System.out.println("成功导出流程节点信息到 Excel 文件。");
}catch (Exception e) {
e.printStackTrace();
}
}
}
以上代码部份由 chatgpt生成