public Activity() { Parameters = new ActivityParameterDictionary(); NextActivities = new Dictionary <NextActivityKey, Activity>(); Tracking = true; Priority = ActivityPriority.Default; _initialized = false; }
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); }
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); } } }
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)); }
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 })); }
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); }
internal NextActivityKey ExecuteReferencedActivity( WorkflowExecutionContext context, ActivityParameterDictionary parameters) { return(ActivityForExecute.Execute(context, parameters)); }
internal NextActivityKey UnsubscribeFromEvent( WorkflowExecutionContext context, ActivityParameterDictionary parameters) { context.UnsubscribeFromEvent(Event, Handler); return(context.DefaultNextActivityKey); }