python activiti bpmn_技术分享:Activiti动态修改流程

原标题:技术分享:Activiti动态修改流程

Activiti支持动态生成和修改流程,即不通过图形化编辑器,而是使用程序来生成流程或者对现有流程进行修改。

例如我们有如下流程,希望通过动态修改流程的方式,在User Task和End event直接插入一个service task。

程序修改流程的副作用在于,新生成的元素由于没有布局信息,在编辑器中是看不到的,效果如下图。

当然,也可以在修改流程的时候,进行重新layout,这样会影响原来的布局,效果如下图。

具体代码如下

import java.io.FileInputStream;

import java.io.InputStream;

import java.nio.file.Files;

import java.nio.file.Paths;

import javax.xml.stream.XMLInputFactory;

import org.activiti.bpmn.model.Process;

import org.activiti.bpmn.BpmnAutoLayout;

import org.activiti.bpmn.converter.BpmnXMLConverter;

import org.activiti.bpmn.model.BpmnModel;

import org.activiti.bpmn.model.SequenceFlow;

import org.activiti.bpmn.model.ServiceTask;

import org.activiti.bpmn.model.UserTask;

public class Test {

public static void main(String[] args) throws Exception {

InputStream inputStream = new FileInputStream(

E:\\workspace\\eclipse\\activiti\\src\\main\\resources\\before.bpmn);

BpmnXMLConverter converter = new BpmnXMLConverter();

XMLInputFactory factory = XMLInputFactory.newInstance();

BpmnModel bpmnModel = converter.convertToBpmnModel(factory.createXMLStreamReader(inputStream));

Process process = bpmnModel.getMainProcess();

ServiceTask hookTask = new ServiceTask();

hookTask.setName(拦截);

hookTask.setId(hook);

process.addFlowElement(hookTask);

process.findFlowElementsOfType(UserTask.class).forEach(task - {

task.getOutgoingFlows().forEach(flow - {

SequenceFlow toHook = new SequenceFlow();

toHook.setSourceRef(task.getId());

toHook.setTargetRef(hook);

process.addFlowElement(toHook);

SequenceFlow fromHook = new SequenceFlow();

fromHook.setSourceRef(hook);

fromHook.setTargetRef(flow.getTargetRef());

process.addFlowElement(fromHook);

process.removeFlowElement(flow.getId());

});

});

// 这行代码是重新布局

new BpmnAutoLayout(bpmnModel).execute();

Files.write(Paths.get(E:\\workspace\\eclipse\\activiti\\src\\main\\resources\\after.bpmn),

converter.convertToXML(bpmnModel));

}

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值