流程流传时候的事件方法调用示例
要调用的外部服务类,需要首先继承ExternalServiceBase类,同时实现IExternalService接口。下面的OrderSubmitService类就是一个具体实现类。
请参考Slickflow.Module.External项目。
///<summary>
/// 订单提交服务类(对应订单流程中订单提交节点)
///</summary>
publicclassOrderSubmitService : ExternalServiceBase, IExternalService
{
///<summary>
/// 业务逻辑前置调用方法
///</summary>
publicoverridevoid Execute()
{
//实现用户自己的业务逻辑
var id = DelegateService.GetID();
var amount = DelegateService.GetVariable("amount");
DoSomethingElse(amount, 20);
}
///<summary>
/// 业务逻辑具体实现方法
///</summary>
///<param name="amount"></param>
///<param name="newAmount"></param>
privatevoid DoSomethingElse(string amount, int newAmount)
{
var intAmount = 0;
int.TryParse(amount, out intAmount);
if (intAmount < newAmount)
{
DelegateService.SetVariable("amount", newAmount.ToString());
}
//调用其它业务处理逻辑
var session = DelegateService.GetSession();
//实现其它数据库业务逻辑
//.............................
}
}
在引擎流转执行过程中,当解析到节点上有调用外部事件的Action定义时,将会使用反射方法,查找到组件是否有OrderSubmitService类,并且是实现了ExtneralServiceBase和IExternalService 接口的服务类,才能被执行其中的Execute()方法,必须满足上述的查找基类继承和接口实现条件才能被反射执行,否则是不能被执行的。这样可以确保是执行到了明确定义的事件程序代码。