📄 querysqltracking.cs
字号:
using System;
using System.IO;
using System.Collections.Generic;
using System.Workflow.Runtime;
using System.Workflow.Runtime.Tracking;
using System.Workflow.ComponentModel;
using System.Workflow.Runtime.Hosting;
using System.Workflow.Activities.Rules;
using System.Collections;
using System.Data;
namespace wxwinter.wf.Service
{
public class querySqlTracking
{
SqlTrackingQuery trackingQuery;
public bool LinkSQLserver(string constring)
{
try
{
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(constring);
con.Open();
con.Close();
trackingQuery = new SqlTrackingQuery(constring);
return true;
}
catch
{
throw new System.Exception ("无法连接到数据库");
}
}
public SqlTrackingWorkflowInstance queryWFInstance(string gid)
{
SqlTrackingWorkflowInstance temp;
System.Guid guid = new Guid(gid);
bool b = trackingQuery.TryGetWorkflow(guid, out temp);
if (b)
{
return temp;
}
else
{
return null;
}
}
public DataSet getInstanceMes(string gid)
{
mes mesobj = new mes("实例信息");
//不知为何没有数据
try
{
SqlTrackingWorkflowInstance trackingInstance = queryWFInstance(gid);
mesobj.addmes("WorkflowType", "工作流实例的类型", trackingInstance.WorkflowType.ToString());
mesobj.addmes("WorkflowInstanceInternalId", "工作流实例数据库内部ID", trackingInstance.WorkflowInstanceInternalId.ToString());
mesobj.addmes("WorkflowInstanceId", "工作流实例的GUID", trackingInstance.WorkflowInstanceId.ToString());
mesobj.addmes("Status", "工作流实例的状态", trackingInstance.Status.ToString());
mesobj.addmes("Initialized", "工作流实例的初始化时间:", trackingInstance.Initialized.ToString());
}
catch (System.Exception ex)
{
mesobj.addmes("查询出错", ex.Message, ex.Source);
}
return mesobj;
}
public DataSet getUserMes(string gid)
{
SqlTrackingWorkflowInstance trackingInstance = queryWFInstance(gid);
mes mesobj = new mes("用户信息");
foreach (UserTrackingRecord userState in trackingInstance.UserEvents)
{
mesobj.addmes("QualifiedName", "所属Activity", userState.QualifiedName);
mesobj.addmes("ActivityType", "Activity类型", userState.ActivityType.ToString());
mesobj.addmes("ContextGuid", "上下文ID", userState.ContextGuid.ToString());
mesobj.addmes("EventDateTime", "时间", userState.EventDateTime.ToString());
mesobj.addmes("EventOrder", "EventOrder字段值", userState.EventOrder.ToString());
mesobj.addmes("ParentContextGuid", "Parent上下文ID", userState.ParentContextGuid.ToString());
mesobj.addmes("UserData", "值", userState.UserData.ToString());
if (userState.UserDataKey == null)
{
mesobj.addmes("UserDataKey", "键", userState.UserDataKey.ToString());
}
else
{
mesobj.addmes("UserDataKey", "键", "无");
}
}
return mesobj;
}
public DataSet getWorkflowMes(string gid)
{
SqlTrackingWorkflowInstance trackingInstance = queryWFInstance(gid);
mes mesobj = new mes("工作流信息");
foreach (WorkflowTrackingRecord WorkflowState in trackingInstance.WorkflowEvents)
{
mesobj.addmes("TrackingWorkflowEvent", "曾发生的状态", WorkflowState.TrackingWorkflowEvent.ToString());
mesobj.addmes("EventDateTime", "该状态发生的时间", WorkflowState.EventDateTime.ToString());
mesobj.addmes("EventOrder", "EventOrder字段值", WorkflowState.EventOrder.ToString());
//工作流实例可能会有如下状态
//Aborted、 Changed、 Completed、 Created、 Exception、 Idle、 Loaded、
//Persisted、 Resumed、 Started、 Suspended、 Terminated、 Unloaded、
}
return mesobj;
}
public DataSet getActivityMes(string gid)
{
SqlTrackingWorkflowInstance trackingInstance = queryWFInstance(gid);
mes mesobj = new mes("结点信息");
foreach (ActivityTrackingRecord ActivityState in trackingInstance.ActivityEvents)
{
mesobj.addmes("ActivityType", "Activity类型", ActivityState.ActivityType.ToString());
mesobj.addmes("ContextGuid", "Activity上下文GUID", ActivityState.ContextGuid.ToString());
mesobj.addmes("EventDateTime", "该状态发生的时间", ActivityState.EventDateTime.ToString());
mesobj.addmes("ExecutionStatus", "Activity曾发生的状态", ActivityState.ExecutionStatus.ToString());
mesobj.addmes("EventOrder", "EventOrder字段值", ActivityState.EventOrder.ToString());
mesobj.addmes("ParentContextGuid", "Activity容器对象GUID", ActivityState.ParentContextGuid.ToString());
mesobj.addmes("QualifiedName", "Activity名(开发时对象名)", ActivityState.QualifiedName);
//'此时,该WorkFlow 类本身也作为一个Activity被记录状态,他是所有Activity的容器
// '有些Activity可以成为另一个Activity的容器
//'Activity可能会有如下状态
// 'Canceling、Closed、Compensating、Executing、Faulting、Initialized
}
return mesobj;
}
public DataSet getExceptionMes(string gid)
{
SqlTrackingWorkflowInstance trackingInstance = queryWFInstance(gid);
mes mesobj = new mes("异常信息");
foreach (WorkflowTrackingRecord WorkflowState in trackingInstance.WorkflowEvents)
{
//此段内容已由getWorkflowMes提供
//mesobj.addmes("TrackingWorkflowEvent", "曾发生的状态", WorkflowState.TrackingWorkflowEvent.ToString());
//mesobj.addmes("EventDateTime", "该状态发生的时间", WorkflowState.EventDateTime.ToString());
//mesobj.addmes("EventOrder", "EventOrder字段值", WorkflowState.EventOrder.ToString());
////工作流实例可能会有如下状态
////Aborted、 Changed、 Completed、 Created、 Exception、 Idle、 Loaded、
////Persisted、 Resumed、 Started、 Suspended、 Terminated、 Unloaded、
EventArgs eventObj = WorkflowState.EventArgs;
//挂起异常
if (eventObj is TrackingWorkflowSuspendedEventArgs)
{
TrackingWorkflowSuspendedEventArgs obj = (TrackingWorkflowSuspendedEventArgs)eventObj;
mesobj.addmes("TrackingWorkflowSuspendedEventArgs.Error", "暂停信息", obj.Error, "暂停异常");
}
//终止异常
if (eventObj is TrackingWorkflowTerminatedEventArgs)
{
TrackingWorkflowTerminatedEventArgs obj = (TrackingWorkflowTerminatedEventArgs)eventObj;
//如果是由异常引起的结止,显示该Exception信息,(Activity的)
if (null != obj.Exception)
{
mesobj.addmes("TrackingWorkflowTerminatedEventArgs.Exception.Message", "异常终止信息", obj.Exception.Message.ToString(), "终止异常");
}
}
//代码异常
if (eventObj is TrackingWorkflowExceptionEventArgs)
{
TrackingWorkflowExceptionEventArgs obj = (TrackingWorkflowExceptionEventArgs)eventObj;
mesobj.addmes("TrackingWorkflowExceptionEventArgs.OriginalActivityPath", "异常信息的Activity控件来源", obj.OriginalActivityPath.ToString(), "代码异常");
//如果Exception信息不为空,显示该信息(Activity的)
if (null != obj.Exception)
{
mesobj.addmes("TrackingWorkflowExceptionEventArgs.Exception.Message", "异常信息", obj.Exception.Message.ToString(), "代码异常");
}
}
}
return mesobj;
}
}
class mes : System.Data.DataSet
{
public mes(string mesname)
{
System.Data.DataTable tb = new System.Data.DataTable(mesname);
tb.Columns.Add("字段");
tb.Columns.Add("说明");
tb.Columns.Add("值");
tb.Columns.Add("其他");
this.Tables.Add(tb);
}
public void addmes(string 字段 ,string 说明, string 值, string 其他)
{
this.Tables[0].Rows.Add(new object[] {字段, 说明, 值, 其他 });
}
public void addmes(string 字段 ,string 说明, string 值)
{
addmes(字段,说明, 值, "");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -