ServiceTask调用示例
以下对已经实现的方法作以示例,供客户方技术人员进行二次开发。
- 本地程序
Argument List项输入参数名称,多个参数用逗号分隔,没有参数可以为空。Expression项输入本地要调用的类名及命名空间
本地的方法实现示例如下:
/// <summary>
/// 订单提交服务类(对应订单流程中订单提交节点)
/// </summary>
public class OrderSubmitService : ExternalServiceBase, IExternalService
{
/// <summary>
/// 业务逻辑前置调用方法
/// </summary>
public override void Execute()
{
//实现用户自己的业务逻辑
var id = DelegateService.GetID();
var amount = DelegateService.GetVariable("amount");
DoSomethingElse(amount, 20);
}
/// <summary>
/// 业务逻辑具体实现方法
/// </summary>
/// <param name="amount"></param>
/// <param name="newAmount"></param>
private void 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()方法,必须满足上述的查找基类继承和接口实现条件才能被反射执行,否则是不能被执行的。这样可以确保是执行到了明确定义的事件程序代码。
- WebApi
Http的请求方式,支持Get、Post、Put、Delete方式
步骤1:节点属性上的事件定义
步骤2:流程变量定义
通过WorkflowService接口写入流程变量(WfProcessVariable),变量用来传递WebApi方法的参数,此处作为示例:
步骤3:被调用WebApi程序的接口方法实现示例
上述示例中有两个参数:runner和role, 在WebApi的方法代码中,可以使用JSON格式数据作为接收,然后根据做序列化处理。
- CSharpLibrary
在节点绑定事件中,可以使用C#类库,如下图所示:
- 存储过程
存储过程是数据库定义的包含SQL脚本语法的程序过程(比如把上述的SQL脚本单独保存为存储过程),默认限定在同一个数据库实例中。