protected void Page_Load(object sender, EventArgs e) { SqlTrackingQueryOptions options = new SqlTrackingQueryOptions(); options.WorkflowStatus = WorkflowStatus.Running; SqlTrackingQuery query = new SqlTrackingQuery(ConfigurationManager.ConnectionStrings["workflows"].ConnectionString); IList<SqlTrackingWorkflowInstance> workflows = query.GetWorkflows(options); foreach (SqlTrackingWorkflowInstance workflow in workflows) { foreach (WorkflowTrackingRecord workflowEvent in workflow.WorkflowEvents) { TrackingWorkflowTerminatedEventArgs args = workflowEvent.EventArgs as TrackingWorkflowTerminatedEventArgs; if (args != null) { Response.Write(workflow.WorkflowInstanceId + ": " + args.Exception.Message); } } } }
internal List<SqlTrackingWorkflowInstance> GetWorkflows(string workflowEvent, DateTime from, DateTime until, TrackingDataItemValue trackingDataItemValue) { try { List<SqlTrackingWorkflowInstance> queriedWorkflows = new List<SqlTrackingWorkflowInstance>(); SqlTrackingQuery sqlTrackingQuery = new SqlTrackingQuery(connectionString); SqlTrackingQueryOptions sqlTrackingQueryOptions = new SqlTrackingQueryOptions(); sqlTrackingQueryOptions.StatusMinDateTime = from.ToUniversalTime(); sqlTrackingQueryOptions.StatusMaxDateTime = until.ToUniversalTime(); // If QualifiedName, FieldName, or DataValue is not supplied, we will not query since they are all required to match if (!((string.Empty == trackingDataItemValue.QualifiedName) || (string.Empty == trackingDataItemValue.FieldName) || ((string.Empty == trackingDataItemValue.DataValue)))) sqlTrackingQueryOptions.TrackingDataItems.Add(trackingDataItemValue); queriedWorkflows.Clear(); if ("created" == workflowEvent.ToLower(CultureInfo.InvariantCulture)) { sqlTrackingQueryOptions.WorkflowStatus = WorkflowStatus.Created; queriedWorkflows.AddRange(sqlTrackingQuery.GetWorkflows(sqlTrackingQueryOptions)); } else if ("completed" == workflowEvent.ToLower(CultureInfo.InvariantCulture)) { sqlTrackingQueryOptions.WorkflowStatus = WorkflowStatus.Completed; queriedWorkflows.AddRange(sqlTrackingQuery.GetWorkflows(sqlTrackingQueryOptions)); } else if ("running" == workflowEvent.ToLower(CultureInfo.InvariantCulture)) { sqlTrackingQueryOptions.WorkflowStatus = WorkflowStatus.Running; queriedWorkflows.AddRange(sqlTrackingQuery.GetWorkflows(sqlTrackingQueryOptions)); } else if ("suspended" == workflowEvent.ToLower(CultureInfo.InvariantCulture)) { sqlTrackingQueryOptions.WorkflowStatus = WorkflowStatus.Suspended; queriedWorkflows.AddRange(sqlTrackingQuery.GetWorkflows(sqlTrackingQueryOptions)); } else if ("terminated" == workflowEvent.ToLower(CultureInfo.InvariantCulture)) { sqlTrackingQueryOptions.WorkflowStatus = WorkflowStatus.Terminated; queriedWorkflows.AddRange(sqlTrackingQuery.GetWorkflows(sqlTrackingQueryOptions)); } else if (("all" == workflowEvent.ToLower(CultureInfo.InvariantCulture)) || (string.Empty == workflowEvent) || (null == workflowEvent)) { sqlTrackingQueryOptions.WorkflowStatus = WorkflowStatus.Created; queriedWorkflows.AddRange(sqlTrackingQuery.GetWorkflows(sqlTrackingQueryOptions)); sqlTrackingQueryOptions.WorkflowStatus = WorkflowStatus.Completed; queriedWorkflows.AddRange(sqlTrackingQuery.GetWorkflows(sqlTrackingQueryOptions)); sqlTrackingQueryOptions.WorkflowStatus = WorkflowStatus.Running; queriedWorkflows.AddRange(sqlTrackingQuery.GetWorkflows(sqlTrackingQueryOptions)); sqlTrackingQueryOptions.WorkflowStatus = WorkflowStatus.Suspended; queriedWorkflows.AddRange(sqlTrackingQuery.GetWorkflows(sqlTrackingQueryOptions)); sqlTrackingQueryOptions.WorkflowStatus = WorkflowStatus.Terminated; queriedWorkflows.AddRange(sqlTrackingQuery.GetWorkflows(sqlTrackingQueryOptions)); } return queriedWorkflows; } catch (Exception exception) { throw new Exception("Exception in GetWorkflows", exception); } }
// // Private Methods // private void RefreshData() { SqlTrackingQuery query = new SqlTrackingQuery(_connString); SqlTrackingQueryOptions options = new SqlTrackingQueryOptions(); trackingBindingSource.DataSource = query.GetWorkflows(options); }