Example #1
0
        protected internal override void EventNotificationsCompleted(PvmExecutionImpl execution)
        {
            execution.ContinueIfExecutionDoesNotAffectNextOperation((e) => e.DispatchEvent(null),
                                                                    (e) => {
                var processInstanceStartContext = e.ProcessInstanceStartContext;
                var instantiationStack          = processInstanceStartContext.InstantiationStack;

                if (instantiationStack.Activities.Count == 0)
                {
                    e.Activity = instantiationStack.TargetActivity;
                    e.PerformOperation(PvmAtomicOperationFields.ActivityStartCreateScope);
                }
                else
                {
                    // initialize the activity instance id
                    e.ActivityInstanceId = e.Id;
                    e.PerformOperation(PvmAtomicOperationFields.ActivityInitStack);
                }
            }, execution);
        }
Example #2
0
        public virtual void Execute(PvmExecutionImpl execution)
        {
            execution.ActivityInstanceStarted();
            execution.ContinueIfExecutionDoesNotAffectNextOperation((e) => {
                if (execution.Activity.IsScope)
                {
                    execution.DispatchEvent(null);
                }
            }, (e) =>
            {
                var activityBehavior = ActivityBehaviorUtil.GetActivityBehavior(e);

                var activity = (ActivityImpl)e.Activity;
                Log.DebugExecutesActivity(e, activity, activityBehavior.GetType().FullName);
                //try
                //{
                Log.LogDebug("activityBehavior类型:", activityBehavior.GetType().Name);
                if (activity.IsTransaction)
                {
                    Log.LogDebug("进入SubProcess,并新建事务", activity.ActivityId);
                    context.Impl.Context.CommandContext.AddTransaction();
                }
                if (activity.IsInTransaction)
                {
                    Log.LogDebug("进入SubProcess子Activity:", activity.ActivityId);
                }
                activityBehavior.Execute(e);
                //}
                //catch (Exception e)
                //{
                //    throw new PvmException(
                //        "couldn't execute activity <" + activity.GetProperty("type") + " id=\"" + activity.Id +
                //        "\" ...>: " + e.Message, e);
                //}
            }, execution);
        }