日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

工作流实战_02_flowable 流程模板导入

發布時間:2024/9/27 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 工作流实战_02_flowable 流程模板导入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于群里有些朋友對這個flowable還不是很熟悉,在群里的小伙伴的建議下,師傅(小學生05101)制作一個開源的項目源碼,一共大家學習和交流,希望對有幫助,少走彎路 如果有不懂的問題可以入群:633168411 里面都是一些熱心腸的人。



項目地址https://gitee.com/lwj/flowable.git
代碼分支flowable-base
視頻講解地址https://space.bilibili.com/485524575/channel/detail?cid=94579
用戶名密碼
0000001test
0000002test
0000003test
0000004test

文章目錄

      • 1. 演示
      • 2. 導入模板的方法

1. 演示

2. 導入模板的方法

public ModelRepresentation importProcessModel(MultipartFile file, ModelRepresentation model) {String fileName = file.getOriginalFilename();if (fileName != null && (fileName.endsWith(".bpmn") || fileName.endsWith(".bpmn20.xml"))) {try {XMLInputFactory xif = XmlUtil.createSafeXmlInputFactory();InputStreamReader xmlIn = new InputStreamReader(file.getInputStream(), "UTF-8");XMLStreamReader xtr = xif.createXMLStreamReader(xmlIn);BpmnModel bpmnModel = bpmnXmlConverter.convertToBpmnModel(xtr);//模板驗證ProcessValidator validator = new ProcessValidatorFactory().createDefaultProcessValidator();List<ValidationError> errors = validator.validate(bpmnModel);if (CollectionUtils.isNotEmpty(errors)){StringBuffer es = new StringBuffer();errors.forEach(ve -> es.append(ve.toString()).append("/n"));throw new BadRequestException("模板驗證失敗,原因: " + es.toString());}if (CollectionUtils.isEmpty(bpmnModel.getProcesses())) {throw new BadRequestException("No process found in definition " + fileName);}if (bpmnModel.getLocationMap().size() == 0) {BpmnAutoLayout bpmnLayout = new BpmnAutoLayout(bpmnModel);bpmnLayout.execute();}ObjectNode modelNode = bpmnJsonConverter.convertToJson(bpmnModel);org.flowable.bpmn.model.Process process = bpmnModel.getMainProcess();String name = process.getId();if (StringUtils.isNotEmpty(process.getName())) {name = process.getName();}String description = process.getDocumentation();model.setKey(process.getId());model.setName(name);model.setDescription(description);model.setModelType(AbstractModel.MODEL_TYPE_BPMN);User createdBy = SecurityUtils.getCurrentUserObject();//查詢是否已經存在流程模板Model newModel = new Model();List<Model> models = modelRepository.findByKeyAndType(model.getKey(), model.getModelType());if (CollectionUtils.isNotEmpty(models)) {Model updateModel = models.get(0);newModel.setId(updateModel.getId());}newModel.setName(model.getName());newModel.setKey(model.getKey());newModel.setModelType(model.getModelType());newModel.setCreated(Calendar.getInstance().getTime());newModel.setCreatedBy(createdBy.getId());newModel.setDescription(model.getDescription());newModel.setModelEditorJson(modelNode.toString());newModel.setLastUpdated(Calendar.getInstance().getTime());newModel.setLastUpdatedBy(createdBy.getId());newModel.setTenantId(model.getTenantId());newModel = modelService.createModel(newModel, SecurityUtils.getCurrentUserObject());return new ModelRepresentation(newModel);} catch (BadRequestException e) {throw e;} catch (Exception e) {LOGGER.error("Import failed for {}", fileName, e);throw new BadRequestException("Import failed for " + fileName + ", error message " + e.getMessage());}} else {throw new BadRequestException("Invalid file name, only .bpmn and .bpmn20.xml files are supported not " + fileName);}}

總結

以上是生活随笔為你收集整理的工作流实战_02_flowable 流程模板导入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。