示例#1
0
        /// <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)));
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
        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);
        }
示例#5
0
        /// <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);
        }