Activiti 流程启动的几种方式,java架构师指南网盘下载

map.put(“sex”, “man”);

map.put(“age”, “21”);

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(“my-process”, map);

logger.info(“processInstance = {}”, processInstance);

}

2、processDefinitionId启动

@Test

@org.activiti.engine.test.Deployment(resources = “my-process.bpmn20.xml”)

public void testStartProcessInstanceById() {

RuntimeService runtimeService = activitiRule.getRuntimeService();

Map<String, Object> map = Maps.newHashMap();

map.put(“name”, “zhangxingr”);

map.put(“sex”, “man”);

map.put(“age”, “21”);

ProcessDefinition processDefinition = activitiRule.getRepositoryService()

.createProcessDefinitionQuery().singleResult();

ProcessInstance processInstance = runtimeService

.startProcessInstanceById(processDefinition.getId(), map);

logger.info(“processInstance = {}, process’key = {}, process’name = {}”,

processInstance, processInstance.getProcessDefinitionKey(),

processInstance.getName());

}

3、message启动

根据message启动就要复杂一些,需要改动一下流程定义文件的startEvent,增加messageEventDefinition,流程定义文件如下:

<process id="my-pro

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

cess">

message启动,代码如下:

@Test

@org.activiti.engine.test.Deployment(resources = “my-process-message.bpmn20.xml”)

public void testMessageStart() {

RuntimeService runtimeService = activitiRule.getRuntimeService();

ProcessInstance processInstance = runtimeService

.startProcessInstanceByMessage(“my-message”);

logger.info(“processInstance = {}”, processInstance);

}

根据message启动底层源码实现最终其实还是会走到用processDefinitionId来启动来,所以建议直接使用processDefinitionId方式启动,底层代码如下:

public ProcessInstance execute(CommandContext commandContext) {

if (messageName == null) {

throw new ActivitiIllegalArgumentException(“Cannot start process instance by message: message name is null”);

}

MessageEventSubscriptionEntity messageEventSubscription = commandContext.getEventSubscriptionEntityManager().findMessageStartEventSubscriptionByName(messageName, tenantId);

if (messageEventSubscription == null) {

throw new ActivitiObjectNotFoundException(“Cannot start process instance by message: no subscription to message with name '” + messageName + “’ found.”, MessageEventSubscriptionEntity.class);

}

String processDefinitionId = messageEventSubscription.getConfiguration();

if (processDefinitionId == null) {

throw new ActivitiException(“Cannot start process instance by message: subscription to message with name '” + messageName + “’ is not a message start event.”);

}

DeploymentManager deploymentCache = commandContext.getProcessEngineConfiguration().getDeploymentManager();

ProcessDefinition processDefinition = deploymentCache.findDeployedProcessDefinitionById(processDefinitionId);

if (processDefinition == null) {

throw new ActivitiObjectNotFoundException(“No process definition found for id '” + processDefinitionId + “’”, ProcessDefinition.class);

}

上一篇:threejs vector3叉积


下一篇:Python::OS 模块 -- 进程管理