📄 wfbase.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 + -