using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
namespace BP.WF
{
///
/// 消息类型
///
public enum SendReturnMsgType
{
///
/// 消息
///
Info,
///
/// 系统消息
///
SystemMsg
}
///
/// 消息标记
///
public class SendReturnMsgFlag
{
///
/// 符合工作流程完成条件
///
public const string MacthFlowOver = "MacthFlowOver";
///
/// 当前工作[{0}]已经完成
///
public const string CurrWorkOver = "CurrWorkOver";
///
/// 符合完成条件,流程完成
///
public const string FlowOverByCond = "FlowOverByCond";
///
/// 到人员
///
public const string ToEmps = "ToEmps";
///
/// 到人员的扩展信息
///
public const string ToEmpExt = "ToEmpExt";
///
/// 分配任务
///
public const string AllotTask = "AllotTask";
///
/// 合流结束
///
public const string HeLiuOver = "HeLiuOver";
///
/// 工作报告
///
public const string WorkRpt = "WorkRpt";
///
/// 启动节点
///
public const string WorkStartNode = "WorkStartNode";
///
/// 工作启动
///
public const string WorkStart = "WorkStart";
///
/// 流程结束
///
public const string FlowOver = "FlowOver";
///
/// 发送成功后的事件异常
///
public const string SendSuccessMsgErr = "SendSuccessMsgErr";
///
/// 发送成功信息
///
public const string SendSuccessMsg = "SendSuccessMsg";
///
/// 分流程信息
///
public const string FenLiuInfo = "FenLiuInfo";
///
/// 抄送消息
///
public const string CCMsg = "CCMsg";
///
/// 编辑接受者
///
public const string EditAccepter = "EditAccepter";
///
/// 新建流程
///
public const string NewFlowUnSend = "NewFlowUnSend";
///
/// 撤销发送
///
public const string UnSend = "UnSend";
///
/// 报表
///
public const string Rpt = "Rpt";
///
/// 发送时
///
public const string SendWhen = "SendWhen";
///
/// 当前流程结束
///
public const string End = "End";
///
/// 当前流程完成
///
public const string OverCurr = "OverCurr";
///
/// 流程方向信息
///
public const string CondInfo = "CondInfo";
///
/// 一个节点完成
///
public const string OneNodeSheetver = "OneNodeSheetver";
///
/// 单据信息
///
public const string BillInfo = "BillInfo";
///
/// 文本信息(系统不会生成)
///
public const string MsgOfText = "MsgOfText";
///
/// 消息收听信息
///
public const string ListenInfo = "ListenInfo";
///
/// 流程是否结束?
///
public const string IsStopFlow = "IsStopFlow";
#region 系统变量
///
/// 工作ID
///
public const string VarWorkID = "VarWorkID";
///
/// 当前节点ID
///
public const string VarCurrNodeID = "VarCurrNodeID";
///
/// 当前节点名称
///
public const string VarCurrNodeName = "VarCurrNodeName";
///
/// 到达节点ID
///
public const string VarToNodeID = "VarToNodeID";
///
/// 到达的节点集合
///
public const string VarToNodeIDs = "VarToNodeIDs";
///
/// 到达节点名称
///
public const string VarToNodeName = "VarToNodeName";
///
/// 接受人集合的名称(用逗号分开)
///
public const string VarAcceptersName = "VarAcceptersName";
///
/// 接受人集合的ID(用逗号分开)
///
public const string VarAcceptersID = "VarAcceptersID";
///
/// 接受人集合的ID Name(用逗号分开)
///
public const string VarAcceptersNID = "VarAcceptersNID";
///
/// 子线程的WorkIDs
///
public const string VarTreadWorkIDs = "VarTreadWorkIDs";
#endregion 系统变量
}
///
/// 工作发送返回对象
///
public class SendReturnObj
{
///
/// 消息标记
///
public string MsgFlag = null;
///
/// 消息标记描述
///
public string MsgFlagDesc
{
get
{
if (MsgFlag == null)
throw new Exception("@没有标记");
switch (MsgFlag)
{
case SendReturnMsgFlag.VarAcceptersID:
return "接受人ID";
case SendReturnMsgFlag.VarAcceptersName:
return "接受人名称";
case SendReturnMsgFlag.VarAcceptersNID:
return "接受人ID集合";
case SendReturnMsgFlag.VarCurrNodeID:
return "当前节点ID";
case SendReturnMsgFlag.VarCurrNodeName:
return "接受人集合的名称(用逗号分开)";
case SendReturnMsgFlag.VarToNodeID:
return "到达节点ID";
case SendReturnMsgFlag.VarToNodeName:
return "到达节点名称";
case SendReturnMsgFlag.VarTreadWorkIDs:
return "子线程的WorkIDs";
case SendReturnMsgFlag.BillInfo:
return "单据信息";
case SendReturnMsgFlag.CCMsg:
return "抄送信息";
case SendReturnMsgFlag.CondInfo:
return "条件信息";
case SendReturnMsgFlag.CurrWorkOver:
return "当前的工作已经完成";
case SendReturnMsgFlag.EditAccepter:
return "编辑接受者";
case SendReturnMsgFlag.End:
return "当前的流程已经结束";
case SendReturnMsgFlag.FenLiuInfo:
return "分流信息";
case SendReturnMsgFlag.FlowOver:
return "当前流程已经完成";
case SendReturnMsgFlag.FlowOverByCond:
return "符合完成条件,流程完成.";
case SendReturnMsgFlag.HeLiuOver:
return "分流完成";
case SendReturnMsgFlag.MacthFlowOver:
return "符合工作流程完成条件";
case SendReturnMsgFlag.NewFlowUnSend:
return "新建流程";
case SendReturnMsgFlag.OverCurr:
return "当前流程完成";
case SendReturnMsgFlag.Rpt:
return "报表";
case SendReturnMsgFlag.SendSuccessMsg:
return "发送成功信息";
case SendReturnMsgFlag.SendSuccessMsgErr:
return "发送错误";
case SendReturnMsgFlag.SendWhen:
return "发送时";
case SendReturnMsgFlag.ToEmps:
return "到达人员";
case SendReturnMsgFlag.UnSend:
return "撤消发送";
case SendReturnMsgFlag.ToEmpExt:
return "到人员的扩展信息";
case SendReturnMsgFlag.VarWorkID:
return "工作ID";
case SendReturnMsgFlag.IsStopFlow:
return "流程是否结束";
case SendReturnMsgFlag.WorkRpt:
return "工作报告";
case SendReturnMsgFlag.WorkStartNode:
return "启动节点";
case SendReturnMsgFlag.AllotTask:
return "分配任务";
default:
return "信息:" + MsgFlag;
// throw new Exception("@没有判断的标记...");
}
}
}
///
/// 消息类型
///
public SendReturnMsgType HisSendReturnMsgType = SendReturnMsgType.Info;
///
/// 消息内容
///
public string MsgOfText = null;
///
/// 消息内容Html
///
public string MsgOfHtml = null;
///
/// 发送消息
///
public SendReturnObj()
{
}
}
///
/// 工作发送返回对象集合.
///
public class SendReturnObjs:System.Collections.CollectionBase
{
#region 获取系统变量.
public Int64 VarWorkID
{
get
{
foreach (SendReturnObj item in this)
{
if (item.MsgFlag == SendReturnMsgFlag.VarWorkID)
return Int64.Parse(item.MsgOfText);
}
return 0;
}
}
public bool IsStopFlow
{
get
{
foreach (SendReturnObj item in this)
{
if (item.MsgFlag == SendReturnMsgFlag.IsStopFlow)
{
if (item.MsgOfText == "1")
return true;
else
return false;
}
}
//throw new Exception("@没有找到系统变量IsStopFlow");
return false;
}
}
///
/// 到达节点ID
///
public int VarToNodeID
{
get
{
foreach (SendReturnObj item in this)
{
if (item.MsgFlag == SendReturnMsgFlag.VarToNodeID)
return int.Parse( item.MsgOfText);
}
return 0;
}
}
///
/// 到达节点IDs
///
public string VarToNodeIDs
{
get
{
foreach (SendReturnObj item in this)
{
if (item.MsgFlag == SendReturnMsgFlag.VarToNodeIDs)
return item.MsgOfText;
}
return null;
}
}
///
/// 到达节点名称
///
public string VarToNodeName
{
get
{
foreach (SendReturnObj item in this)
{
if (item.MsgFlag == SendReturnMsgFlag.VarToNodeName)
return item.MsgOfText;
}
return "没有找到变量.";
}
}
///
/// 到达的节点名称
///
public string VarCurrNodeName
{
get
{
foreach (SendReturnObj item in this)
{
if (item.MsgFlag == SendReturnMsgFlag.VarCurrNodeName)
return item.MsgOfText;
}
return null;
}
}
public int VarCurrNodeID
{
get
{
foreach (SendReturnObj item in this)
{
if (item.MsgFlag == SendReturnMsgFlag.VarCurrNodeID)
return int.Parse( item.MsgOfText);
}
return 0;
}
}
///
/// 接受人
///
public string VarAcceptersName
{
get
{
foreach (SendReturnObj item in this)
{
if (item.MsgFlag == SendReturnMsgFlag.VarAcceptersName)
return item.MsgOfText;
}
return null;
}
}
///
/// 接受人IDs
///
public string VarAcceptersID
{
get
{
foreach (SendReturnObj item in this)
{
if (item.MsgFlag == SendReturnMsgFlag.VarAcceptersID)
return item.MsgOfText;
}
return null;
}
}
///
/// 文本提示信息.
///
public string MsgOfText
{
get
{
foreach (SendReturnObj item in this)
{
if (item.MsgFlag == SendReturnMsgFlag.MsgOfText)
return item.MsgOfText;
}
return null;
}
}
///
/// 分流向子线程发送时产生的子线程的WorkIDs, 多个有逗号分开.
///
public string VarTreadWorkIDs
{
get
{
foreach (SendReturnObj item in this)
{
if (item.MsgFlag == SendReturnMsgFlag.VarTreadWorkIDs)
return item.MsgOfText;
}
return null;
}
}
#endregion
///
/// 构造
///
public SendReturnObjs()
{
}
///
/// 根据指定格式的字符串生成一个事例获取相关变量
///
/// 指定格式的字符串
public SendReturnObjs(string specText)
{
this.LoadSpecText(specText);
}
///
/// 输出text消息
///
public string OutMessageText = null;
///
/// 输出html信息
///
public string OutMessageHtml = null;
///
/// 增加消息
///
/// 消息标记
/// 文本消息
/// html消息
/// 消息类型
public void AddMsg(string msgFlag, string msg, string msgOfHtml, SendReturnMsgType type)
{
SendReturnObj obj = new SendReturnObj();
obj.MsgFlag = msgFlag;
obj.MsgOfText = msg;
obj.MsgOfHtml = msgOfHtml;
obj.HisSendReturnMsgType = type;
foreach (SendReturnObj item in this)
{
if (item.MsgFlag == msgFlag)
{
item.MsgFlag = msgFlag;
item.MsgOfText = msg;
item.MsgOfHtml = msgOfHtml;
item.HisSendReturnMsgType = type;
return;
}
}
this.InnerList.Add(obj);
}
///
/// 转化成特殊的格式
///
///
public string ToMsgOfSpecText()
{
string msg = "";
foreach (SendReturnObj item in this)
{
if (item.MsgOfText != null)
{
msg += "$" + item.MsgFlag + "^" + (int)item.HisSendReturnMsgType + "^" + item.MsgOfText;
}
}
//增加上 text信息。
msg += "$MsgOfText^"+(int)SendReturnMsgType.Info +"^" + this.ToMsgOfText();
msg.Replace("@@", "@");
return msg;
}
///
/// 装载指定的文本,生成这个对象。
///
/// 指定格式的文本
public void LoadSpecText(string text)
{
string[] strs = text.Split('$');
foreach (string str in strs)
{
string[] sp=str.Split('^');
this.AddMsg(sp[0], sp[2], null, (SendReturnMsgType)int.Parse(sp[1]));
}
}
///
/// 转化成text方式的消息,以方便识别不出来html的设备输出.
///
///
public string ToMsgOfText()
{
if (this.OutMessageText != null)
return this.OutMessageText;
string msg = "";
foreach (SendReturnObj item in this)
{
if (item.HisSendReturnMsgType == SendReturnMsgType.SystemMsg)
continue;
//特殊判断.
if (item.MsgFlag == SendReturnMsgFlag.IsStopFlow)
{
msg += "@" + item.MsgOfHtml;
continue;
}
if (item.MsgOfText != null )
{
if (item.MsgOfText.Contains("<"))
{
#warning 不应该出现.
// Log.DefaultLogWriteLineWarning("@文本信息里面有html标记:" + item.MsgOfText);
continue;
}
msg += "@" + item.MsgOfText;
continue;
}
}
msg.Replace("@@", "@");
return msg;
}
public string ToJson()
{
Hashtable ht = new Hashtable();
foreach (SendReturnObj item in this)
{
ht.Add(item.MsgFlag, item.MsgOfText);
}
return BP.Tools.Json.ToJson(ht);
}
///
/// 转化成html方式的消息,以方便html的信息输出.
///
///
public string ToMsgOfHtml()
{
if (this.OutMessageHtml != null)
return this.OutMessageHtml;
string msg = "";
foreach (SendReturnObj item in this)
{
if (item.HisSendReturnMsgType != SendReturnMsgType.Info)
continue;
if (item.MsgOfHtml != null)
{
msg += "@" + item.MsgOfHtml;
continue;
}
if (item.MsgOfText != null)
{
msg += "@" + item.MsgOfText;
continue;
}
}
msg = msg.Replace("@@", "@");
msg = msg.Replace("@@", "@");
if (msg == "@")
return "@流程已经完成.";
return msg;
}
}
}