在这一节,我们一起学习通过其他程序调用工作流,并且在工作流启动时给工作流传递一些数据,使其在工作流中使用。 在workflow开始执行时,我们有两种方式给工作流传递数据------参数和事件。今天,我们先说说怎样通过参数来给工作流传递数据。 需要传递给workflow的参数,我们需要先在工作流中通过属性来进行设置,而后在其他程序调用这个工作流创建一个工作流的实例时,通过 Dictionary<string, object>键值集合进行传递,如下: 继续使用我们上一节用到的代码,给Workflow1 类添加两个属性FirstName和LastName
private
string
firstName ;
public string FirstName { get { return firstName; } set { firstName = value; } } private string lastName; public string LastName { get { return lastName; } set { lastName = value; } }
这里我们将通过其他应用程序传递fristName和lastName并让这两个值在工作流执行过程中以对话框的形式显示出来。 因为我们上一节中创建的是个控制台应用程序,所以让起弹出对话框需要应用System.Windows.Forms程序集。 然后修改我们的Workflow1类中的codeActivity1_CodeHandler
private
void
codeActivity1_CodeHandler(
object
sender, EventArgs e)
{ System.Windows.Forms.MessageBox.Show( " Hello world: " + firstName + " " + lastName); }
下面我们要创建一个winForm应用程序。 添加一个新的项目WinFormTestHost。
接下来我们要确认我们新创建的项目WinFormTestHost能够调用工作流Workflow1。 给WinFormTestHost添加引用,引用项目HelloWorldWorkflow.
同时,我们还要让我们的这个winfrom应用程序引用wwf程序集。继续添加引用,选择.net选项卡,添加如下三项: System.Workflow.Activities System.Workflow.ComponentModel System.Workflow.Runtime ![]()
修改我们的Form1窗体。 添加两个Label分别为Label1和Label2,Text属性分别为First name和 LastName。 添加两个TextBox分别为txtFirstName和txtLastName。 添加一个按钮btnStartWorkflow,用来启动我们的工作流,Name属性为btnStartWorkflow,Text属性为Start Workflow。 这个简单的窗体就做完了,我们来添加代码。
private
WorkflowRuntime wr;
private
void
btnStartWorkflow_Click(
object
sender, EventArgs e)
{ if (wr == null ) { wr = new WorkflowRuntime(); wr.StartRuntime(); } // 定义键和值的集合(Dictionary)用来传递参数 Dictionary < string , object > parameters = new Dictionary < string , object > (); parameters.Add( " FirstName " , txtFirstName.Text); parameters.Add( " LastName " , txtLastName.Text); // 创建一个工作流实例 WorkflowInstance instance = wr.CreateWorkflow( typeof (HelloWorldWorkflow.Workflow1), parameters); // 启动工作流 instance.Start(); } 最后给FormClosed事件添加一段代码,使其在关闭窗体时关闭工作流
private
void
Form1_FormClosed(
object
sender, FormClosedEventArgs e)
{ if (wr != null ) { if (wr.IsStarted) { wr.StopRuntime(); } } }
现在,我们的程序就开发完成了,点击F5,将打开窗体:
我们输入名称后点Start Workflow,将弹出窗体:
这个窗体是在Workflow1中执行的,同时,我们也看到,在winfrom窗体中输入的值成功的传递到了工作流中。 |