要调用的外部服务类,需要首先继承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()方法,必须满足上述的查找基类继承和接口实现条件才能被反射执行,否则是不能被执行的。这样可以确保是执行到了明确定义的事件程序代码。