Activiti 6.0 版本下,版本 5.x 和 7.x 应该也是可以用的。
由于有个需求,更新节点名称后,审批记录中的流程图的节点名称也要同步更新,重新部署自然是可以实现。但现在需求就是不能重新部署。实际只要更新资源文件的就能实现,流程图文件是存储在act_re_bytearray 表中,只需更新 BYTES_ 字段就可以了。
核心代码如下:
注:origActId(待修改的节点ID) 和 paramActName (待修改的节点名称参数),灵活套用即可。
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
for (FlowElement flowElement : bpmnModel.getMainProcess().getFlowElements()) {
if (flowElement.getId().equals(origActId)) {
// 修改节点名称
flowElement.setName(paramActName);
break;
}
}
processEngine.getManagementService().executeCommand(commandContext -> {
ResourceEntityManager resourceEntityManager = commandContext.getResourceEntityManager();
ByteArrayEntityManager byteArrayEntityManager = commandContext.getByteArrayEntityManager();
ProcessDefinition processDefinition = ProcessDefinitionUtil.getProcessDefinition(processDefinitionId);
ResourceEntity resourceEntity = resourceEntityManager.findResourceByDeploymentIdAndResourceName(
processDefinition.getDeploymentId(), processDefinition.getResourceName());
BpmnXMLConverter bpmnXMLConverter = new BpmnXMLConverter();
byte[] bpmnBytes = bpmnXMLConverter.convertToXML(bpmnModel);
ByteArrayEntity byteArrayEntity = byteArrayEntityManager.findById(resourceEntity.getId());
byteArrayEntity.setBytes(bpmnBytes);
byteArrayEntityManager.update(byteArrayEntity, false);
return null;
});
修改后获取到的bpmn对象就是最新的了。之前试了DynamicBpmnService.changeUserTaskName和 ResourceEntityManager.update(ResourceEntity entity, boolean fireUpdateEvent)都不行。最后总算是摸索出完美的解决方法了。
6232



被折叠的 条评论
为什么被折叠?



