using System;
using System.Threading;
using System.Collections;
using System.Data;
using
using BP.DTS;
using BP.En;
using BP.Web;
using BP.Sys;
using BP.WF;
namespace BP.FlowEvent
{
///
/// @FlowName 事件子类.
/// ccbpm提供了可以让程序员编写代码与流程引擎,表单引擎进行交互,以处理复杂的业务逻辑。
/// ccbpm预留一个基类 BP.WF.FlowEventBase ,只要从这个基类上集成下来的子类,按照约定的格式重写相关的方法属性,流程引擎就会把这些代码注册到流程引擎中,并在运动中执行。
/// 该功能提供了一个自动生成的代码模版,如果您有编程基础,就很容易明白如何通过该子类实现复杂的业务逻辑。
/// 下载下来该类后,您必须把他放入一个以BP.开头的类库里,ccflow才能被注册到引擎中去。
///
public class F001Templepte : BP.WF.FlowEventBase
{
#region 重写属性.
///
/// 重写流程标记
///
public override string FlowMark
{
get { return "@FlowNo"; }
}
#endregion 重写属性.
#region 构造 & 变量.
///
/// 报销流程事件
///
public F001Templepte()
{
}
#endregion 构造 & 变量.
#region 与发送相关事件.
///
/// 重写发送前事件
///
///
public override string SendWhen()
{
/*
* 说明:
* 0. 此事件在发送前触发,如果抛出异常,系统就会把异常信息提示出来,从而阻止向下运动。
* 1, 一般来说,在改事件里填写安全性检查代码与其他的业务逻辑。比如表单校验,校验失败就提示错误。
* 2, 也可以写一些其他的业务逻辑,来组织特定的节点在不符合条件的时候 ,不让其向下发送。
* 3, 也可以更新一些其他系统的数据、状态.
*/
// 当前的节点, 其他的变量请从 this.HisNode .
int nodeID = this.HisNode.NodeID; // int类型的ID.
string nodeName = this.HisNode.Name; // 当前节点名称.
return base.SendWhen();
}
///
/// 发送成功事件,发送成功时,把流程的待办写入其他系统里.
///
/// 返回执行结果,如果返回null就不提示。
public override string SendSuccess()
{
/*
* 说明:
* 0. 此事件在发送成功的时候触发,系统会把抛出异常的信息提示出来,如果返回一个执行结果的字符串系统就会把它提示出来。
* 1, 一般来说,在改事件里填写与外部数据交互代码,比如:把执行的信息,写入到其他的系统。
* 2, 可以通过访问当前的发送结果对象,来判断到流程实例发送到那个节点,那些接收人。
*/
try
{
// 组织必要的变量.
Int64 workid = this.WorkID; // 工作id.
string flowNo = this.HisNode.FK_Flow; // 流程编号.
int currNodeID = this.SendReturnObjs.VarCurrNodeID; //当前节点id
int toNodeID = this.SendReturnObjs.VarToNodeID; // 到达节点id.
string toNodeName = this.SendReturnObjs.VarToNodeName; // 到达节点名称。
string acceptersID = this.SendReturnObjs.VarAcceptersID; // 接受人员id, 多个人员会用 逗号分看 ,比如 zhangsan,lisi。
string acceptersName = this.SendReturnObjs.VarAcceptersName; // 接受人员名称,多个人员会用逗号分开比如:张三,李四.
//执行向其他系统写入待办.
/*
* 在这里需要编写你的业务逻辑,根据上面组织的变量.
*
*/
return base.SendSuccess();
}
catch (Exception ex)
{
throw new Exception("执行发送失败,执行节点[" + this.HisNode.NodeID + "," + this.HisNode.Name + "],详细信息:" + ex.Message);
}
}
///
/// 发送失败事件
///
/// 返回空
public override string SendError()
{
/*
* 说明:
* 0. 此事件在发送失败的时候触发,系统会把抛出异常的信息提示出来,如果返回一个执行结果的字符串系统就会把它提示出来。
* 1, 一般来说,在改事件里填写与外部数据交互回滚代码,比如在发送前,已经写了收款逻辑,在发送失败后就执行退款逻辑。
*/
try
{
// 组织必要的变量.
Int64 workid = this.WorkID; // 工作id.
string flowNo = this.HisNode.FK_Flow; // 流程编号.
int currNodeID = this.SendReturnObjs.VarCurrNodeID; //当前节点id
int toNodeID = this.SendReturnObjs.VarToNodeID; // 到达节点id.
string toNodeName = this.SendReturnObjs.VarToNodeName; // 到达节点名称。
string acceptersID = this.SendReturnObjs.VarAcceptersID; // 接受人员id, 多个人员会用 逗号分看 ,比如 zhangsan,lisi。
string acceptersName = this.SendReturnObjs.VarAcceptersName; // 接受人员名称,多个人员会用逗号分开比如:张三,李四.
//执行向其他系统写入待办.
/*
* 在这里需要编写你的业务逻辑,根据上面组织的变量.
*
*/
return base.SendError();
}
catch (Exception ex)
{
throw new Exception("执行发送失败,执行节点[" + this.HisNode.NodeID + "," + this.HisNode.Name + "],详细信息:" + ex.Message);
}
}
#endregion 与发送相关事件.
#region 与流程相关的操作.
///
/// 当创建WorkID的时候.
/// 经常根据当前用户的身份初始化数据.
///
/// 返回执行信息.
public override string FlowOnCreateWorkID()
{
return base.FlowOnCreateWorkID();
}
///
/// 流程结束之前
///
/// 返回null,不提示信息,返回string提示结束信息,抛出异常就阻止流程删除.
public override string FlowOverBefore()
{
/*
* 说明
* 0, 流程结束之前的操作.
*/
try
{
return null;
}
catch(Exception ex)
{
throw new Exception("@流程不能结束,异常信息:"+ex.Message);
}
}
///
/// 流程结束之后
///
/// 返回null,不提示信息,返回string提示结束信息,抛出异常不处理。
public override string FlowOverAfter()
{
try
{
return null;
//return "流程正常结束.";
}
catch(Exception ex)
{
return ex.Message;
}
}
///
/// 流程删除前
///
/// 返回null,不提示信息,返回信息,提示删除警告/提示信息, 抛出异常阻止删除操作.
public override string BeforeFlowDel()
{
/*
* 说明:
* 0,该方法在流程删除之前触发。
* 1,删除之前,首先要检查必要的业务操作,如果抛出异常就不能阻止删除动作,
* 2, 返回string 就提示删除操作的风险。
* 3,返回null, 就不提示。
*/
/*
* 执行退款操作.
*/
if (1 == 2)
throw new Exception("@该流程不能被删除,因为退款不成功。");
return "@退款已经成功了,该订单取消了。";
}
///
/// 流程删除后
///
/// 返回null,不提示信息,返回信息,提示删除警告/提示信息, 抛出异常不处理.
public override string AfterFlowDel()
{
/*
* 说明:
* 0,该方法在流程成功删除之后触发。
* 1,删除之后,可以处理相关的业务,如果抛出异常系统不处理。
* 2, 返回string 提示删除执行结果。
* 3,返回null, 就不提示。
*/
return base.AfterFlowDel();
}
#endregion 与流程相关的操作
#region 与节点表单相关事件 .
///
/// 保存后执行的事件
///
///
public override string SaveAfter()
{
/*
* 说明:
* 0, 该事件仅仅与节点表单有效.
* 1,
* 1, 保存后,可以处理复杂的表单字段之间的关系,比如:把从表的一个数值列求和到主表上去。
*/
try
{
// 当前的节点, 其他的变量请从 this.HisNode .
int nodeID = this.HisNode.NodeID; // int类型的ID.
string nodeName = this.HisNode.Name; // 当前节点名称.
return base.SaveAfter();
}
catch (Exception ex)
{
throw new Exception("执行[保存后执行的事件],执行节点[" + this.HisNode.NodeID + "," + this.HisNode.Name + "],详细信息:" + ex.Message);
}
}
///
/// 保存之前
///
///
public override string SaveBefore()
{
return base.SaveBefore();
}
#endregion 与节点表单相关事件 .
#region 与撤销相关的操作.
///
/// 撤销之前的操作
///
/// 返回撤销前提示的信息,返回null,则不提示,抛出异常则阻止撤销操作.
public override string UndoneBefore()
{
/*
* 说明:
* 0, 撤销是一个在发送之后,由当前节点之前的发送人执行的收回发送操作.
* 1, 该事件在执行撤销之前触发。
* 2,如果返回null, 怎不提示,返回一个字符串则提示撤销前的警告,如果抛出异常则阻止撤销操作。
* 3, 使用该事件,可以灵活的处理撤销前后的一些业务逻辑。
*/
return base.UndoneBefore();
}
///
/// 撤销之后的操作
///
/// 返回执行撤销成功的信息,返回null,则不提示,如果抛出异常不处理。
public override string UndoneAfter()
{
/*
* 说明:
* 0, 撤销后事件是在执行撤销后触发。
* 1,如果返回null, 怎不提示,返回一个字符串则提示撤销前的警告,如果抛出异常则阻止撤销操作。
* 2, 使用该事件,可以灵活的处理撤销前后的一些业务逻辑。
*/
return base.UndoneAfter();
}
#endregion 与撤销相关的操作.
#region 与退回相关事件.
///
/// 退回前事件
///
/// 退回时的提示信息
public override string ReturnBefore()
{
/*
* 说明:
* 0, 退回前要触发的事件.
* 1, 如果抛出异常,系统就阻止了退回,比如:有一些商品是不允许退货的,有一些商品是可以退货。
* 执行这个事件就抛出异常系统就会把该信息提示出来。
* 2, 返回string信息,系统就提示该信息给操作员。
*/
try
{
// 当前的节点, 其他的变量请从 this.HisNode .
int nodeID = this.HisNode.NodeID; // int类型的ID.
string nodeName = this.HisNode.Name; // 当前节点名称.
if (1 == 0)
throw new Exception("该商品不允许退货,您不能退回。");
return null; //返回空就不提示。
}
catch (Exception ex)
{
throw new Exception("执行[退回前事件],执行节点[" + this.HisNode.NodeID + "," + this.HisNode.Name + "],详细信息:" + ex.Message);
}
}
///
/// 退回后执行的事件
///
/// 退回后的提示信息
public override string ReturnAfter()
{
/*
* 说明:
* 0, 退回前要触发的事件.
* 1, 如果抛出异常,系统不处理,比如:比如在商城退货后就提示信息,告诉操作员。
* 2, 返回string信息,系统就提示该信息给操作员。
*/
try
{
// 当前的节点, 其他的变量请从 this.HisNode .
int nodeID = this.HisNode.NodeID; // int类型的ID.
string nodeName = this.HisNode.Name; // 当前节点名称.
return "退回成功."; //提示退回信息. return null, 不提示信息。
}
catch (Exception ex)
{
return "执行[退回前事件],执行节点[" + this.HisNode.NodeID + "," + this.HisNode.Name + "],详细信息:" + ex.Message;
}
}
#endregion 与退回相关事件.
#region 与加签相关的操作.
///
/// 加签之后的操作
///
/// 返回执行的信息
public override string AskerAfter()
{
return base.AskerAfter();
}
///
/// 加签答复相关的操作
///
/// 返回执行的信息
public override string AskerReAfter()
{
return base.AskerReAfter();
}
#endregion 与加签相关的操作.
}
}