首页 > 代码库 > XOML方式创建和启动工作流 <第十篇>

XOML方式创建和启动工作流 <第十篇>

一、XOML使用工作流的好处

  通过Xoml方式使用工作流的好处在于,它能够不重新启动程序的情况下,仅仅通过配置xoml就能够实现改变工作流,非常灵活。

  

  创建一个WinForm程序如下:

  

  代码如下:

namespace WinForm{    public partial class Form1 : Form    {        //定义工作流运行时Runtime容器        WorkflowRuntime workflowRuntime = new WorkflowRuntime();        public Form1()        {            InitializeComponent();            workflowRuntime.StartRuntime();        }        private void button1_Click(object sender, EventArgs e)        {            //新建一个工作流            SequenceActivity workflow = new SequenceActivity();            workflow.Activities.Add(new MyActivity() { Message = "我已经执行啦!" });            WorkflowMarkupSerializer serializer = new WorkflowMarkupSerializer();            //将工作流保存在Xml文件里面            using(XmlWriter xr = XmlWriter.Create("MyWorkflow.xoml", new XmlWriterSettings() { CloseOutput = true })){                serializer.Serialize(xr, workflow);            }            MessageBox.Show("工作流创建成功!");        }        private void button2_Click(object sender, EventArgs e)        {            //从Xml文件上执行工作流,如果你愿意,你可以将Xml数据保存在任何地方,甚至是保存在数据库里面            //然后从数据库里面读出工作流,然后执行            WorkflowInstance winstance = workflowRuntime.CreateWorkflow(XmlReader.Create("MyWorkflow.xoml"));            winstance.Start();        }    }    public partial class MyActivity : Activity    {        public string Message { get; set; }        protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)        {            MessageBox.Show(Message);            return base.Execute(executionContext);        }    }}

  效果如下:

  

  基于这种方式,可以实现制作出一套易操作的UI界面,让用户去配置流程,然后将生成的流程保存在Xml、字符串、数据库中。然后实现读取出流程,然后执行的目的。

  结合XmlReader的重载,可以实现,只有一个字符串,就能够启动流程:

    var xmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\"?><SequenceActivity x:Name=\"SequenceActivity\" xmlns:ns0=\"clr-namespace:WinForm;Assembly=WinForm, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/workflow\"><ns0:MyActivity Message=\"我已经执行啦!\" x:Name=\"myActivity1\" /></SequenceActivity>";    WorkflowInstance winstance = workflowRuntime.CreateWorkflow(XmlReader.Create(new StringReader(xmlStr)));    winstance.Start();

 

XOML方式创建和启动工作流 <第十篇>