workflow-core 数据传递

使用workflow 过程中一定涉及数据在各stepbody专递,下面建立一个 工作流,演示如何通过传值计算两个数乘积

一、建立用于传值的类 mydata

/// <summary>
    /// 功能传值 使用
    /// </summary>
        public class myData {
        /// <summary>
        /// 传递 给input1
        /// </summary>
        public int Value1 { get; set; }
        /// <summary>
        /// 传递 给input2
        /// </summary>
        public int Value2 { get; set; }
        /// <summary>
        /// 传递 给Output
        /// </summary>
        public int Value3 { get; set; }

    }

二、建立过程体(StepBody) Multiplication 用于计算 input1* Input2=Output

 /// <summary>
    /// 功能  计算 input1*input2=Output
    /// </summary>
    public class Multiplication : StepBody
    {
        public int Input1 { get; set; }
        public int Input2 { get; set; }
        public int Output { get; set; }

        public override ExecutionResult Run(IStepExecutionContext context)
        {
            Output =  Input1 * Input2 ;
            return ExecutionResult.Next();
        }
    }

三、建立过程体用于输出计算结果  PrintResult

 /// <summary>
    /// 功能 输出结果
    /// </summary>
    public class PrintResult : StepBody
    {
        public string Message { get; set; }
        public override ExecutionResult Run(IStepExecutionContext context)
        {
            Console.WriteLine(Message);
            return ExecutionResult.Next();
        }
    }

四、新建工作流(passDataWorkFlow),用于启动工作流、传参,计算结果 

 

  public class passDataWorkFlow:IWorkflow<myData>
    {
        public string Id => "PassingDataWorkflow";

        public int Version => 1;
        public void Build(IWorkflowBuilder<myData> builder)
    {
        builder
            .StartWith(context =>
            {
                Console.WriteLine("工作流启动!!!");
               return ExecutionResult.Next();
            })
            .Then<Multiplication>()
                .Input (step => step.Input1, data => data.Value1)//将 Value1赋值 给input1
                .Input (step => step.Input2, data => data.Value2)//将 Value2赋值 给input2
                .Output(data => data.Value3, step => step.Output)//将 Output 给 value3              
                .Then<PrintResult>()           
            .Input(step => step.Message, data => $"工作流执行结果{data.Value1}*{data.Value2}= " + data.Value3.ToString())
            .Then(context =>
            {
                Console.WriteLine("工作流执行完毕!!");
                 return ExecutionResult.Next();
            });
    }
}

五、启动工作流

  在asp.net  core HomeController  新建一个Action 启动工作流

 

 public class HomeController : Controller{
        IServiceProvider serviceProvider1 = null;       
        public HomeController(IServiceProvider serviceProvider1 )
        {  this.serviceProvider1 = serviceProvider1;            }
public IActionResult passingData() { var host= serviceProvider1.GetService<IWorkflowHost>(); host.RegisterWorkflow<passDataWorkFlow, myData>(); host.Start(); var initialData = new myData { Value1 = 100, Value2 = 1000 }; //传入 两个数据 计算乘积 host.StartWorkflow("PassingDataWorkflow", 1, initialData); Console.ReadLine(); host.Stop(); return Json(null); } }

 

结果如下:

 

posted on 2022-08-31 10:10  码农at突泉  阅读(352)  评论(0)    收藏  举报