activiti:initiator详解

在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。


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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值