示例#1
0
        public virtual void Execute(PvmExecutionImpl execution)
        {
            execution.ActivityInstanceDone();

            IActivityBehavior activityBehavior = ActivityBehaviorUtil.GetActivityBehavior(execution);

            if (activityBehavior is FlowNodeActivityBehavior)
            {
                FlowNodeActivityBehavior behavior = (FlowNodeActivityBehavior)activityBehavior;

                var activity           = execution.Activity;
                var activityInstanceId = execution.ActivityInstanceId;
                if (!ReferenceEquals(activityInstanceId, null))
                {
                    Log.DebugLeavesActivityInstance(execution, activityInstanceId);
                }

                try
                {
                    behavior.DoLeave(execution);
                }
                //catch (RuntimeException e)
                //{
                //    throw e;
                //}
                catch (System.Exception e)
                {
                    throw new PvmException(
                              "couldn't leave activity <" + activity.GetProperty("type") + " id=\"" + activity.Id +
                              "\" ...>: " + e.Message, e);
                }
            }
            else
            {
                throw new PvmException("Behavior of current activity is not an instance of " +
                                       typeof(FlowNodeActivityBehavior).Name + ". Execution " + execution);
            }
        }