protected internal virtual void updateAsyncBeforeTargetConfiguration() { AsyncContinuationConfiguration targetConfiguration = new AsyncContinuationConfiguration(); AsyncContinuationConfiguration currentConfiguration = (AsyncContinuationConfiguration)jobEntity.JobHandlerConfiguration; if (org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation_Fields.PROCESS_START.CanonicalName.Equals(currentConfiguration.AtomicOperation)) { // process start always stays process start targetConfiguration.AtomicOperation = org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation_Fields.PROCESS_START.CanonicalName; } else { if (((ActivityImpl)targetScope).IncomingTransitions.Count == 0) { targetConfiguration.AtomicOperation = org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation_Fields.ACTIVITY_START_CREATE_SCOPE.CanonicalName; } else { targetConfiguration.AtomicOperation = org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation_Fields.TRANSITION_CREATE_SCOPE.CanonicalName; } } jobEntity.JobHandlerConfiguration = targetConfiguration; }
public virtual IJobHandlerConfiguration NewConfiguration(string canonicalString) { var configParts = TokenizeJobConfiguration(canonicalString); var configuration = new AsyncContinuationConfiguration(); configuration.AtomicOperation = configParts[0]; configuration.TransitionId = configParts[1]; return(configuration); }
protected internal override void migrateJobHandlerConfiguration() { AsyncContinuationConfiguration configuration = (AsyncContinuationConfiguration)jobEntity.JobHandlerConfiguration; if (AsyncAfter) { updateAsyncAfterTargetConfiguration(configuration); } else { updateAsyncBeforeTargetConfiguration(); } }
protected internal virtual void updateAsyncAfterTargetConfiguration(AsyncContinuationConfiguration currentConfiguration) { ActivityImpl targetActivity = (ActivityImpl)targetScope; IList <PvmTransition> outgoingTransitions = targetActivity.OutgoingTransitions; AsyncContinuationConfiguration targetConfiguration = new AsyncContinuationConfiguration(); if (outgoingTransitions.Count == 0) { targetConfiguration.AtomicOperation = org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation_Fields.ACTIVITY_END.CanonicalName; } else { targetConfiguration.AtomicOperation = org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation_Fields.TRANSITION_NOTIFY_LISTENER_TAKE.CanonicalName; if (outgoingTransitions.Count == 1) { targetConfiguration.TransitionId = outgoingTransitions[0].Id; } else { TransitionImpl matchingTargetTransition = null; string currentTransitionId = currentConfiguration.TransitionId; if (!string.ReferenceEquals(currentTransitionId, null)) { matchingTargetTransition = targetActivity.findOutgoingTransition(currentTransitionId); } if (matchingTargetTransition != null) { targetConfiguration.TransitionId = matchingTargetTransition.Id; } else { // should not happen since it is avoided by validation throw new ProcessEngineException("Cannot determine matching outgoing sequence flow"); } } } jobEntity.JobHandlerConfiguration = targetConfiguration; }
protected internal override JobHandlerConfiguration resolveJobHandlerConfiguration(AtomicOperationInvocation context) { AsyncContinuationConfiguration configuration = new AsyncContinuationConfiguration(); configuration.AtomicOperation = context.Operation.CanonicalName; ExecutionEntity execution = context.Execution; PvmActivity activity = execution.getActivity(); if (activity != null && activity.AsyncAfter) { if (execution.Transition != null) { // store id of selected transition in case this is async after. // id is not serialized with the execution -> we need to remember it as // job handler configuration. configuration.TransitionId = execution.Transition.Id; } } return(configuration); }