public virtual void Execute(PvmExecutionImpl execution) { // reset activity instance id before creating the scope execution.ActivityInstanceId = execution.ParentActivityInstanceId; PvmExecutionImpl propagatingExecution = null; IPvmActivity activity = execution.Activity; if (activity != null && activity.IsScope) { propagatingExecution = (PvmExecutionImpl)execution.CreateExecution(); propagatingExecution.Activity = activity; propagatingExecution.Transition = (execution.Transition); execution.Transition = (null); execution.IsActive = false; execution.Activity = (null); Log.CreateScope(execution, propagatingExecution); propagatingExecution.Initialize(); } else { propagatingExecution = execution; } ScopeCreated(propagatingExecution); }
public virtual void Execute(PvmExecutionImpl execution) { var executionStartContext = execution.ExecutionStartContext; var instantiationStack = executionStartContext.InstantiationStack; var activityStack = instantiationStack.Activities; var currentActivity = activityStack[0]; activityStack.RemoveAt(0); var propagatingExecution = execution; if (currentActivity.IsScope) { propagatingExecution = (PvmExecutionImpl)execution.CreateExecution(); execution.IsActive = false; propagatingExecution.Activity = (ActivityImpl)(currentActivity); propagatingExecution.Initialize(); } else { propagatingExecution.Activity = (ActivityImpl)(currentActivity); } // notify listeners for the instantiated activity propagatingExecution.PerformOperation(OperationOnScopeInitialization); }