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

📄 wfbase.cs

📁 C#写的工作流测试实例,适合刚接确工作流的程序员参考实例.
💻 CS
字号:
using System;

namespace wfTest
{
	#region 工作流引擎
	//引擎类
	public class wfEngine
	{
		//实例池
		protected System.Collections.SortedList InstancePool;

		public wfEngine()
		{
			InstancePool=new System.Collections.SortedList();
		}
		
		
		/// <summary>
		/// 添加实例到引擎
		/// </summary>
		/// <param name="Instance">工作流实例</param>
		/// <returns>实例ID</returns>
		public string AddInstance(wfTemplet Instance)
		{
			InstancePool.Add(Instance.InstanceID ,Instance.CurrentNode);
			return Instance.InstanceID;
		}

		/// <summary>
		/// 工作流下移一结点
		/// </summary>
		/// <param name="InstanceID">实例ID</param>
		/// <returns></returns>
		public bool ExecuteNextNode(string InstanceID)
		{
			if(InstancePool.Contains(InstanceID))
			{
				if(((wfNode)InstancePool[InstanceID]).NextNode !=null)
				{
					InstancePool[InstanceID]=((wfNode)InstancePool[InstanceID]).execute();
					return true;
				}
				else
				{
					((wfNode)InstancePool[InstanceID]).execute();
					InstancePool.Remove(InstanceID);
					return false;
				}
			}
			return false;
		}


		/// <summary>
		/// 一次执行完实例的所有结点
		/// </summary>
		/// <param name="InstanceID">实例ID</param>
		public void AutoExecute(string InstanceID)
		{
			while (ExecuteNextNode(InstanceID))
			{
				AutoExecute(InstanceID);
			}
		}
	
		//得到实例状态
		public  string getInstanceState(string InstanceID)
		{
			if(InstancePool.Contains(InstanceID))
			{
				return ((wfNode)InstancePool[InstanceID]).NodeId;
			}
			return null;
		}

		//得到引擎内的所有实例
		public System.Collections.SortedList getInstances()
		{
			return this.InstancePool;
		 }

		//停止实例
		public void StopInstance(string InstanceID)
		{}

		//继续被停止实例
		public void runInstance(string InstanceID)
		{}
	}
  

	#endregion
//---------------------------------------------------------------------
	#region 工作流模板
	//工作流类
	public class wfTemplet
	{
		public string InstanceID;//实例ID

		/// <summary>
		/// 构造函数
		/// </summary>
		/// <param name="InstanceID">实例ID</param>
		public wfTemplet(string InstanceID)
		{
			this.InstanceID=InstanceID;
		}

		public wfNode CurrentNode;//当前活动结点
	}
	
	#endregion
//---------------------------------------------------------------------
	#region  结点模板
	//结点模板类
	public abstract class  wfNode
	{
		public string InstanceId;//实例ID
		public string NodeId;//结点ID
				
		/// <summary>
		/// 构造函数
		/// </summary>
		/// <param name="InstanceID">实例ID</param>
		/// <param name="NodeId">结点ID</param>
		public wfNode(string InstanceID,string NodeId)
		{
			this.InstanceId=InstanceID;
			this.NodeId =NodeId;
		}

		//下一结点
		public wfNode NextNode;

		//执行区
		public abstract wfNode execute();
	}

	#endregion
//---------------------------------------------------------------------
	#region 代码结点模板

	//要执行的代码委托
	public delegate void codeMethod(wfNode sender ,object data);

	//代码结点模板类
	public class codeNode:wfNode
	{
		//构造函数
		public codeNode(string InstanceID,string NodeId)
			:base(InstanceID, NodeId)
		{}

		public event codeMethod Code;//要执行的代码
		public object CodeParameter ;//要执行的参数
		
		//执行区
		public override wfNode execute()
		{
			if(Code !=null)
			{
				Code(this,CodeParameter);
			}
			return this.NextNode;
		}
	}
	#endregion
//---------------------------------------------------------------------
	#region 条件结点模板

	//条件表达式类
	public class conditionExpression 
	{
		public object leftExpression;//左表达式
		public object rightExpression;//右表达式
		
		//比效方法
		//可以跟据需要自定义左、右表达式,并重载比效运算符
		public bool contrast()
		{
			if(leftExpression.Equals(rightExpression))
			    {return true;}
			else
			    {return false;}
		}
	}
		
	//条件结点模板类
	public class conditionNode:wfNode
	{
		//构造函数
		public conditionNode(string InstanceID,string NodeId)
			:base(InstanceID, NodeId)
		{}

		public conditionExpression expression;//表达式对象
		public wfNode ElseNode;//否则结点

		//执行区
		public override wfNode execute()
		{
			if(expression.contrast())
			  {return this.NextNode;}
			else
			  {return this.ElseNode;}
		}
	}
	#endregion
//---------------------------------------------------------------------
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -