Beispiel #1
0
 public Activity()
 {
     Parameters     = new ActivityParameterDictionary();
     NextActivities = new Dictionary <NextActivityKey, Activity>();
     Tracking       = true;
     Priority       = ActivityPriority.Default;
     _initialized   = false;
 }
Beispiel #2
0
        private NextActivityKey _Execute(WorkflowExecutionContext context, ActivityParameterDictionary execParameters)
        {
            if (Parent != null && !Parent._initialized)
            {
                Parent._Initialize(context);
            }
            _Initialize(context);
            var originalСontextTracking = context.Tracking;

            if (!Tracking)
            {
                context.Tracking = false;
            }
            var originalСontextPriority = context.Priority;

            if (Priority > originalСontextPriority)
            {
                context.Priority = Priority;
            }
            NextActivityKey res = null;

            try
            {
                context.ActivityExecuting(this);
                res = ExecutionMethodCaller.Call(context, execParameters);
                context.ActivityExecuted(this);
            }
            catch (ActivityExecutionInterruptException ex)
            {
                context.ActivityExecutionInterrupted(ex);
            }
            catch (Exception ex)
            {
                var interruptException = ex.InnerException as ActivityExecutionInterruptException;
                if (interruptException != null)
                {
                    context.ActivityExecutionInterrupted(interruptException);
                }
                else
                {
                    throw new ActivityExecutionException("Ошибка выполнения действия", ex, this, context);
                }
            }
            finally
            {
                context.Tracking = originalСontextTracking;
                context.Priority = originalСontextPriority;
                _Uninitialize(context);
            }
            return(res);
        }
Beispiel #3
0
        private void InitProperties(WorkflowExecutionContext context, ActivityParameterDictionary parameters)
        {
            var type = GetType();

            foreach (var param in parameters.Values)
            {
                PropertyInfo propInfo;
                try
                {
                    propInfo = type.GetProperty(param.Name, true, true);
                }
                catch (Exception ex)
                {
                    throw new ActivityExecutionException(
                              string.Format("Ошибка получения информации о св-ве {0}", param.Name), ex, this, context);
                }
                object propValue;
                try
                {
                    propValue = param.GetValue();
                }
                catch (Exception ex)
                {
                    throw new ActivityExecutionException(
                              string.Format("Ошибка получения значения для св-ва {0}", param.Name), ex, this, context);
                }
                try
                {
                    if (propValue != null)
                    {
                        try
                        {
                            propValue = propInfo.PropertyType.ConvertToType(propValue);
                        }
                        catch (Exception ex)
                        {
                            throw new InvalidCastException(
                                      string.Format("Ошибка приведения значения '{0}' к типу {1}",
                                                    propValue, propInfo.PropertyType.Name), ex);
                        }
                    }
                    propInfo.SetValue(this, propValue, null);
                }
                catch (Exception ex)
                {
                    throw new ActivityExecutionException(
                              string.Format("Ошибка установки значения для св-ва {0}", param.Name), ex, this, context);
                }
            }
        }
Beispiel #4
0
        internal NextActivityKey Execute(WorkflowExecutionContext context, ActivityParameterDictionary parameters)
        {
            var execParameters = new ActivityParameterDictionary();

            foreach (var param in parameters.Values)
            {
                execParameters.Add(param);
            }
            foreach (var param in Parameters)
            {
                if (!execParameters.ContainsKey(param.Name))
                {
                    execParameters.Add(param);
                }
            }
            return(_Execute(context, execParameters));
        }
Beispiel #5
0
        internal NextActivityKey ExecuteNestedActivity(
            WorkflowExecutionContext context, ActivityParameterDictionary parameters)
        {
            InitProperties(context, parameters);
            var nextActivityKey          = context.DefaultNextActivityKey;
            var currentExecutingActivity = GetStartActivity(context);

            while (currentExecutingActivity != null)
            {
                var returnActivity = currentExecutingActivity as ReturnActivity;
                if (returnActivity != null)
                {
                    return(returnActivity.Result);
                }
                try
                {
                    nextActivityKey = currentExecutingActivity.Execute(context);
                }
                catch (ActivityExecutionInterruptException ex)
                {
                    currentExecutingActivity = context.GetToggledActivity(ex);
                    continue;
                }
                catch (Exception ex)
                {
                    throw new ActivityExecutionException(
                              "Ошибка выполнения действия", ex, currentExecutingActivity, context);
                }
                currentExecutingActivity = GetNextActivity(currentExecutingActivity, nextActivityKey);
                if (currentExecutingActivity == null)
                {
                    return(context.DefaultNextActivityKey);
                }
            }
            return(nextActivityKey);
        }
 public NextActivityKey Call(WorkflowExecutionContext context, ActivityParameterDictionary parameters)
 {
     return((NextActivityKey)Call(new object[] { context, parameters }));
 }
Beispiel #7
0
 internal NextActivityKey MonitorExit( 
     WorkflowExecutionContext context, ActivityParameterDictionary parameters) 
 { 
     context.MonitorExit(LockName); 
     return context.DefaultNextActivityKey; 
 } 
 internal NextActivityKey SubscribeToEvent(
     WorkflowExecutionContext context, ActivityParameterDictionary parameters)
 {
     context.SubscribeToEvent(Event, Handler, HandlingType);
     return(context.DefaultNextActivityKey);
 }
Beispiel #9
0
 internal NextActivityKey ExecuteReferencedActivity(
     WorkflowExecutionContext context, ActivityParameterDictionary parameters)
 {
     return(ActivityForExecute.Execute(context, parameters));
 }
Beispiel #10
0
 internal NextActivityKey UnsubscribeFromEvent(
     WorkflowExecutionContext context, ActivityParameterDictionary parameters)
 {
     context.UnsubscribeFromEvent(Event, Handler);
     return(context.DefaultNextActivityKey);
 }