⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 querysqltracking.cs

📁 博客园WxWinter写的WF工作流入门学习资料及示例代码
💻 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 + -