前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >activiti:initiator详解

activiti:initiator详解

作者头像
johnhuster的分享
发布2022-03-29 14:10:03
5940
发布2022-03-29 14:10:03
举报
文章被收录于专栏:johnhuster

在activiti的startEvent中,我们可以通过initiator属性来设置一个变量,然后启动流程时会将authenticatedUserId(流程启动者)的值设置为activiti:initiator设置的字符串为key的流程变量上,下面看下这部分核心代码:

代码语言:javascript
复制
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方法:

代码语言:javascript
复制
  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。

如果关于这个问题还有疑问欢迎留言~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/07/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档