activiti:initiator详解
来源:互联网 发布:jsp网上订餐系统源码 编辑:程序博客网 时间:2024/06/05 09:34
在activiti的startEvent中,我们可以通过initiator属性来设置一个变量,然后启动流程时会将authenticatedUserId(流程启动者)的值设置为activiti:initiator设置的字符串为key的流程变量上,下面看下这部分核心代码:
SubmitStartFormCmd的excute方法:
protected ProcessInstance execute(CommandContext commandContext, ProcessDefinitionEntity processDefinition) {
ExecutionEntity processInstance = null;
if (businessKey != null) {
processInstance = processDefinition.createProcessInstance(businessKey);
} else {
processInstance = processDefinition.createProcessInstance();
}
commandContext.getHistoryManager()
.reportFormPropertiesSubmitted(processInstance, properties, null);
StartFormHandler startFormHandler = processDefinition.getStartFormHandler();
startFormHandler.submitFormProperties(properties, processInstance);
processInstance.start();
return processInstance;
}
接下来就是揭开面纱的时候,进入createProcessInstance方法:
public ExecutionEntity createProcessInstance(String businessKey, ActivityImpl initial) {
ExecutionEntity processInstance = null;
if(initial == null) {
processInstance = (ExecutionEntity) super.createProcessInstance();
}else {
processInstance = (ExecutionEntity) super.createProcessInstanceForInitial(initial);
}
processInstance.setExecutions(new ArrayList<ExecutionEntity>());
processInstance.setProcessDefinition(processDefinition);
// Do not initialize variable map (let it happen lazily)
// Set business key (if any)
if (businessKey != null) {
processInstance.setBusinessKey(businessKey);
}
// Inherit tenant id (if any)
if (getTenantId() != null) {
processInstance.setTenantId(getTenantId());
}
// Reset the process instance in order to have the db-generated process instance id available
processInstance.setProcessInstance(processInstance);
// initialize the template-defined data objects as variables first
Map<String, Object> dataObjectVars = getVariables();
if (dataObjectVars != null) {
processInstance.setVariables(dataObjectVars);
}
String authenticatedUserId = Authentication.getAuthenticatedUserId();
String initiatorVariableName = (String) getProperty(BpmnParse.PROPERTYNAME_INITIATOR_VARIABLE_NAME);
if (initiatorVariableName!=null) {
processInstance.setVariable(initiatorVariableName, authenticatedUserId);
}
if (authenticatedUserId != null) {
processInstance.addIdentityLink(authenticatedUserId, null, IdentityLinkType.STARTER);
}
Context.getCommandContext().getHistoryManager()
.recordProcessInstanceStart(processInstance);
if (Context.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
Context.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_CREATED, processInstance));
}
return processInstance;
}
BpmnParse.PROPERTYNAME_INITIATOR_VARIABLE_NAME的值为initiatorVariableName,在StartEvent启动时会通过activiti:initiator设置的字符串来设置key为initiatorVariableName的Map,然后启动流程时就会使用该Map。
如果关于这个问题还有疑问欢迎留言~
- activiti:initiator详解
- activiti:initiator的作用及其使用
- activiti学习资料--initiator的作用及其使用
- iSCSI Target和Initiator安装与操作步骤详解
- Activiti工作流详解一
- activiti工作流详解
- activiti使用详解(一)
- activiti表详解
- activiti的安装详解
- Activiti环境搭建详解
- Activiti配置详解
- SCSI initiator
- quickFIX01 - initiator
- Activiti(一)--安装配置详解
- Activiti工作流表结构详解
- Activiti工作流引擎使用详解
- Activiti入门教程六(详解Activiti中的查询API)
- activiti
- BT How-to
- Snackbar碰到的坑
- 1008 选数
- Java 引用方式
- 《大话设计模式》——读后感 (3)穿什么有这么重要?——装饰模式之理论实例(1)
- activiti:initiator详解
- An ffmpeg and SDL Tutorial 学习笔记(五)
- 关于Android Studio中Git插件使用笔记(提交至Github)
- ORACLE实用函数之一 ratio_to_report的简单使用
- 配置SSH无密钥登陆
- Android Studio中的NDK开发
- 三、http协议概述
- C#高级篇 8
- document对象