/// <summary> /// Display tracking data for all completed workflows /// </summary> private static void DisplayCompletedWorkflows() { //query and display tracking data for multiple workflows TrackingConsoleWriter trackingWriter = new TrackingConsoleWriter(_connStringTracking); //only display completed workflows SqlTrackingQueryOptions options = new SqlTrackingQueryOptions(); options.WorkflowStatus = WorkflowStatus.Completed; trackingWriter.DisplayAllTrackingData(options); }
static public ExportProcessDC[] GetExportProcessListByStatus(Guid tenantId, ProcessStatus status) { List <ExportProcessDC> processList = new List <ExportProcessDC>(); SqlTrackingQuery sqlTrackingQuery = new SqlTrackingQuery(ConfigurationManager.ConnectionStrings[Constants.Database.TenantWorkflowStore].ConnectionString); SqlTrackingQueryOptions options = new SqlTrackingQueryOptions(); options.WorkflowStatus = ProcessHelper.ToWorkflowStatus(status); options.TrackingDataItems.Add(new TrackingDataItemValue("ExportProcess", "TenantId", tenantId.ToString())); IList <SqlTrackingWorkflowInstance> workflows = sqlTrackingQuery.GetWorkflows(options); foreach (SqlTrackingWorkflowInstance workflow in workflows) { ExportProcessDC exportProcessDC = new ExportProcessDC(); exportProcessDC.ProcessId = workflow.WorkflowInstanceId; exportProcessDC.Status = ProcessHelper.ToProcessStatus(workflow.Status); int activityEventsCount = workflow.ActivityEvents.Count; if (activityEventsCount > 0) { ActivityTrackingRecord record = (ActivityTrackingRecord)workflow.ActivityEvents[activityEventsCount - 1]; foreach (TrackingDataItem dataItem in record.Body) { switch (dataItem.FieldName) { case "ObjectId": exportProcessDC.ObjectId = (Guid)dataItem.Data; break; case "Number": exportProcessDC.Number = (string)dataItem.Data; break; case "Creator": exportProcessDC.Creator = (string)dataItem.Data; break; case "Amount": exportProcessDC.Amount = dataItem.Data == null ? default(decimal) : (decimal)dataItem.Data; break; } } } processList.Add(exportProcessDC); } return(processList.ToArray()); }
static public ExportProcessDC GetExportProcessbyContractId(Guid contractId) { SqlTrackingQuery sqlTrackingQuery = new SqlTrackingQuery(ConfigurationManager.ConnectionStrings[Constants.Database.TenantWorkflowStore].ConnectionString); SqlTrackingQueryOptions options = new SqlTrackingQueryOptions(); //options.WorkflowStatus = WorkflowStatus.Running; options.TrackingDataItems.Add(new TrackingDataItemValue("ExportProcess", "ObjectId", contractId.ToString())); IList <SqlTrackingWorkflowInstance> workflows = sqlTrackingQuery.GetWorkflows(options); if (workflows.Count == 0) { return(null); } SqlTrackingWorkflowInstance workflow = workflows[workflows.Count - 1]; ExportProcessDC exportProcessDC = new ExportProcessDC(); exportProcessDC.ObjectId = contractId; exportProcessDC.ProcessId = workflow.WorkflowInstanceId; exportProcessDC.Status = ProcessHelper.ToProcessStatus(workflow.Status); int activityEventsCount = workflow.ActivityEvents.Count; if (activityEventsCount > 0) { ActivityTrackingRecord record = (ActivityTrackingRecord)workflow.ActivityEvents[activityEventsCount - 1]; foreach (TrackingDataItem dataItem in record.Body) { switch (dataItem.FieldName) { case "Number": exportProcessDC.Number = (string)dataItem.Data; break; case "Creator": exportProcessDC.Creator = (string)dataItem.Data; break; case "Amount": exportProcessDC.Amount = dataItem.Data == null ? default(decimal) : (decimal)dataItem.Data; break; } } } return(exportProcessDC); }
/// <summary> /// Write tracking data to the Console for /// all workflow instances /// </summary> public void DisplayAllTrackingData(SqlTrackingQueryOptions options) { //retrieve all workflow instances IList <SqlTrackingWorkflowInstance> workflows = QueryWorkflowList(options); SortedList <Int32, TrackingRecord> records = new SortedList <int, TrackingRecord>(); //process all workflow instances in the collection foreach (SqlTrackingWorkflowInstance wf in workflows) { //build a sorted list of TrackingRecords records.Clear(); BuildSortedList(records, wf); //write the tracking data to the Console WriteSingleInstanceToConsole(wf.WorkflowInstanceId, records); } }
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); } } } }
/// <summary> /// Retrieve tracking data for all workflow instances /// matching the specified options /// </summary> /// <param name="options"></param> /// <returns></returns> private IList <SqlTrackingWorkflowInstance> QueryWorkflowList( SqlTrackingQueryOptions options) { IList <SqlTrackingWorkflowInstance> workflows = new List <SqlTrackingWorkflowInstance>(); try { //create an object that queries the tracking database SqlTrackingQuery query = new SqlTrackingQuery(_connectionString); //retrieve all workflows based on query options workflows = query.GetWorkflows(options); } catch (System.Data.SqlClient.SqlException e) { Console.WriteLine("SqlException in QueryWorkflowList: {0}", e.Message); } return(workflows); }
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); } }