コード例 #1
0
 public WorkflowTrackingRecord(TrackingWorkflowEvent trackingWorkflowEvent, DateTime eventDateTime, int eventOrder, EventArgs eventArgs)
 {
     _event         = trackingWorkflowEvent;
     _eventDateTime = eventDateTime;
     _eventOrder    = eventOrder;
     _args          = eventArgs;
 }
コード例 #2
0
        internal bool TryTrackInstanceEvent(TrackingWorkflowEvent status, WorkflowTrackingRecord record)
        {
            bool track = false;

            foreach (WorkflowTrackPoint point in _profile.WorkflowTrackPoints)
            {
                if (point.IsMatch(status))
                {
                    record.Annotations.AddRange(point.Annotations);
                    track = true;
                }
            }
            return(track);
        }
コード例 #3
0
        // Reading Data from Tracking Database
        static void QueryAndWriteTrackingInformationToConsole(Guid instanceId, TrackingWorkflowEvent workflowEventToFind)
        {
            SqlTrackingQuery sqlTrackingQuery = new SqlTrackingQuery(connectionString);

            SqlTrackingWorkflowInstance sqlTrackingWorkflowInstance;

            if (sqlTrackingQuery.TryGetWorkflow(instanceId, out sqlTrackingWorkflowInstance))
            {
                foreach (WorkflowTrackingRecord workflowTrackingRecord in sqlTrackingWorkflowInstance.WorkflowEvents)
                {
                    if (workflowTrackingRecord.TrackingWorkflowEvent == workflowEventToFind)
                    {
                        WriteEventDescriptionAndArgs(workflowTrackingRecord.TrackingWorkflowEvent.ToString(), workflowTrackingRecord.EventArgs, workflowTrackingRecord.EventDateTime);
                        break;
                    }
                }
            }
        }
コード例 #4
0
        private void NotifyChannels(TrackingWorkflowEvent evt, WorkflowExecutor.WorkflowExecutionEventArgs e, WorkflowExecutor exec)
        {
            DateTime utcNow           = DateTime.UtcNow;
            int      nextEventOrderId = this._broker.GetNextEventOrderId();

            foreach (TrackingChannelWrapper wrapper in this._channels)
            {
                WorkflowExecutor.WorkflowExecutionTerminatingEventArgs args2;
                WorkflowTrackingRecord record;
                EventArgs eventArgs = null;
                switch (evt)
                {
                case TrackingWorkflowEvent.Exception:
                {
                    WorkflowExecutor.WorkflowExecutionExceptionEventArgs args3 = (WorkflowExecutor.WorkflowExecutionExceptionEventArgs)e;
                    eventArgs = new TrackingWorkflowExceptionEventArgs(args3.Exception, args3.CurrentPath, args3.OriginalPath, args3.ContextGuid, args3.ParentContextGuid);
                    goto Label_00BC;
                }

                case TrackingWorkflowEvent.Terminated:
                    args2 = (WorkflowExecutor.WorkflowExecutionTerminatingEventArgs)e;
                    if (args2.Exception == null)
                    {
                        break;
                    }
                    eventArgs = new TrackingWorkflowTerminatedEventArgs(args2.Exception);
                    goto Label_00BC;

                case TrackingWorkflowEvent.Suspended:
                    eventArgs = new TrackingWorkflowSuspendedEventArgs(((WorkflowExecutor.WorkflowExecutionSuspendingEventArgs)e).Error);
                    goto Label_00BC;

                default:
                    goto Label_00BC;
                }
                eventArgs = new TrackingWorkflowTerminatedEventArgs(args2.Error);
Label_00BC:
                record = new WorkflowTrackingRecord(evt, utcNow, nextEventOrderId, eventArgs);
                if (wrapper.GetTrackingProfile(exec).TryTrackInstanceEvent(evt, record))
                {
                    wrapper.TrackingChannel.Send(record);
                }
            }
        }
コード例 #5
0
 /// <summary>
 /// Toggles a tracked workflow event for the workflow trackpoint
 /// </summary>
 /// <param name="workflowEvent"></param>
 internal void ToggleEventStatus(TrackingWorkflowEvent workflowEvent)
 {
     if (WorkflowTrackPoint != null && WorkflowTrackPoint.MatchingLocation.Events.Contains(workflowEvent))
     {
         WorkflowTrackPoint.MatchingLocation.Events.Remove(workflowEvent);
         if (TrackingProfile.WorkflowTrackPoints[0].MatchingLocation.Events.Count == 0)
         {
             TrackingProfile.WorkflowTrackPoints.Clear();
         }
     }
     else
     {
         if (WorkflowTrackPoint == null)
         {
             TrackingProfile.WorkflowTrackPoints.Add(new WorkflowTrackPoint());
         }
         WorkflowTrackPoint.MatchingLocation.Events.Add(workflowEvent);
     }
 }
コード例 #6
0
 public WorkflowTrackingRecord(TrackingWorkflowEvent trackingWorkflowEvent, DateTime eventDateTime, int eventOrder, EventArgs eventArgs)
 {
     _event = trackingWorkflowEvent;
     _eventDateTime = eventDateTime;
     _eventOrder = eventOrder;
     _args = eventArgs;
 }
コード例 #7
0
 internal bool TryTrackInstanceEvent(TrackingWorkflowEvent status, WorkflowTrackingRecord record)
 {
     bool track = false;
     foreach (WorkflowTrackPoint point in _profile.WorkflowTrackPoints)
     {
         if (point.IsMatch(status))
         {
             record.Annotations.AddRange(point.Annotations);
             track = true;
         }
     }
     return track;
 }
コード例 #8
0
 internal bool Match(TrackingWorkflowEvent status)
 {
     return _events.Contains(status);
 }
        private void NotifyChannels(TrackingWorkflowEvent evt, WorkflowExecutor.WorkflowExecutionEventArgs e, WorkflowExecutor exec)
        {
            DateTime utcNow = DateTime.UtcNow;
            int nextEventOrderId = this._broker.GetNextEventOrderId();
            foreach (TrackingChannelWrapper wrapper in this._channels)
            {
                WorkflowExecutor.WorkflowExecutionTerminatingEventArgs args2;
                WorkflowTrackingRecord record;
                EventArgs eventArgs = null;
                switch (evt)
                {
                    case TrackingWorkflowEvent.Exception:
                    {
                        WorkflowExecutor.WorkflowExecutionExceptionEventArgs args3 = (WorkflowExecutor.WorkflowExecutionExceptionEventArgs) e;
                        eventArgs = new TrackingWorkflowExceptionEventArgs(args3.Exception, args3.CurrentPath, args3.OriginalPath, args3.ContextGuid, args3.ParentContextGuid);
                        goto Label_00BC;
                    }
                    case TrackingWorkflowEvent.Terminated:
                        args2 = (WorkflowExecutor.WorkflowExecutionTerminatingEventArgs) e;
                        if (args2.Exception == null)
                        {
                            break;
                        }
                        eventArgs = new TrackingWorkflowTerminatedEventArgs(args2.Exception);
                        goto Label_00BC;

                    case TrackingWorkflowEvent.Suspended:
                        eventArgs = new TrackingWorkflowSuspendedEventArgs(((WorkflowExecutor.WorkflowExecutionSuspendingEventArgs) e).Error);
                        goto Label_00BC;

                    default:
                        goto Label_00BC;
                }
                eventArgs = new TrackingWorkflowTerminatedEventArgs(args2.Error);
            Label_00BC:
                record = new WorkflowTrackingRecord(evt, utcNow, nextEventOrderId, eventArgs);
                if (wrapper.GetTrackingProfile(exec).TryTrackInstanceEvent(evt, record))
                {
                    wrapper.TrackingChannel.Send(record);
                }
            }
        }
コード例 #10
0
ファイル: TrackPoint.cs プロジェクト: dox0/DotNet471RS3
 internal bool IsMatch(TrackingWorkflowEvent status)
 {
     return(_location.Match(status));
 }
コード例 #11
0
ファイル: Program.cs プロジェクト: spzenk/sfdocsamples
        // Reading Data from Tracking Database
        static void QueryAndWriteTrackingInformationToConsole(Guid instanceId, TrackingWorkflowEvent workflowEventToFind)
        {
            SqlTrackingQuery sqlTrackingQuery = new SqlTrackingQuery(connectionString);

            SqlTrackingWorkflowInstance sqlTrackingWorkflowInstance;
            if (sqlTrackingQuery.TryGetWorkflow(instanceId, out sqlTrackingWorkflowInstance))
            {
                foreach (WorkflowTrackingRecord workflowTrackingRecord in sqlTrackingWorkflowInstance.WorkflowEvents)
                {
                    if (workflowTrackingRecord.TrackingWorkflowEvent == workflowEventToFind)
                    {
                        WriteEventDescriptionAndArgs(workflowTrackingRecord.TrackingWorkflowEvent.ToString(), workflowTrackingRecord.EventArgs, workflowTrackingRecord.EventDateTime);
                        break;
                    }
                }
            }
        }
コード例 #12
0
        private void LoadWorkflowEventsFromReader(SqlDataReader reader, object parameter)
        {
            if (null == reader)
            {
                throw new ArgumentNullException("reader");
            }

            //
            // There should always be 2 recordsets in this reader!
            //

            DateTime tmpMin = SqlDateTime.MinValue.Value;

            Dictionary <long, WorkflowTrackingRecord> inst = new Dictionary <long, WorkflowTrackingRecord>();

            while (reader.Read())
            {
                TrackingWorkflowEvent evt = (TrackingWorkflowEvent)reader[0];
                DateTime dt    = reader.GetDateTime(1);
                int      order = reader.GetInt32(2);

                object    tmp  = null;
                EventArgs args = null;
                if (!reader.IsDBNull(3))
                {
                    BinaryFormatter formatter = new BinaryFormatter();
                    tmp = formatter.Deserialize(new MemoryStream((Byte[])reader[3]));
                    if (tmp is EventArgs)
                    {
                        args = (EventArgs)tmp;
                    }
                }
                long eventId = reader.GetInt64(4);

                DateTime dbDt = reader.GetDateTime(5);

                inst.Add(eventId, new WorkflowTrackingRecord(evt, dt, order, args));

                if (dbDt > tmpMin)
                {
                    tmpMin = dbDt;
                }
            }

            if (!reader.NextResult())
            {
                throw new ArgumentException(ExecutionStringManager.InvalidWorkflowInstanceEventReader);
            }

            //
            // Add any annotations
            while (reader.Read())
            {
                long   eventId    = reader.GetInt64(0);
                string annotation = null;

                if (!reader.IsDBNull(1))
                {
                    annotation = reader.GetString(1);
                }

                WorkflowTrackingRecord rec = null;
                if (inst.TryGetValue(eventId, out rec))
                {
                    if (null != rec)
                    {
                        rec.Annotations.Add(annotation);
                    }
                }
            }

            if (!reader.IsClosed)
            {
                reader.Close();
            }
            //
            // Check if we have any WorkflowChange events in this list
            // If so pull back the change actions and reconstruct the args property
            foreach (KeyValuePair <long, WorkflowTrackingRecord> kvp in inst)
            {
                WorkflowTrackingRecord rec = kvp.Value;
                if (TrackingWorkflowEvent.Changed != rec.TrackingWorkflowEvent)
                {
                    continue;
                }

                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "[dbo].[GetWorkflowChangeEventArgs]";
                cmd.Parameters.Add(new SqlParameter("@WorkflowInstanceInternalId", _internalId));
                cmd.Parameters.Add(new SqlParameter("@BeginDateTime", SqlDateTime.MinValue.Value));
                cmd.Parameters.Add(new SqlParameter("@WorkflowInstanceEventId", kvp.Key));

                ExecuteRetried(cmd, LoadWorkflowChangeEventArgsFromReader, rec);
            }

            _workflowEvents.AddRange(inst.Values);
            //
            // set the min for the next query to the most recent event from this query
            // Don't overwrite the previous min if nothing came back for this query
            if (tmpMin > SqlDateTime.MinValue.Value)
            {
                _instMinDT = tmpMin;
            }
        }
コード例 #13
0
 internal bool Match(TrackingWorkflowEvent status)
 {
     return(_events.Contains(status));
 }
コード例 #14
0
 /// <summary>
 /// Toggles a tracked workflow event for the workflow trackpoint
 /// </summary>
 /// <param name="workflowEvent"></param>
 internal void ToggleEventStatus(TrackingWorkflowEvent workflowEvent)
 {
     if (WorkflowTrackPoint != null && WorkflowTrackPoint.MatchingLocation.Events.Contains(workflowEvent))
     {
         WorkflowTrackPoint.MatchingLocation.Events.Remove(workflowEvent);
         if (TrackingProfile.WorkflowTrackPoints[0].MatchingLocation.Events.Count == 0)
         {
             TrackingProfile.WorkflowTrackPoints.Clear();
         }
     }
     else
     {
         if (WorkflowTrackPoint == null)
         {
             TrackingProfile.WorkflowTrackPoints.Add(new WorkflowTrackPoint());
         }
         WorkflowTrackPoint.MatchingLocation.Events.Add(workflowEvent);
     }
 }
コード例 #15
0
        private void LoadWorkflowEventsFromReader(SqlDataReader reader, object parameter)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }
            DateTime time = SqlDateTime.MinValue.Value;
            Dictionary <long, WorkflowTrackingRecord> dictionary = new Dictionary <long, WorkflowTrackingRecord>();

            while (reader.Read())
            {
                TrackingWorkflowEvent trackingWorkflowEvent = (TrackingWorkflowEvent)reader[0];
                DateTime  dateTime   = reader.GetDateTime(1);
                int       eventOrder = reader.GetInt32(2);
                object    obj2       = null;
                EventArgs eventArgs  = null;
                if (!reader.IsDBNull(3))
                {
                    obj2 = new BinaryFormatter().Deserialize(new MemoryStream((byte[])reader[3]));
                    if (obj2 is EventArgs)
                    {
                        eventArgs = (EventArgs)obj2;
                    }
                }
                long     key   = reader.GetInt64(4);
                DateTime time3 = reader.GetDateTime(5);
                dictionary.Add(key, new WorkflowTrackingRecord(trackingWorkflowEvent, dateTime, eventOrder, eventArgs));
                if (time3 > time)
                {
                    time = time3;
                }
            }
            if (!reader.NextResult())
            {
                throw new ArgumentException(ExecutionStringManager.InvalidWorkflowInstanceEventReader);
            }
            while (reader.Read())
            {
                long   num3 = reader.GetInt64(0);
                string item = null;
                if (!reader.IsDBNull(1))
                {
                    item = reader.GetString(1);
                }
                WorkflowTrackingRecord record = null;
                if (dictionary.TryGetValue(num3, out record) && (record != null))
                {
                    record.Annotations.Add(item);
                }
            }
            if (!reader.IsClosed)
            {
                reader.Close();
            }
            foreach (KeyValuePair <long, WorkflowTrackingRecord> pair in dictionary)
            {
                WorkflowTrackingRecord loadFromReaderParam = pair.Value;
                if (TrackingWorkflowEvent.Changed == loadFromReaderParam.TrackingWorkflowEvent)
                {
                    SqlCommand cmd = new SqlCommand {
                        CommandType = CommandType.StoredProcedure,
                        CommandText = "[dbo].[GetWorkflowChangeEventArgs]"
                    };
                    cmd.Parameters.Add(new SqlParameter("@WorkflowInstanceInternalId", this._internalId));
                    cmd.Parameters.Add(new SqlParameter("@BeginDateTime", SqlDateTime.MinValue.Value));
                    cmd.Parameters.Add(new SqlParameter("@WorkflowInstanceEventId", pair.Key));
                    this.ExecuteRetried(cmd, new LoadFromReader(this.LoadWorkflowChangeEventArgsFromReader), loadFromReaderParam);
                }
            }
            this._workflowEvents.AddRange(dictionary.Values);
            if (time > SqlDateTime.MinValue.Value)
            {
                this._instMinDT = time;
            }
        }
コード例 #16
0
 internal bool IsMatch(TrackingWorkflowEvent status)
 {
     return _location.Match(status);
 }