/// <summary>
 /// Processes the bookmark resumption record to notify the view model of a transition.
 /// </summary>
 /// <param name="bookmarkResumptionRecord">
 /// The bookmark resumption record.
 /// </param>
 private void ProcessBookmarkResumptionRecord(BookmarkResumptionRecord bookmarkResumptionRecord)
 {
     if (bookmarkResumptionRecord != null && !string.IsNullOrWhiteSpace(bookmarkResumptionRecord.BookmarkName))
     {
         this.atmViewModel.Notify(ConvertToAtmTransition(bookmarkResumptionRecord.BookmarkName), bookmarkResumptionRecord.Payload);
     }
 }
예제 #2
0
        public TrackingCommand(TrackingRecord record)
            : this()
        {
            ActivityScheduledRecord activityScheduledRecord = record as ActivityScheduledRecord;

            if (activityScheduledRecord != null)
            {
                CreateTrackingCommand(activityScheduledRecord);
                return;
            }

            CancelRequestedRecord cancelRequestedRecord = record as CancelRequestedRecord;

            if (cancelRequestedRecord != null)
            {
                CreateTrackingCommand(cancelRequestedRecord);
                return;
            }

            FaultPropagationRecord faultPropagationRecord = record as FaultPropagationRecord;

            if (faultPropagationRecord != null)
            {
                CreateTrackingCommand(faultPropagationRecord);
                return;
            }


            ActivityStateRecord activityStateRecord = record as ActivityStateRecord;

            if (activityStateRecord != null)
            {
                CreateTrackingCommand(activityStateRecord);
                return;
            }

            WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;

            if (workflowInstanceRecord != null)
            {
                CreateTrackingCommand(workflowInstanceRecord);
                return;
            }

            BookmarkResumptionRecord bookmarkResumptionRecord = record as BookmarkResumptionRecord;

            if (bookmarkResumptionRecord != null)
            {
                CreateTrackingCommand(bookmarkResumptionRecord);
                return;
            }

            CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;

            if (customTrackingRecord != null)
            {
                CreateTrackingCommand(customTrackingRecord);
                return;
            }
        }
예제 #3
0
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            // Log header information
            AddEvent(String.Format("Type: {0}  Level: {1}, RecordNumber: {2}",
                                   record.GetType().Name, record.Level, record.RecordNumber));

            // If this is a instance record
            WorkflowInstanceRecord instance = record as WorkflowInstanceRecord;

            if (instance != null)
            {
                AddEvent(String.Format(" InstanceID: {0} State: {1}",
                                       instance.InstanceId, instance.State));
            }

            // If this is a bookmark record
            BookmarkResumptionRecord bookmark = record as BookmarkResumptionRecord;

            if (bookmark != null)
            {
                AddEvent(String.Format(" Bookmark {0} resumed",
                                       bookmark.BookmarkName));
            }

            // If this is an activity record
            ActivityStateRecord activity = record as ActivityStateRecord;

            if (activity != null)
            {
                IDictionary <String, object> variables = activity.Variables;
                StringBuilder s = new StringBuilder();


                if (variables.Count > 0)
                {
                    s.AppendLine(" Variables:");
                    foreach (KeyValuePair <string, object> v in variables)
                    {
                        s.AppendLine(String.Format("    {0} Value: [{1}]",
                                                   v.Key, v.Value));
                    }
                }
                AddEvent(String.Format(" Activity: {0} State: {1} {2}",
                                       activity.Activity.Name, activity.State, s.ToString()));
            }

            // If this is a user record
            CustomTrackingRecord user = record as CustomTrackingRecord;

            if ((user != null) && (user.Data.Count > 0))
            {
                AddEvent(String.Format(" User Data: {0}", user.Name));
                foreach (string data in user.Data.Keys)
                {
                    AddEvent(String.Format("   {0} : {1}", data, user.Data[data]));
                }
            }
        }
예제 #4
0
        private void TrackBookmarkResumptionRecord(BookmarkResumptionRecord bookmarkResumptionRecord, ActualTrace _trace)
        {
            TestTraceManager.OptionalLogTrace("[InMemoryTrackingParticipant]BookmarkName = {0}, bookmarkResumptionRecord = {1} ", bookmarkResumptionRecord.BookmarkName, bookmarkResumptionRecord.ToString());
            _trace.Add(new BookmarkResumptionTrace(
                           bookmarkResumptionRecord.BookmarkName,
                           bookmarkResumptionRecord.BookmarkScope,
                           bookmarkResumptionRecord.Owner.Name));

            //_trace.Add(new ActivityTrace(bookmarkResumptionRecord.ToString(),
            //    ActivityInstanceState.Executing));
        }
예제 #5
0
 private void TrackBookmarkRecord(BookmarkResumptionRecord record)
 {
     if (WfEtwTrackingEventSource.Instance.BookmarkResumptionRecordIsEnabled())
     {
         WfEtwTrackingEventSource.Instance.BookmarkResumptionRecord(record.InstanceId, record.RecordNumber, record.EventTime,
                                                                    record.BookmarkName, record.BookmarkScope, record.Owner.Name, record.Owner.Id,
                                                                    record.Owner.InstanceId, record.Owner.TypeName,
                                                                    record.HasAnnotations ? JsonConvert.SerializeObject(record.Annotations, Formatting.Indented) : emptyItemsTag,
                                                                    this.TrackingProfile == null ? string.Empty : this.TrackingProfile.Name, this.ApplicationReference);
     }
 }
예제 #6
0
        void CreateTrackingCommand(BookmarkResumptionRecord record)
        {
            this.Procedure = "[MOJ.WorkflowManger.Tracking].[InsertBookmarkResumptionEvent]";

            this.parameters.Add(CreateTrackingCommandParameter("@WorkflowInstanceId", SqlDbType.UniqueIdentifier, null, record.InstanceId));
            this.parameters.Add(CreateTrackingCommandParameter("@RecordNumber", SqlDbType.BigInt, null, record.RecordNumber));
            this.parameters.Add(CreateTrackingCommandParameter("@TraceLevelId", SqlDbType.TinyInt, null, record.Level));
            this.parameters.Add(CreateTrackingCommandParameter("@BookmarkName", SqlDbType.NVarChar, 1024, record.BookmarkName));
            this.parameters.Add(CreateTrackingCommandParameter("@BookmarkScope", SqlDbType.UniqueIdentifier, null, record.BookmarkScope));
            this.parameters.Add(CreateTrackingCommandParameter("@OwnerActivityName", SqlDbType.NVarChar, 256, record.Owner.Name));
            this.parameters.Add(CreateTrackingCommandParameter("@OwnerActivityId", SqlDbType.NVarChar, 256, record.Owner.Id));
            this.parameters.Add(CreateTrackingCommandParameter("@OwnerActivityInstanceId", SqlDbType.NVarChar, 256, record.Owner.InstanceId));
            this.parameters.Add(CreateTrackingCommandParameter("@OwnerActivityType", SqlDbType.NVarChar, 2048, record.Owner.TypeName));
            this.parameters.Add(CreateTrackingCommandParameter("@AnnotationsXml", SqlDbType.NVarChar, null, this.SerializeData(record.Annotations)));
            this.parameters.Add(CreateTrackingCommandParameter("@TimeCreated", SqlDbType.DateTime, null, record.EventTime));
        }
예제 #7
0
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            WorkflowInstanceRecord instanceRecord = record as WorkflowInstanceRecord;

            if (instanceRecord != null)
            {
                this.InstanceStates.Add(instanceRecord.State);
                return;
            }

            ActivityStateRecord activityStateRecord = record as ActivityStateRecord;

            if (activityStateRecord != null)
            {
                this.ActivityStates.Add(Colonize(activityStateRecord.Activity.Name, activityStateRecord.State));
                return;
            }

            CustomTrackingRecord customRecord = record as CustomTrackingRecord;

            if (customRecord != null)
            {
                foreach (KeyValuePair <string, object> kvp in customRecord.Data)
                {
                    this.CustomRecords.Add(Colonize(kvp.Key, kvp.Value.ToString()));
                }
                return;
            }

            BookmarkResumptionRecord bookmarkRecord = record as BookmarkResumptionRecord;

            if (bookmarkRecord != null)
            {
                this.BookmarkResumptionRecords.Add(Colonize(bookmarkRecord.BookmarkName, bookmarkRecord.Payload.ToString()));
                return;
            }

            ActivityScheduledRecord scheduledRecord = record as ActivityScheduledRecord;

            if (scheduledRecord != null)
            {
                // For the root activity, the "parent" will be null, so tolerate that case.
                this.ActivityScheduledRecords.Add(Colonize((scheduledRecord.Activity != null) ? scheduledRecord.Activity.Name : "<null>", scheduledRecord.Child.Name));
                return;
            }
        }
예제 #8
0
        private void LogBookmarkRecord(BookmarkResumptionRecord record)
        {
            Contract.Requires(null != record);

            var annotations = JsonConvert.SerializeObject(record.Annotations, Formatting.Indented);
            var payload     = JsonConvert.SerializeObject(record.Payload);
            var owner       = JsonConvert.SerializeObject(record.Owner);

            Logger.Get(_loggingTrackingParticipantSettings.TraceSourceName)
            .TraceInformation("{0} {1} {2} - InstanceId = '{3}', Annotations = '{4}', BookmarkName = '{5}', BookmarkScope = '{6}', Owner = '{7}', Payload = '{8}'",
                              record.GetType().Name,
                              record.EventTime,
                              record.Level,
                              record.InstanceId,
                              annotations,
                              record.BookmarkName,
                              record.BookmarkScope,
                              owner,
                              payload
                              );
        }
예제 #9
0
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            WorkflowInstanceRecord instanceTrackingRecord =
                record as WorkflowInstanceRecord;

            if (instanceTrackingRecord != null)
            {
                TrackInstance t = new TrackInstance();

                t.WorkflowID = instanceTrackingRecord.InstanceId;
                t.Status     = instanceTrackingRecord.State;
                t.EventDate  = DateTime.UtcNow;

                // Insert a record into the TrackInstance table
                LeadDataDataContext dc =
                    new LeadDataDataContext(_connectionString);
                dc.TrackInstances.InsertOnSubmit(t);
                dc.SubmitChanges();
            }

            BookmarkResumptionRecord bookTrackingRecord =
                record as BookmarkResumptionRecord;

            if (bookTrackingRecord != null)
            {
                TrackBookmark t = new TrackBookmark();

                t.WorkflowID   = bookTrackingRecord.InstanceId;
                t.BookmarkName = bookTrackingRecord.BookmarkName;
                t.EventDate    = DateTime.UtcNow;

                // Insert a record into the TrackBookmark table
                LeadDataDataContext dc =
                    new LeadDataDataContext(_connectionString);
                dc.TrackBookmarks.InsertOnSubmit(t);
                dc.SubmitChanges();
            }

            ActivityStateRecord activityStateRecord =
                record as ActivityStateRecord;

            if (activityStateRecord != null)
            {
                TrackActivity t = new TrackActivity();

                t.ActivityName = activityStateRecord.Activity.Name;
                t.WorkflowID   = activityStateRecord.InstanceId;
                t.Status       = activityStateRecord.State;
                t.EventDate    = DateTime.UtcNow;

                // Concatenate all the variables into a string
                IDictionary <String, object> variables =
                    activityStateRecord.Variables;
                StringBuilder s = new StringBuilder();

                if (variables.Count > 0)
                {
                    foreach (KeyValuePair <string, object> v in variables)
                    {
                        s.AppendLine(String.Format("{0}: Value = [{1}]",
                                                   v.Key, v.Value));
                    }
                }

                // Store the variables string
                t.Variables = s.ToString();

                // Insert a record into the TrackActivity table
                LeadDataDataContext dc =
                    new LeadDataDataContext(_connectionString);
                dc.TrackActivities.InsertOnSubmit(t);
                dc.SubmitChanges();
            }

            CustomTrackingRecord customTrackingRecord =
                record as CustomTrackingRecord;

            if (customTrackingRecord != null)
            {
                TrackCustom t = new TrackCustom();

                t.WorkflowID      = customTrackingRecord.InstanceId;
                t.CustomEventName = customTrackingRecord.Name;
                t.EventDate       = DateTime.UtcNow;

                // Concatenate all the user data into a string
                string s = "";
                if ((customTrackingRecord != null) &&
                    (customTrackingRecord.Data.Count > 0))
                {
                    foreach (string data in customTrackingRecord.Data.Keys)
                    {
                        if (s.Length > 1)
                        {
                            s += "\r\n";
                        }
                        s += String.Format("{0}: Value = [{1}]", data,
                                           customTrackingRecord.Data[data]);
                    }
                }
                t.UserData = s;

                // Insert a record into the TrackUser table
                LeadDataDataContext dc =
                    new LeadDataDataContext(_connectionString);
                dc.TrackCustoms.InsertOnSubmit(t);
                dc.SubmitChanges();
            }
        }
예제 #10
0
        public void PushDataToTraceManager(TrackingRecord data)
        {
            if (this.PushToTrackingDataManager != true)
            {
                return;
            }

            TraceEventType eventType = TraceEventType.Information;

            if (data is ActivityScheduledRecord)
            {
                ActivityScheduledRecord record = (ActivityScheduledRecord)data;
                string displayName             = record.Child.Name;
                if (this.TestTraceManager.TraceFilter.Contains(displayName))
                {
                    return;
                }
                AddActivityTrace(eventType, record.InstanceId, displayName, ActivityInstanceState.Executing, record);
            }
            else if (data is ActivityStateRecord)
            {
                ActivityStateRecord   record = (ActivityStateRecord)data;
                ActivityInstanceState state;
                if (TryConvertToEnum(record.State, out state))
                {
                    string displayName = record.Activity.Name;
                    if (this.TestTraceManager.TraceFilter.Contains(displayName))
                    {
                        return;
                    }
                    AddActivityTrace(eventType, record.InstanceId, displayName, state, record);
                }
            }
            else if (data is WorkflowInstanceAbortedRecord)
            {
                WorkflowInstanceAbortedRecord record = (WorkflowInstanceAbortedRecord)data;
                AddWorkflowInstanceAbortedTrace(eventType, record.InstanceId, record.Reason);
            }
            //else if (data is WorkflowInstanceUpdatedRecord)
            //{
            //    WorkflowInstanceUpdatedRecord record = (WorkflowInstanceUpdatedRecord)data;
            //    AddWorkflowInstanceUpdatedTrace(eventType, record.InstanceId, record.OriginalDefinitionIdentity, record.WorkflowDefinitionIdentity, record.State, record.BlockingActivities, record.IsSuccessful);
            //}

            else if (data is WorkflowInstanceRecord)
            {
                WorkflowInstanceRecord record = (WorkflowInstanceRecord)data;
                WorkflowInstanceState  state  = (WorkflowInstanceState)Enum.Parse(typeof(WorkflowInstanceState), record.State);
                //these are new states that got added as part of the DCR = 109342, we do not contain them in the expceted states, hence
                //explicitly removing them. have separate test cases to test the states.
                if ((state == WorkflowInstanceState.Suspended) ||
                    (state == WorkflowInstanceState.Unsuspended))
                {
                    return;
                }

                AddWorkflowInstanceTrace(eventType, record.InstanceId, record.WorkflowDefinitionIdentity, state);
            }
            else if (data is BookmarkResumptionRecord)
            {
                BookmarkResumptionRecord record = (BookmarkResumptionRecord)data;
                AddBookmarkResumptionTrace(eventType, record.InstanceId, record.Owner.Name, record.BookmarkName,
                                           record.BookmarkScope);
            }
        }