/// <summary> /// Helper method used to build a <see cref="TrackingWorkflowInstance" /> /// from the specified <see cref="IDataRecord" />. /// </summary> /// <param name="dataRecord"> /// An <see cref="IDataRecord" />. /// </param> /// <returns> /// An instance of <see cref="TrackingWorkflowInstance" />. /// </returns> private TrackingWorkflowInstance buildTrackingWorkflowInstance(IDataRecord dataRecord, TrackingCommandName commandName) { String assemblyName = ValueReader.GetString(dataRecord, _nameResolver.ResolveParameterName(commandName, TrackingParameterName.AssemblyFullName)); String typeName = ValueReader.GetString(dataRecord, _nameResolver.ResolveParameterName(commandName, TrackingParameterName.TypeFullName)); return(new TrackingWorkflowInstance( WorkflowInstanceHelper.DeserialiseActivity(ValueReader.GetString( dataRecord, _nameResolver.ResolveParameterName(commandName, TrackingParameterName.ActivityXoml))), ValueReader.GetGuid(dataRecord, _nameResolver.ResolveParameterName( commandName, TrackingParameterName.InstanceId)), ValueReader.GetDateTime(dataRecord, _nameResolver.ResolveParameterName( commandName, TrackingParameterName.InitialisedDateTime)), ValueReader.GetValue(dataRecord, _nameResolver.ResolveParameterName( commandName, TrackingParameterName.WorkflowInstanceId)), ValueReader.GetGuid(dataRecord, _nameResolver.ResolveParameterName( commandName, TrackingParameterName.CallerInstanceId)), ValueReader.GetEnum <WorkflowStatus>(dataRecord, _nameResolver.ResolveParameterName(commandName, TrackingParameterName.WorkflowInstanceStatusId)), Type.GetType(String.Format("{0}, {1}", assemblyName, typeName), false))); }
/// <summary> /// Build a summary of the workflow instance that this channel represents. /// </summary> /// <returns> /// <see cref="WorkflowInstanceSummary" /> representing the workflow /// instance. /// </returns> private WorkflowInstanceSummary buildWorkflowInstanceSummary() { bool isXomlWorkflow = WorkflowInstanceHelper.IsXomlWorkflow( this.trackingParameters.RootActivity); string xomlDocument = WorkflowInstanceHelper.GetXomlDocument( this.trackingParameters.RootActivity); WorkflowInstanceSummary workflowInstanceSummary = new WorkflowInstanceSummary( this.trackingParameters.InstanceId, isXomlWorkflow, xomlDocument, this.trackingParameters.ContextGuid, this.trackingParameters.CallerInstanceId, this.trackingParameters.CallerContextGuid, this.trackingParameters.CallerParentContextGuid, buildCallPath()); workflowInstanceSummary.WorkflowType = new WorkflowTypeSummary( this.trackingParameters.WorkflowType); workflowInstanceSummary.RootActivity = buildRootActivitySummary(); return(workflowInstanceSummary); }
/// <summary> /// Build a summary of the workflow instance that this channel represents. /// </summary> /// <returns> /// <see cref="WorkflowInstanceSummary" /> representing the workflow /// instance. /// </returns> private WorkflowInstanceSummary buildWorkflowInstanceSummary() { Boolean isXomlWorkflow = WorkflowInstanceHelper.IsXomlWorkflow( _trackingParameters.RootActivity); String xomlDocument = WorkflowInstanceHelper.SerialiseActivity( _trackingParameters.RootActivity); WorkflowInstanceSummary workflowInstanceSummary = new WorkflowInstanceSummary( _trackingParameters.InstanceId, isXomlWorkflow, xomlDocument, _trackingParameters.ContextGuid, buildNullableGuid(_trackingParameters.CallerInstanceId), buildNullableGuid(_trackingParameters.CallerContextGuid), buildNullableGuid(_trackingParameters.CallerParentContextGuid), buildCallPath()); workflowInstanceSummary.WorkflowType = new WorkflowTypeSummary( _trackingParameters.WorkflowType); workflowInstanceSummary.RootActivity = buildRootActivitySummary(); return(workflowInstanceSummary); }
private static List <SerialisableActivityRemovedAction> buildSerialisableRemovedActivityAction(RemovedActivityAction action, int order) { List <SerialisableActivityRemovedAction> removedActivities = new List <SerialisableActivityRemovedAction>(); Queue <Activity> activityQueue = new Queue <Activity>(); activityQueue.Enqueue(action.OriginalRemovedActivity); while (activityQueue.Count > 0) { // is this the first record? Activity currentActivity = activityQueue.Dequeue(); if (currentActivity == action.OriginalRemovedActivity) { removedActivities.Add(new SerialisableActivityRemovedAction( currentActivity.GetType(), currentActivity.QualifiedName, currentActivity.Parent == null ? null : currentActivity.Parent.QualifiedName, order, WorkflowInstanceHelper.GetXomlDocument(currentActivity))); } else { removedActivities.Add(new SerialisableActivityRemovedAction( currentActivity.GetType(), currentActivity.QualifiedName, currentActivity.Parent == null ? null : currentActivity.Parent.QualifiedName, -1, WorkflowInstanceHelper.GetXomlDocument(currentActivity))); } CompositeActivity parentActivity = currentActivity as CompositeActivity; if (parentActivity != null) { foreach (Activity childActivity in parentActivity.Activities) { activityQueue.Enqueue(childActivity); } } } return(removedActivities); }
/// <summary> /// Serialise a <see cref="AddedActivityAction" /> ready for persistence. /// </summary> /// <param name="action"> /// The original <see cref="AddedActivityAction" /> to serialise. /// </param> /// <param name="order"> /// Indicates the order the activity was added. /// </param> /// <returns> /// A <see cref="SerialisableActivityAddedAction" /> containing a serialised /// copy of the <see cref="AddedActivityAction" />. /// </returns> private static List <SerialisableActivityAddedAction> buildSerialisableAddedActivityAction(AddedActivityAction action, int order) { List <SerialisableActivityAddedAction> addedActivities = new List <SerialisableActivityAddedAction>(); Queue <Activity> activityQueue = new Queue <Activity>(); activityQueue.Enqueue(action.AddedActivity); while (activityQueue.Count > 0) { Activity currentActivity = activityQueue.Dequeue(); if (currentActivity == action.AddedActivity) { // this the top-level activity addedActivities.Add(new SerialisableActivityAddedAction( currentActivity.GetType(), currentActivity.QualifiedName, currentActivity.Parent == null ? null : currentActivity.Parent.QualifiedName, order, WorkflowInstanceHelper.SerialiseActivity(currentActivity))); } else { addedActivities.Add(new SerialisableActivityAddedAction( currentActivity.GetType(), currentActivity.QualifiedName, currentActivity.Parent == null ? null : currentActivity.Parent.QualifiedName, -1, WorkflowInstanceHelper.SerialiseActivity(currentActivity))); } CompositeActivity parentActivity = currentActivity as CompositeActivity; if (parentActivity != null) { foreach (Activity childActivity in parentActivity.Activities) { activityQueue.Enqueue(childActivity); } } } return(addedActivities); }